我是Cassandra的新手。我有以下字段:
A text,
B bigint, ( value is among [0,1,2,3] )
C time
我需要做计数。我的设计是:分区键,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;
有两个问题:第二个查询是'怪异',因为我需要限制B和C.并且建议在查询中避免使用。如何重新设计架构并进行查询? http://www.datastax.com/dev/blog/a-deep-look-to-the-cql-where-clause
由于
更新
上述查询中的0和100是硬编码。
答案 0 :(得分:1)
由于A是您的分区键,因此B上查询的IN部分都发生在一个分区内,所以我觉得这样做很好。
Cassandra将能够在一个分区内完成此COUNT。
虽然您可能担心单个分区中有足够的记录要求使用多个WHERE原因进行计数。这可能意味着您的分区太大了。
答案 1 :(得分:0)
您需要多久才能获得这些数据?如果你执行读取的次数比写入更频繁,那么在写入期间计算而不是在读取和计数期间进行计数而只是计数而不是计数,因此您可以以轻量级方式获取数字,而不是告诉C *读取一堆每次记录。你的压力要小很多。
要做到这一点,你应该创建一个表格,立即告诉你你想要什么。然而,设计取决于您执行查询的方式(例如,C > 0 AND C < 100
0
和100
是硬编码还是经常更改?),因此我们需要更多信息给您其他一些建议。