【问题标题】:Counting wide rows in Cassandra在 Cassandra 中计算宽行
【发布时间】:2017-09-23 05:21:14
【问题描述】:

我们正在运行 Apache Cassandra 2.1.X 并使用 Datastax 驱动程序。我有一个用例,我们需要计算各种事物。我想出了这样的模式:

create table count{
partitionKey bigInt,
type text,
uniqueId uuid,
primary_key(partitionKey, type, uniqueId)

所以这只是宽行。我的问题是,如果我执行类似
select count(uniqueId) from count where paritionKey=987 and type='someType' 之类的操作,这会返回 150k 计数。

  • 这对 Cassandra 来说会是一项昂贵的操作吗?有没有更好的方法来计算这样的计数。我也想知道以前有没有人解决过这样的问题?

  • 我宁愿远离保持计数器,因为它不是那么准确,并且在应用程序级别保持计数无论如何都注定要失败。

  • 另外,很高兴知道 Cassandra 如何在内部计算此类数据。

非常感谢帮助社区的人们!

【问题讨论】:

    标签: cassandra datastax datastax-java-driver


    【解决方案1】:

    即使你指定了分区键 cassandra 仍然需要读取 150k 单元格才能给你计数

    如果你没有指定分区键,cassandra 需要扫描所有节点的所有行来给你计数。

    最好的方法是使用计数器表。

    CREATE TABLE id_count (
        partitionkey bigint,
        type text,
        count counter,
        PRIMARY KEY ((partitionkey, type))
    );
    

    每当一个 uniqueId 插入增加计数时。

    【讨论】:

    • 谢谢@Ashrauful。我在 Cassandra 的研究计数器不准确,计数可能会不同步。在我的用例中,我需要一个准确的计数。你认为这种方法会奏效吗?你有什么其他的建议吗?
    • @Coder 你可以写一个后台任务,它会同步你的计数。
    猜你喜欢
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 2020-01-20
    • 2012-11-27
    • 2015-05-10
    • 2014-08-25
    • 1970-01-01
    相关资源
    最近更新 更多