かなり集中的な計算を行うプログラムがあり、それらの計算の結果を 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>
(ただし、これは、一度にいくつかの異なる入力があり、それらすべてを一度に取得したいためです)。基本時系列は次のとおりです。
CREATE TABLE raw_data(
id uuid,
time timestamp,
data list<float>,
PRIMARY KEY (id, time)
);
私の目標raw_data_cache
は、raw_data の小さな処理済みバージョンを数時間保存することです。