Cassandra 用于低基数群集列的上的二级索引

Cassandra 用于低基数群集列的上的二级索引,cassandra,Cassandra,将Cassandra用作数据库: 假设我们有这个模式 主键((id1),id2,type)带有索引在类型上,因为我们希望通过id1和id2进行查询 你喜欢什么 从my_表中选择*,其中id1=xxx并键入='some type' 你会表现出色吗 我想知道我们是否必须为这种情况创建和管理另一个表 您计划使用二级索引的方式是理想的(很少)。原因如下: 在查询中指定分区键(id1)。这确保 只查询相关的分区(节点),不查询 命中群集中的所有节点(不可扩展) 您(大概)正在索引一个低基数的属性(我可以

将Cassandra用作数据库:

假设我们有这个模式
主键((id1),id2,type)
带有
索引
类型
上,因为我们希望通过
id1
id2
进行查询

你喜欢什么
从my_表中选择*,其中id1=xxx并键入='some type'
你会表现出色吗


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

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

  • 在查询中指定分区键(id1)。这确保 只查询相关的分区(节点),不查询 命中群集中的所有节点(不可扩展)
  • 您(大概)正在索引一个低基数的属性(我可以想象您可能有几百种类型?),这是使用二级索引时的最佳选择
总的来说,您的数据模型应该表现良好,并且可以扩展。然而,如果您希望获得最佳性能,我建议您使用一个额外的表((id1),类型id2)

终结注释:如果类型有限,可以考虑单独使用((ID1)、类型、ID2)作为单个表。当通过id1-id2进行查询时,只需针对类型的可能值发出一些并行查询


最后的决定需要考虑您的目标延迟、磁盘使用情况(使用不同的主键复制表有时过于昂贵)以及每次查询的频率。

谢谢,这是一个非常可靠的建议。您的最后一个注释看起来非常理想,但不幸的是,这个微服务不知道它存储的是什么类型。很好的建议。