我对cassandra很新,目前处于我正在研究cassandra的项目的早期阶段。
现在,因为cassandra说要对数据进行去标准化并复制它。所以,我有以下情况:
我为用户提供了表user_master
。用户
现在,用户想要搜索其他用户。此搜索应查找与用户提供的subject
和hobbies
匹配的所有用户。出于这个原因,我打算制作一个不同的表user_discovery
,它只对每个用户都有以下属性
*其他不相关的属性不会成为此表的一部分。 现在我的问题是:
我是否需要在user_master
中为每个插入/更新写两个表?在user_discovery
中进行任何插入/更新时,user_master
的更新是否会自动生效。
即使在研究了一下之后,我仍然不太确定制作一个单独的表会增加性能。因为,两个表中的用户数相同(是的,列的数量会在user_discovery
中非常少。任何对此的评论都将受到高度赞赏。
由于
答案 0 :(得分:1)
查询的单独表的想法是让表的键包含您要查找的内容。
你没有说你的第二张表的关键字是什么样的,但是你的措辞“每个用户的以下属性”看起来你打算让用户(Id?)作为关键。这确实没有性能优势。
如果你想通过他们的爱好找到用户,那就把一个以爱好为关键的表,以及用户id(或者你用来查找用户的任何东西)作为列。每个爱好写一行,列出所有具有该爱好的用户。将用户写入与他的一个爱好相匹配的每一行。
对主题执行相同操作(即单独的表,主题为键,用户ID为列)。
然后,如果您想找到具有特定爱好列表的用户,请按照每个爱好进行一次查询,创建用户的交集。
要使用这些查找表,每次更新用户时都要更新所有表。
免责声明:我在管理数十万用户的相对复杂的设置中使用了这种方法。然而,这是两年前的Cassandra 1.5系统。我还没有真正研究过Cassandra 2.0的新功能,所以我不知道今天是否可以使用更优雅的方法。