Nosql 多对多数组关系的cassandra模式数据设计

Nosql 多对多数组关系的cassandra模式数据设计,nosql,cassandra,schema,bigdata,Nosql,Cassandra,Schema,Bigdata,所以我需要一个数据库,可以存储约3亿用户的信息。每个用户将有两个向量:他们最喜欢的5个项目和他们最相似的5个用户(这些用户也包含在用户集中) 例: 所以基本上我需要两个表,都有很多关系,都比较大。 我一直在探索cassandra(但我对其他解决方案持开放态度),我想知道我将如何定义模式,以及我需要什么类型的索引来优化和正常工作 我需要以两种方式进行查询: 1.当然由用户提供,以及 二,。根据他们名单上的任何项目。 (因此我可以获得具有相同收藏项目的用户列表) 我已经设置了cassandra并开始

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

例:

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

我需要以两种方式进行查询:

1.当然由用户提供,以及
二,。根据他们名单上的任何项目。 (因此我可以获得具有相同收藏项目的用户列表)

我已经设置了cassandra并开始处理它,但我甚至不能让列表工作,因为我需要“复合”主键?我不明白为什么

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


谢谢

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

根据您所描述的,您可能只需要为用户id创建一个键空间,然后您的值就可以是“收藏夹项”和“类似用户id”列表的非规范化副本。假设您的下一个操作是对那些类似的用户做一些事情,那么您可以快速地从id列表中获取他们

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

希望有帮助


-罗伯特

。嗯。。。阅读我自己的帖子时,我意识到这有点不清楚。ONDB有主次键实现,所以所有次部分都在本地集群到主键空间。因此,您希望user_id-favorite和user_id-类似于键。然后,您可以高效地获取其中一个或两个值。重要的一点是选择一个好的用户id键空间来获得好的分发。
preferences                  users

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