我有一个程序可以进行一些相当密集的计算,我想将这些计算的结果缓存在 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
。raw_data
除了 a list<floats>
(但那是因为我每次有几个不同的输入,我想一次得到所有输入),我在 storage 中遵循了似乎是传统的智慧。这是基本时间序列:
CREATE TABLE raw_data(
id uuid,
time timestamp,
data list<float>,
PRIMARY KEY (id, time)
);
我的目标raw_data_cache
是保存一个较小的、经过处理的 raw_data 版本几个小时。