【问题标题】:How do I fetch sorted logs in Cassandra?如何在 Cassandra 中获取已排序的日志?
【发布时间】:2020-01-10 12:06:44
【问题描述】:

在我的应用程序中,我们将日志存储在 Cassandra 中。用户可以在给出日志的开始日期和结束日期后查看日志。我们根据这些日期获取数据,并实现了分页,使得第一页的结束日期成为第二页的开始日期。

表:

CREATE TABLE audit_trail (
    account_id bigint,
    user_id bigint,
    time timestamp,
    category int,
    ip_address text,
    action_description text,
    additional_data map<text,text>,
    source int,
    source_detail varchar,
    PRIMARY KEY ( (account_id), time )
     ) WITH CLUSTERING ORDER BY (time DESC);

问题:

我们得到的日志不是排序的而是分散的。例如,在查询第 1 天到第 10 天的日志时,我们可能会得到第 10、8、9、2、1 天的日志,或者以任何其他顺序。

目标:

  1. 按排序顺序获取日志,以便第 1 天的日志显示在顶部,然后是第 2 天,依此类推。
  2. 没有数据洗牌。因为,在发生冲突时,表会在 Cassandra 中进行重组,这可能会再次提供我们已经在第 1 页和第 2 页看到的数据。

数据吞吐量很大,通常每小时大约 1000 条日志。

【问题讨论】:

  • 什么是数据模型..
  • CREATE TABLE billing.domain_event ( date text, user_id bigint, domain_id bigint, type text, subtype text, event text, event_counter counter, PRIMARY KEY ( ( user_id, date ), domain_id, type, subtype, event ) ) WITH CLUSTERING ORDER BY (domain_id ASC, type ASC, subtype ASC, event ASC);
  • 您的表结构的理想方案将为每个日期触发单独的查询..
  • 你是说我应该根据天数来分区我的数据库吗?
  • 如果您能突出显示我需要对数据模型进行的更改,我们将非常高兴。

标签: sorting logging cassandra database-performance database-partitioning


【解决方案1】:

具有聚类顺序(时间 DESC);

在表格末尾添加这个解决了我的问题。

【讨论】:

    猜你喜欢
    • 2022-12-11
    • 2012-01-15
    • 2017-06-13
    • 1970-01-01
    • 2011-10-05
    • 2019-09-02
    • 2013-01-07
    • 2011-05-17
    • 1970-01-01
    相关资源
    最近更新 更多