2016-03-02 175 views
1

我很困惑。 何时使用它们以及如何确定使用哪一个? 如果某列是索引/主键/行键,是否可以重复?cassandra中的行键,主键和索引有什么区别?

我想创建一个列族来存储一些多对多的信息,例如,一列是给定名称,另一列是姓氏。一个名字可以与许多姓氏有关,而一个姓氏可以有不同的名字。

我需要通过一个给定的名字查询姓氏,以及通过指定的姓氏查询给定的姓名。

如何创建表?

谢谢!

回答

1

Cassandra是一个NoSQL数据库,因此没有这种多对多关系的概念。理想情况下,表格不应该包含主键以外的任何内容。在您的情况下,在Cassandra中建模的正确方法是创建两个表,一个以名称作为主键,另一个以姓氏作为主键

当您需要使用任一键进行查询时,需要查询具有该键作为主键

编辑表: 从卡桑德拉文档:

Cassandra的内置指标是最好的具有 包含索引值,许多行的表。 特定列中存在的唯一值越多,您将平均拥有的查询和维护索引的开销就越大。例如,假设你有一个比赛表,其中有数百个参赛者的十亿个参赛作品,并且 想要骑自行车者查找排名。许多骑自行车者的队伍将分享 比赛年的相同列值。 race_year列是索引的候选人,是一个很好的 。

不要在这些情况下使用索引:

  • 在高基数列的记录为少数结果的体积庞大的查询。
  • 在使用计数器列的表中在频繁更新或删除的列上。
  • 查找大型分区中的行,除非查询范围很窄。
+0

感谢您的回复。两张表格是确保他们的内容相同的好方法。当创建表时,我们可以指定主键;创建表后,我们可以为它创建索引。所以它仍然有概念索引和主键。当我们查询时,键应该是主键还是索引? –

+0

表的任何附加索引都会减慢查询速度。执行查询时,应始终查询主键。你可以添加索引,但是每个索引都有性能损失 – TheGeorgeous

+0

那么索引的目的和好处是什么? –