2017-07-15 6 views
0

私は次のようになりますカサンドラテーブルを持っていますエラー:カサンドラ更新いくつかのクラスタ化キーが欠落している(タイムスタンプ)

Some clustering keys are missing: received_timestamp 

私はそれが主キーの一部ですので、私はしかし、私は唯一でよ、received_timestampを含める必要があることを理解注文のためにプライマリキーでそれをcluding。 received_timestampの値がわからない場合、ここで更新を行う方法はありませんか?そうでない場合は、このユースケースで動作するこのテーブルを作成するより良い方法がありますか?前もって感謝します。

+0

はuser_idをIsとMESSAGE_IDは、すべてのメッセージのためのユニークなのですか? –

+0

@AshrafulIslam message_idは一意ですが、1つのuser_idに対して複数のメッセージが存在する可能性があります – user172092

+0

メッセージIDが一意である場合、 'received_timestamp'がタイムスタンプに従ってメッセージをどのようにソートするのですか? user_idとmessage_idには 'received_timestamp'が1つしかありません –

答えて

0

Cassandraは、分散環境で多数のネットワーク通信が必要なため、パーティションキー間でデータの順序付けをサポートしていません。しかし、パーティションキーの中で順序を使う​​ことができます。

CREATE TABLE messages ( 
    user_id int, 
    message_id timeuuid, 
    status text, 
    message text, 
    PRIMARY KEY (user_id, message_id)) 
    WITH CLUSTERING ORDER BY (message_id DESC); 

timeuuidタイプはあなたがユニークなメッセージを持つことができます:あなたがメッセージのタイムスタンプが注文した指定したユーザーのすべてのメッセージ(またはいくつかの日付の間のメッセージのスライス)を取得したい場合は、代わりにint型のMESSAGE_IDためtimeuuidタイプを使用することができますタイムスタンプごとにIDとソートメッセージ。

CQLはtimeuuid

で動作するようにいくつかのuseful functionsを持っている。しかし、あなたが原因CQL limitsのユーザーあたりのメッセージ数を気にする必要があります

Cells in a partition: ~2 billion (2^31); single column value size: 2 GB (1 MB is recommended)

関連する問題