低基数聚类列的二级索引

时间:2018-04-13 20:11:36

标签: cassandra

使用Cassandra作为db:

假设我们有这个架构 我primary_key((id1),id2,type)index type {1}},因为我们想按id1id2进行查询。

查询是否像 SELECT * FROM my_table WHERE id1=xxx AND type='some type' 表现不错?

我想知道我们是否必须为这种情况创建和管理另一个表?

1 个答案:

答案 0 :(得分:1)

您计划使用二级索引的方式是理想的(很少见)。原因如下:

  • 在查询中指定分区键(id1)。这确保了 只查询相关的分区(节点),而不是 命中集群中的所有节点(不可扩展)
  • 你(大概)索引一个低基数的属性(我可以想象你可能有几百种?),这是使用二级索引时的最佳位置。

总的来说,您的数据模型应该表现良好并且可以扩展。然而,如果你寻找最佳表现,我建议你使用一个附加表((id1),type,id2)。

结局注意:如果您的类型数量有限,您可以考虑单独使用((id1),type,id2)作为单个表。当通过id1-id2查询时,只需针对类型的可能值发出一些并行查询。

最终决定需要考虑您的目标延迟,磁盘使用情况(使用不同主键的重复表有时太贵)以及每个查询的频率。