Database design Cassandra:具有时间戳和大数据集的表设计

Database design Cassandra:具有时间戳和大数据集的表设计,database-design,cassandra,timestamp,cql,Database Design,Cassandra,Timestamp,Cql,我在一天内查询大量数据时遇到问题。我正在寻找关于创建高效表模式的建议 表:事件日志 栏目: recordid(UUID)、insertedtimestamp(时间戳)、源(文本)、事件(文本) 如果我只是这样做: CREATE TABLE eventlog ( recordid uuid PRIMARY KEY, insertedtimestamp timestamp, source text, event text ); 假设今天的数据量是1/25,那么下面

我在一天内查询大量数据时遇到问题。我正在寻找关于创建高效表模式的建议

表:事件日志

栏目: recordid(UUID)、insertedtimestamp(时间戳)、源(文本)、事件(文本)

如果我只是这样做:

CREATE TABLE eventlog (
    recordid uuid PRIMARY KEY,
    insertedtimestamp timestamp,
    source text,
    event text
); 
假设今天的数据量是1/25,那么下面的查询将被数据量淹没

select * from eventlog where insertedtimestamp > '2017-01-25';

我们的目标是从一天中选择所有记录,因为我们知道我们需要高效地使用可能有数百万条记录的表进行分区。我如何设计一个高效的表模式(什么分区键设置)?谢谢。

尽管您希望在一天内获得所有记录,但可以使用此模式

CREATE TABLE eventlog (
    day int,
    month int,
    year int,
    recordid uuid,
    insertedtimestamp timestamp,
    source text,
    event text,
    PRIMARY KEY((day,month,year),recordid)
); 
因此,一天中的所有数据都将位于单个节点中。现在,通过下面的查询,您可以更高效地获取日期(如2017-01-25)的数据

SELECT* FROM eventlog WHERE day = 25 and month = 1 and year = 2017 

您好,这样分隔日期比只分隔没有时间戳的日期更有效吗?基本上,如果day=25,month=1,year=2017,而date=2017-01-25(date是一个新的时间戳,只存储日期,不存储时间),您也可以使用一个日期类型的字段,只包含日期而不是三个字段。我使用的是一个日期类型的字段,只包含日期。你的解决方案仍然是正确的