卡桑德拉计数器的替代方法

时间:2015-07-29 07:04:22

标签: java cassandra cql cql3 cqlsh

在Cassandra中有没有其他方法可以实现计数器?

我有以下表结构

CREATE TABLE userlog (
term text,
ts timestamp,
year int,
month int,
day int,
hour int,
weekofyear int,
dayofyear int,
count counter,
PRIMARY KEY (term, ts, year,month,day,hour,weekofyear,dayofyear)
);

但是由于计数器,我需要将所有其他列放在主键中,这会给我的应用程序带来问题。

那么,还有其他方法可以避免这样做(最好使用Java)吗?

2 个答案:

答案 0 :(得分:0)

您可以使用Spark等分析引擎完全避免Cassandra中的计数器。我们的想法是仅在Cassandra中存储事件,并定期触发Spark或连续运行Spark作为后台作业,该作业将读取事件并创建聚合(如计数)。这些聚合结果可以再次写入Cassandra到一个单独的表中(例如userlog_by_month,userlog_by_week,..)。

答案 1 :(得分:0)

通常,您将计数器列放在数据表的单独表中。通过这种方式,您可以使用任何方便的密钥来访问计数器。

缺点是您需要更新两个表而不是一个表,但由于计数器的实现方式,这是不可避免的。