Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';cassandra中的行键、主键和索引有什么区别?_Cassandra - Fatal编程技术网

什么';cassandra中的行键、主键和索引有什么区别?

什么';cassandra中的行键、主键和索引有什么区别?,cassandra,Cassandra,我很困惑。 何时使用以及如何确定使用哪一种? 如果列是索引/主键/行键,是否可以复制 我想创建一个列族来存储一些多对多信息,例如,一列是给定的名称,另一列是姓氏。一个名字可以与许多姓氏相关,一个姓氏可以有不同的名字 我需要用一个给定的名字来查询姓氏,也需要用一个指定的姓氏来查询给定的名字 如何创建表 谢谢 Cassandra是一个NoSQL数据库,因此没有多对多关系的概念。理想情况下,一个表除了主键之外不应该有任何内容。在您的案例中,在Cassandra中对其建模的正确方法是创建两个表,一个以n

我很困惑。 何时使用以及如何确定使用哪一种? 如果列是索引/主键/行键,是否可以复制

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

我需要用一个给定的名字来查询姓氏,也需要用一个指定的姓氏来查询给定的名字

如何创建表


谢谢

Cassandra是一个NoSQL数据库,因此没有多对多关系的概念。理想情况下,一个表除了主键之外不应该有任何内容。在您的案例中,在Cassandra中对其建模的正确方法是创建两个表,一个以name作为主键,另一个以姓氏作为主键

当需要按任一键进行查询时,需要查询将该键作为主键的表

编辑: 从卡桑德拉文档:

Cassandra的内置索引最好用于具有许多行的表 包含索引值。中存在的更独特的值 对于特定的列,平均而言,您将有更多的开销用于 查询并维护索引。例如,假设您有一场比赛 表中有数百场比赛中10亿名自行车选手参赛 想看看骑自行车的人的排名。许多骑自行车的人都会参加比赛 比赛年的列值相同。“赛马年”专栏是一个很好的例子 索引的候选项

在以下情况下不要使用索引:

  • 在高基数列上查询大量记录以获得少量结果
  • 在对频繁更新或删除的列使用计数器列的表中
  • 在大分区中查找行,除非是狭义查询

谢谢你的回复。两张桌子是一个很好的方式,同时我们要确保它们的内容是相同的。创建表时,可以指定主键;创建表之后,我们可以为它创建索引。因此,它仍然具有概念索引和主键。查询时,键应该是主键还是索引?表的任何附加索引都会减慢查询速度。执行查询时,应始终查询主键。您可以添加索引,但每个索引都有一个性能惩罚。那么索引的目的和好处是什么?