所以我需要一个可以为大约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并开始搞乱它但我甚至无法让列表工作,因为我需要'复合'主键?我不明白为什么。
非常感谢任何帮助/推动正确的方向。
谢谢!
答案 0 :(得分:1)
我不确定您是否已充分描述了您的用例。访问模式首先定义了您的密钥设计,最终定义了NoSQL数据库的工作负载特征。例如,您是否必须根据某些地理位置或某些内容对这些用户进行搜索,或者这只是简单,抓住1个用户和他最喜欢的项目和/或他的类似用户。
根据您所描述的内容,您可能只需为user_ids创建一个键空间,然后您的值可以是“最喜欢的项目”的非规范化副本和“类似用户ID”的列表。假设您的下一步操作是与这些类似用户做某事,您可以从ID列表中快速获取它们。
重要的一点是你的密钥有多大(我的意思是字符/字节)并且你能够将它们放入内存中以便获得非常快的性能。如果您的计算机的密钥大小内存有限,那么您需要规划多个节点,这些节点可以容纳给定数量的密钥,并让这些节点在不同的服务器上运行。至少这是Oracle NoSQL数据库(ONDB)最重要的部分....我是该团队的一员。好消息是300M仍然非常小。
希望它有所帮助,
-Robert