【发布时间】:2013-10-28 01:35:41
【问题描述】:
我有一个程序执行一些相当密集的计算,我想将这些计算的结果缓存在 Cassandra 表中。这样做的最佳架构是什么?
目前,我正在使用以下架构:
CREATE TABLE raw_data_cache (
id uuid,
buckets int,
start_time timestamp,
end_time timestamp,
time timestamp,
data list<float>,
PRIMARY KEY(id,buckets,start_time,end_time,time)
) with GC_Grace_Seconds=1;
id是数据源的id,buckets、start_time、end_time是处理参数。 Time 是每列唯一的“键”。 data 是时序数据值。
要将数据插入表中,我使用标准插入和超时:
INSERT INTO raw_data_cache (id,buckets,start_time,end_time,time,data) VALUES
(?,?,?,?,?,?) USING TTL 360;
这个架构的问题是我最终会得到一致的读取超时,我认为这是由于墓碑的数量:Read 0 live and 3777400 tombstoned cells(取自 cqlsh 中的“跟踪”)。
我可以使用nodetool 摆脱所有这些,但我不想每隔几分钟就这样做。有没有更好的架构或用法可以改善这种情况?
编辑:
raw_data_cache 是用于存储raw_data 的处理版本的表。除了list<floats> 之外,我在存储raw_data 时遵循了似乎是传统智慧(但那是因为我每次有几个不同的输入,我想一次获得所有输入)。以下是基本时间序列:
CREATE TABLE raw_data(
id uuid,
time timestamp,
data list<float>,
PRIMARY KEY (id, time)
);
我使用raw_data_cache 的目标是在几个小时内保存一个较小的、经过处理的 raw_data 版本。
【问题讨论】: