INSERT
およびUPDATE
は、ごくわずかな例外を除いて、Cassandra では同義語です。ここでは、違いに簡単に触れている場所の説明を示します。INSERT
INSERT は、Cassandra テーブルのレコードに 1 つ以上の列をアトミックかつ分離して書き込みます。結果は返されません。キーを構成する列を除いて、すべての列を定義する必要はありません。欠落している列は、ディスク上のスペースを占有しません。
列が存在する場合は、更新されます。テーブル名はキースペースで修飾できます。INSERT はカウンターをサポートしていませんが、UPDATE はサポートしています。内部的には、挿入操作と更新操作は同じです。
それが挿入なのか更新なのかはわかりませんが、あたかもそれがデータ保存要求であるかのように見ることができ、コーディネーターがそれが何であるかを判断します。
これは元の質問に答えます-save関数の戻りに基づいて、それが挿入か更新かを知ることはできません。
以下のコメントに対する回答で、その出力が必要な理由が説明されています。Cassandra からこの情報を確実に取得することはできませんが、軽量トランザクションをある程度使用して、同じデータ行で 2 つのステートメントを連続して実行することはできます。 :
INSERT ... IF NOT EXISTS
に続くUPDATE ... IF EXISTS
ターゲット テーブルには、これらの各ステートメントが呼び出しごとに一意の値を書き込む列が必要です。次に、データセットの主キーに基づいてデータを選択し、各値を持つ行数を確認できます。これにより、更新の数と挿入の数が大まかにわかります。ただし、同時プロセスがあったとしても、データがトークンで上書きされた可能性があるため、この方法はあまり正確ではなく、(Cassandra などのデータベースでの他の方法と同様に) 同時プロセスがない場合にのみ機能します。