用于时间戳范围查询的Cassandra时间序列表设计

时间:2017-03-17 15:00:58

标签: cassandra data-modeling cql

我们的问题与通常的时间序列问题略有不同,因为我们的数据中没有自然分区键。在我们的系统中,我们得到的消息不超过5k / s,所以在许多出版物(如this one)之后我们想出了一个以下的模式(它更复杂,但下面最重要):

CREATE TABLE IF NOT EXISTS test.messages (
    date TEXT,
    hour INT,
    createdAt TIMESTAMP,
    uuid UUID,
    data TEXT,
    PRIMARY KEY ((date, hour), createdAt, uuid)
)

我们主要想根据创建(事件)时间查询系统;其他过滤可能会在Spark等不同的引擎上完成。问题是我们可能有一个跨越例如两个月,理想情况下我们应该在查询的WHERE-IN部分中放置60多个日期和24小时,这至少可以说是麻烦的。当然,我们可以执行如下查询:

SELECT * FROM messages WHERE createdat >= '2017-03-01 00:00:00' LIMIT 10 ALLOW FILTERING;

我的理解是,虽然上述工作,它将进行全面扫描,这在较大的群集上将是昂贵的。或者我错了,C *知道,扫描哪些分区?

我正在考虑添加一个索引,但根据我的理解,这个问题很可能属于high-cardinality antipattern

编辑:关于数据模型的问题并不多,虽然建议值得欢迎,但更多关于使用cratedat范围进行查询或列出所有date和{{1}的可行性的可行性在查询的WHERE-IN部分中需要的值以避免完全扫描。

0 个答案:

没有答案