【问题标题】:Alternative Approach for Counter In CassandraCassandra中计数器的替代方法
【发布时间】:2015-10-20 00:29:02
【问题描述】:

还有其他方法可以在 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)?

【问题讨论】:

    标签: java cassandra cql cql3 cqlsh


    【解决方案1】:

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

    【讨论】:

    • 我使用apache storm 有点类似于spark 将数据写入Cassandra。这不会使事情复杂化吗?
    • 有没有一种方法可以读取计数变量并通过向其添加 1 来更新它。计数器以有效的方式执行的操作。因为,我将在一个分钟。
    • Storm 也应该代替 Spark 工作。是的,与使用 Cassandra 或其他数据存储支持的计数器数据类型相比,所描述的方法需要更多的努力。但它为您提供了更多的灵活性,这可能是值得的。
    【解决方案2】:

    通常您会将计数器列放在与数据表不同的表中。这样你就可以使用任何你觉得方便的键来访问计数器。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-02
      • 2015-11-27
      • 2017-01-16
      • 2022-12-24
      • 2013-04-09
      • 2016-10-22
      • 2023-03-28
      • 2016-02-09
      相关资源
      最近更新 更多