计算Cassandra中行数的方法是什么?

时间:2014-07-22 08:06:36

标签: java cassandra hector

计算列数的最佳做法是什么?我试图找到任何方法来做到这一点,但没有找到任何有关这方面的信息。我认为我可以对此进行一些查询,但它可能太慢了。然后我知道使用计数器列的方式,但我不知道如何使用ttl列。总结,我需要一些方法或方法在Hector中检查行在一分钟内不超过5列。 感谢您的建议,对不起我的坏语言和菜鸟问题。

1 个答案:

答案 0 :(得分:1)

不要认为计数器对此有用。

您是否正在尝试计算列数或"行数"在单个"多分区行内#34;?说你的表格如下:

创建表foo(    id文本,    colid文本,    somethingcol文本,    其他文本,    主键(id,colid));

您是否计算了id ='特定内容的条目数量?

假设您是,您可以添加时间戳列作为第一个群集键,如下所示:

创建表foo(    id文本,    ts时间戳,    colid文本,    somethingcol文本,    其他文本,    主键(id,ts,colid));

运行如下查询:从foo中选择count(*),其中id =' theId'和[ts condition here];

如果您希望聚合以查看是否存在任何一分钟内有超过五个条目的情况,那么可能需要使用不同的结构(例如,您将分钟作为聚类键和条目在SET栏中的内部)。您是否可以将其用于原始目的,这是您需要检查的内容。

如果您在分区中没有太多条目,则可以简单地查询分区的时间戳,并进行分组+检查客户端。如果你想要更复杂的聚合,Spark是另一种可能性(也许是Shark)。当然,这意味着可以访问更多的基础知识。

这有帮助吗?

更新: Cassandra自动为每个单元格保留时间戳。您可以在查询中访问它:

来自foo的SELECT id,bar,baz,writetime(bar)......;

每个条目的bar列的最后更新时间戳。时间戳由协调器分配,除非客户端在写入期间指定它[在插入期间,如果要指定它,则可以使用timestamp = n进行操作]。值得注意的是,这是使用CQL的行为,而不是节俭。