3

主キーを時間枠で分割したい場合は、時間のテキスト表現または切り捨てられたネイティブ タイムスタンプを使用する方が (保存と取得の効率のために) 良いでしょうか。

CREATE TABLE user_data (
user_id TEXT,
log_day TEXT, -- store as 'yyyymmdd' string
log_timestamp TIMESTAMP,
data_item TEXT,
PRIMARY KEY ((user_id, log_day), log_timestamp));

また

CREATE TABLE user_data (
user_id TEXT,
log_day TIMESTAMP, -- store as (timestamp-in-milli - (timestamp-in-mills mod 86400)
log_timestamp TIMESTAMP,
data_item TEXT,
PRIMARY KEY ((user_id, log_day), log_timestamp));
4

2 に答える 2

1

列キー「log_timestamp」について:複数の書き込みクライアントを使用している場合-これをお勧めします。そうしないと、C * のような分散書き込み最適化データベースで可能なスループットに近づかない可能性があるためです-TimeUUID の使用を検討する必要があります。タイムスタンプの代わりに競合がないため (MAC アドレスが一意であると仮定)。そうしないと、2 つの挿入が同時に発生しないことを保証する必要があります。そうしないと、このデータが失われます。TimeUUID に対して列スライス クエリを実行したり、その他の時間ベースの操作を実行したりできます。

于 2013-07-05T07:46:55.770 に答える
0

これらの形式のいずれかでUNIX 時間(つまり1234567890 ) を使用します。1 日全体を指すには、00:00 のタイムスタンプを使用します。

ただし、DataStax dev ブログのAdvanced Time Series with Cassandraを読むことを強くお勧めします。バケット化/分割に関して、モデルで考慮すべきいくつかの重要事項について説明します。

于 2013-05-23T12:32:09.423 に答える