【问题标题】:cassandra schema data design for many-to-many array relationship多对多数组关系的 cassandra 模式数据设计
【发布时间】:2013-07-11 18:15:44
【问题描述】:

所以我需要一个可以为大约 3 亿用户存储信息的数据库。每个用户将有两个向量:他们最喜欢的 5 个项目,以及他们最相似的 5 个用户(这些用户也包含在用户集中)

例如:

preferences                  users

user  |  item           user  |  user  
--------------          --------------
user1 |  item1          user1 |  user2
user1 |  item2          user1 |  user4
user1 |  item3          user2 |  user8
user2 |  item3             .   .   .
user2 |  item4
.    .   . 

所以基本上我需要两张表,都是多对多关系,而且都比较大。 我一直在探索 cassandra(但我对其他解决方案持开放态度),我想知道我将如何定义架构,以及我需要什么类型的索引来优化和正常工作。

我需要以两种方式查询:

1.当然是由用户,并且
2。通过他们列表中的任何项目。 (这样我就可以得到一个拥有相同收藏项的用户列表)

我已经设置了 cassandra 并开始使用它,但我什至无法让列表工作,因为我需要“复合”主键?我不明白为什么。

非常感谢任何朝着正确方向的帮助/推动。

谢谢!

【问题讨论】:

    标签: nosql cassandra schema bigdata


    【解决方案1】:

    我不确定您是否充分描述了您的用例。访问模式首先定义了您的关键设计,最终定义了 NoSQL 数据库的工作负载特征。例如,您是否必须根据特定地理位置或类似的东西搜索用户,或者这只是简单的,抓取 1 个用户和他最喜欢的项目和/或他的类似用户。

    根据您的描述,您可能应该只为 user_ids 创建一个键空间,然后您的值可以是“最喜欢的项目”的非规范化副本和“相似用户 id”的列表。假设您的下一步行动是与那些相似的用户做某事,您可以快速从 id 列表中获取他们。

    重要的一点是您的密钥有多大(我的意思是字符/字节),您是否能够将它们放入内存中,从而获得非常快的性能。如果您的机器的密钥大小内存有限,那么您需要规划多个节点,这些节点可以容纳给定数量的密钥,并让这些节点在单独的服务器上运行。至少这是 Oracle NoSQL 数据库 (ONDB) 最重要的部分……我是那个团队的一员。好消息是 300M 仍然很小。

    希望对你有帮助,

    -罗伯特

    【讨论】:

    • ..uh...阅读我自己的帖子意识到它有点不清楚。 ONDB 具有主要-次要密钥实现,因此所有次要部分都在本地集群到主要密钥空间。因此,您希望 user_id-favorite 和 user_id-similar 作为键。然后你可以有效地获得一个或两个值。重要的一点是选择一个好的 user_id 键空间以获得良好的分布。
    猜你喜欢
    • 1970-01-01
    • 2012-09-30
    • 2019-09-25
    • 2021-09-13
    • 1970-01-01
    • 2011-05-01
    • 2012-03-01
    • 1970-01-01
    相关资源
    最近更新 更多