我有一個程序,做了一些相當密集的計算,我想將這些計算結果緩存在卡桑德拉表中。什麼是最好的模式來做到這一點?卡桑德拉模式緩存應用程序數據
目前,我使用下面的架構:
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
的傳統知識,除了list<floats>
(但是這是因爲我每次都有幾個不同的輸入,我希望一次都得到它們)。這裏的基本時間序列:
CREATE TABLE raw_data(
id uuid,
time timestamp,
data list<float>,
PRIMARY KEY (id, time)
);
我與raw_data_cache
目標是節省raw_data較小,處理後的版本了幾個小時。
我在關於上下文的問題中添加了更多信息。 raw_data_cache(或等效)需要存儲raw_data的處理版本,該版本根據您共享的鏈接建模。謝謝! – srlm
嗯。感謝(())主鍵結構。這似乎削減了20%左右的閱讀時間。就特殊情況而言,這種分裂是任意的(不分小時或分或秒),所以我不能預先分解它。並且整個緩存(對於特定的主鍵)總是一次被讀取。 – srlm