2013-06-27 1 views
20

Cassandraの場合、選択された行が存在しない場合UPDATEは暗黙のINSERTになりますか?それは私がUPDATEが暗示的なINSERTになる

UPDATE users SET name = "Raedwald" WHERE id = 545127 

idusersテーブルのPRIMARY KEYで言うと、テーブルには545127のキーで何行を持っていない、それは私がいることを知っている

INSERT INTO users (id, name) VALUES (545127, "Raedwald") 

と同等になる場合、あります既に存在するidINSERTは、idの行のUPDATEになります。古いカサンドラ文書では、挿入物が実際に「アップセツト」されているという話がありました。

私はCQL3、Cassandraバージョン1.2+のケースに興味があります。

答えて

23

それは以下の程度UPDATE言いthe CQL documentationで説明したようにはい、カサンドラUPDATEため、INSERTと同義である::SQLとは異なり、UPDATEは、行の前に存在することを確認していないこと

注意前に存在しない場合は行が作成され、それ以外の場合は更新されます。さらに、作成または更新のどれが起こったのかを知る手段はありません。実際、INSERTUPDATEという意味は同じです。

セマンティクスが異なるためには、Cassandraは行がすでに存在するかどうかを知るために読み取りを行う必要があります。カサンドラは書き込みが最適化されているため、書き込み操作を行う前に読み取りを行わないと常に仮定できます。唯一の例外はカウンタです(replicate_on_write = false以外)。この場合、インクリメント時のレプリケーションには読み取りが含まれます。 1は何ができるか

+0

こんにちは、質問があります。キーの更新は挿入と同じですが、別の列のデータを更新したい場合(ユーザー名など...)。挿入と同じですか?どのようなバルクデータをマージするための最良のソリューションですか? –

11

は、しかし、このです:

UPDATE table_name SET field = false WHERE key = 55 IF EXISTS; 

これはあなたのアップデートが真の更新ではなくアップサートであることを確認します。

関連する問題