避免 IN 的 cassandra 模式设计

cassandra schema design to avoid IN

我是 Cassandra 的新手。我有以下字段:

A text,
B bigint, ( value is among [0,1,2,3] )
C time

I‖need‖tuddococunttinging.我的设计是:A分区键,B和C聚类键。 但我的查询看起来像:

Select count(*) from mykeyspace.mytable where A='a' and B in (1,2,3) and C > 0 and C< 100;
Select count(*) from mykeyspace.mytable where A='a' and B in (0, 1,2,3) and C > 0 and C< 100;

有两个问题:第二个查询是'weird',因为我需要限制B和C。建议避免在查询中使用in。如何重新设计架构并进行查询? http://www.datastax.com/dev/blog/a-deep-look-to-the-cql-where-clause

谢谢

更新

上述查询中的 0 和 100 是硬编码。

因为 A 是您的分区键,所以您对 B 的查询的 IN 部分都发生在一个分区内,所以我认为这样做很好。

Cassandra 将能够在单个分区内执行此 COUNT 个操作。

虽然您可能担心单个分区中有足够多的记录需要对多个 WHERE 原因进行计数。这可能意味着您的分区太大了。

您需要多久获取一次该数据?如果您执行的读取次数多于写入次数,则值得在写入期间进行计数而不是在读取期间进行计数,而仅存储和检索该数字,这样您就可以以轻量级的方式获取数字而不是告诉 C* 读取一堆每次都记录。你的集群压力会小很多。

为此,您应该创建一个 table 来立即准确地告诉您您想要什么。然而,设计取决于您如何执行查询(例如 C > 0 AND C < 1000100 硬编码还是可以经常更改?),因此我们需要更多信息才能为您提供其他一些建议。