【问题标题】:Cassandra Slice Query for parts of CompositeType部分 CompositeType 的 Cassandra 切片查询
【发布时间】:2011-11-25 06:21:42
【问题描述】:

我有一个由四个字段组成的复合列:(field1, field2, field3, field4)。我需要执行以下切片查询: 1.获取field2具有特定值的所有复合列,其他字段无关紧要。假设我有三个组合列作为行键:('ACTIVE', '35', 'Name', 'Time'), ('INACTIVE', '35', 'City', 'Country') 和(“被动”、“25”、“时间”、“区域”)。给定 field3 的行键和值作为 '35' 我应该得到前两个复合列的结果。任何建议将不胜感激。

【问题讨论】:

  • field1 可以有多少个不同的值?具有复合键的列首先按第一个维度排序,然后是下一个维度,依此类推。要使用 field2=x 检索所有值,您至少必须执行 |field1|读取或扫描整行。您是否考虑过交换 field2 和 field1?这将使这个查询更容易。
  • @tom.wilkie,您应该将此作为答案而不是评论。
  • 我还需要使用 field1 执行查询,这就是我将它放在首位的原因。此外,在我的例子中,field1 只能具有三个唯一值(ACTIVE、INACTIVE 和 PASSIVE)。 Field2 是一个 ID,可以有数百万个唯一值。其余字段也是如此。

标签: cassandra composite-key


【解决方案1】:

field1 可以有多少个不同的值?具有复合键的列首先按第一个维度排序,然后是下一个维度,依此类推。要检索所有带有 field2=x 的值,您至少需要 |field1|读取或扫描整行。您是否考虑过交换 field2 和 field1?这将使这个查询更容易。

如果您需要对 field1=x 的所有值进行查询,并且您希望单独使用 field2=y 进行查询,您还可以考虑插入两次数据,对复合键的维度使用不同的顺序。如果您的日期是一次性写入,则此方法效果最佳。如果这不可接受,那么唯一的选择是执行三个查询:

["ACTIVE";y;"";""] -> ["ACTIVE";y;"";""] ["不活跃";y:"";""] -> ["不活跃";y:"";""] ["被动";y;"";"" -> ["被动";y:"";""]

如果 field1 的可能值超过三个,这将不会很好。

【讨论】:

    猜你喜欢
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 2012-12-01
    • 2015-02-01
    • 2012-11-26
    相关资源
    最近更新 更多