Cassandra:Table 具有时间戳和大型数据集的设计
Cassandra: Table design with timestamp and large dataset
我在一天内查询大量数据时遇到问题。我正在寻找有关创建高效 table 模式的建议。
Table:事件日志
列:
recordid(UUID)、insertedtimestamp(时间戳)、source(Text)、event(Text)
如果我简单地做:
CREATE TABLE eventlog (
recordid uuid PRIMARY KEY,
insertedtimestamp timestamp,
source text,
event text
);
假设今天是 1/25,那么下面的查询将被数据量淹没。
select * from eventlog where insertedtimestamp > '2017-01-25';
目标是 select 一天的所有记录,知道我们需要高效地使用 table 对可能有数百万条记录进行分区。我将如何设计一个高效的 table 架构(什么分区键设置)?谢谢。
虽然你想在一天内获取所有记录,但你可以使用这个模式
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
我在一天内查询大量数据时遇到问题。我正在寻找有关创建高效 table 模式的建议。
Table:事件日志
列: recordid(UUID)、insertedtimestamp(时间戳)、source(Text)、event(Text)
如果我简单地做:
CREATE TABLE eventlog (
recordid uuid PRIMARY KEY,
insertedtimestamp timestamp,
source text,
event text
);
假设今天是 1/25,那么下面的查询将被数据量淹没。
select * from eventlog where insertedtimestamp > '2017-01-25';
目标是 select 一天的所有记录,知道我们需要高效地使用 table 对可能有数百万条记录进行分区。我将如何设计一个高效的 table 架构(什么分区键设置)?谢谢。
虽然你想在一天内获取所有记录,但你可以使用这个模式
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