【发布时间】: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 天的日志显示在顶部,然后是第 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