cassandra架构数据设计用于多对多阵列关系

时间:2013-07-11 18:15:44

标签: nosql cassandra schema bigdata

所以我需要一个可以为大约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并开始搞乱它但我甚至无法让列表工作,因为我需要'复合'主键?我不明白为什么。

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

根据您所描述的内容,您可能只需为user_ids创建一个键空间,然后您的值可以是“最喜欢的项目”的非规范化副本和“类似用户ID”的列表。假设您的下一步操作是与这些类似用户做某事,您可以从ID列表中快速获取它们。

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

希望它有所帮助,

-Robert