如何在cassandra中自动复制数据

时间:2014-10-30 13:51:32

标签: cassandra data-modeling nosql

我对cassandra很新,目前处于我正在研究cassandra的项目的早期阶段。

现在,因为cassandra说要对数据进行去标准化并复制它。所以,我有以下情况:

我为用户提供了表user_master。用户

  • subject [type text]
  • 爱好[类型列表]
  • uid [type int]
  • 大约40多个属性

现在,用户想要搜索其他用户。此搜索应查找与用户提供的subjecthobbies匹配的所有用户。出于这个原因,我打算制作一个不同的表user_discovery,它只对每个用户都有以下属性

  • subject [type text]
  • 爱好[类型列表]
  • uid [type int]

*其他不相关的属性不会成为此表的一部分。 现在我的问题是:

  1. 我是否需要在user_master中为每个插入/更新写两个表?在user_discovery中进行任何插入/更新时,user_master的更新是否会自动生效。

  2. 即使在研究了一下之后,我仍然不太确定制作一个单独的表会增加性能。因为,两个表中的用户数相同(是的,列的数量会在user_discovery中非常少。任何对此的评论都将受到高度赞赏。

  3. 由于

1 个答案:

答案 0 :(得分:1)

查询的单独表的想法是让表的键包含您要查找的内容。

你没有说你的第二张表的关键字是什么样的,但是你的措辞“每个用户的以下属性”看起来你打算让用户(Id?)作为关键。这确实没有性能优势。

如果你想通过他们的爱好找到用户,那就把一个以爱好为关键的表,以及用户id(或者你用来查找用户的任何东西)作为列。每个爱好写一行,列出所有具有该爱好的用户。将用户写入与他的一个爱好相匹配的每一行。

对主题执行相同操作(即单独的表,主题为键,用户ID为列)。

然后,如果您想找到具有特定爱好列表的用户,请按照每个爱好进行一次查询,创建用户的交集。

要使用这些查找表,每次更新用户时都要更新所有表。

免责声明:我在管理数十万用户的相对复杂的设置中使用了这种方法。然而,这是两年前的Cassandra 1.5系统。我还没有真正研究过Cassandra 2.0的新功能,所以我不知道今天是否可以使用更优雅的方法。