让我们考虑从http://planetcassandra.org/blog/getting-started-with-time-series-data-modeling/
中取得的表格CREATE TABLE temperature
(
weatherstation_id text,
event_time timestamp,
temperature text,
PRIMARY KEY (weatherstation_id,event_time)
);
因此weatherstation_id
是分区键,event_time
是群集列。
数据加载到该表,然后我们运行查询:
SELECT COUNT(1) FROM temperature WHERE weatherstation_id = '1234ABCD'
所以实际上我们要求底层cassandra存储行中的列数。
1)是O(1)操作吗?
2)如果不是 - 如何在计算cassandra存储行中的列时实现O(1)?使用计数器?
(我正在使用Cassandra v2.0.11)
谢谢
答案 0 :(得分:3)
它不是O(1)操作,因为它必须扫描分区并计算列数。如果你想要一个恒定的时间计数,你必须以其他方式跟踪它。您可以使用计数器列,但应首先阅读this。
答案 1 :(得分:0)
对于像这样的问题,我可能会使用汇总方法。您将事件存储在表中,然后定期运行任务以聚合您需要的有关数据的任何统计信息,然后将其插入另一个表中。第二个表的作用类似于缓存,因此,如果您正在运行Web服务器,它可以立即为这些统计信息提供服务。如果您使用分区键直接到达具有所需统计信息的行,那么它将是O(1)访问时间。缺点是汇总表在任何给定时刻都没有准确的计数,但对于分布式计算,接近正确的答案通常是足够好的。