2017-03-02 9 views
0

カサンドラは、アップステージをサポートしています。つまり、更新ステートメントに指定されたキーがテーブルに存在しない場合です。インサートとして暗示されています。更新が更新または挿入された場合、更新クエリの戻りコードから知る方法はありますか? Cassandraからの追加の読書なしでこれを検出することをお勧めします。更新が更新または挿入で行われたか

非常に高いスループットのアプリケーションがあり、99%のイベントが挿入されますが、非常に小さなチャンクが更新されるシナリオがあります。更新したら、いくつかの追加チェックを行い、いくつかの引き金を引くことが望ましいでしょう。

答えて

0

短い答え:すべてのカサンドラの書き込みはupsertsであり、書き込む前にデータベースの状態をチェックすることはできません。

長い答え:値が設定されているかどうかを知るには、カサンドラからの読み取りが必要です。これは、アップセット時に何かが存在するかどうかを知りたい場合、書き込み前に読み込みのパターンを行わなくてはなりません。

このようなステートフルな情報を必要とするすべてのデータモデルは、基本的にパフォーマンスのペナルティを受ける必要があります。最善の策は、コードを構造化するための別の方法を理解することです。あなたが本当に違いを知る必要があるなら、Paxosはスタイルリクエストが存在しない場合にはサポートしてもらえますが、コストもかかると知っています。

+0

関係なく更新または挿入します。私はちょうどそれがアップデートまたは挿入に終わった場合、更新ステートメントの実行後に知る方法を見つけようとしています。 – Sunil

+0

あなたが知ることができない – RussS

2

更新の文の末尾にIF EXITSを追加できます。

だから更新文は次のようになります。

UPDATE person SET name = 'xxxxx' WHERE id = '16843158' IF exists;

テーブル人のための

ID列名です。

これは、行が存在する場合はTrueを、存在しない場合はFalseを返します。これを使用すると、小切手を作成し、「追加チェックを実行して一部をトリガーする」ことができます。また、行が終了しない場合、これは何も挿入しません。

trueまたはfalseがRowの列として返されるかどうかを確認してください。これはcqlshでのみチェックされているためです。

Talking for Java。 cqlshでは、列出力として表示されます。

+0

カサンドラがこれとちょっと逆になったら私たちが助けになると思います。私の場合、着信レコードの99%が挿入されていると言っています。そして1%の更新。私たちは両方の人がそれをするようにしたい。更新または挿入。しかし、私はちょうどupsert実行後に実際に何が起こったのか知りたい。更新または挿入。 – Sunil

+0

私はあなたがほしいと思うものを理解しています私はあなたがカッサンドラ自身のレベルに存在することを望んでいる、それを疑う。あなたは、おそらくあなたのアプリレベルでこの機能を持っている必要があります。上記のクエリを使用すると、更新が成功したか、挿入する必要があるかを知ることができます(単語を参照)。実際に起こったこと、更新または挿入することを決定するための通常のアップサートの実行後には、どのような方法もないようです。 – r005t3r

関連する問題