0

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

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

谢谢!

4

1 回答 1

1

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

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

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

希望能帮助到你,

-罗伯特

于 2013-07-12T18:42:18.350 回答