Cassandra確實支持upsert,即如果update語句中提供的鍵不存在於表中;它暗示爲插入。有沒有辦法從更新查詢的返回碼中知道更新是否導致更新或插入。我們希望在沒有從Cassandra額外閱讀的情況下檢測到這一點。更新是否導致UPDATE或INSERT
我們有一個場景,我們有一個非常高的吞吐量應用程序,其中99%的事件導致插入,但一個非常小的塊導致更新。一旦更新,我們會想要執行一些額外的檢查並觸發一些。
Cassandra確實支持upsert,即如果update語句中提供的鍵不存在於表中;它暗示爲插入。有沒有辦法從更新查詢的返回碼中知道更新是否導致更新或插入。我們希望在沒有從Cassandra額外閱讀的情況下檢測到這一點。更新是否導致UPDATE或INSERT
我們有一個場景,我們有一個非常高的吞吐量應用程序,其中99%的事件導致插入,但一個非常小的塊導致更新。一旦更新,我們會想要執行一些額外的檢查並觸發一些。
簡答:所有Cassandra寫入的都是upserts,它們不會在寫入之前檢查數據庫的狀態。
更長的回答:知道是否設置了值需要從卡桑德拉讀取,這意味着如果你想知道當你upsert時是否存在某件事意味着你最終必須在寫作之前做反讀模式。
基本上所有需要這種有狀態信息的數據模型都需要性能懲罰。你最好的選擇是找出構造代碼的另一種方法。如果你真的需要知道差異,你可以嘗試Paxos支持,如果不存在風格的請求,但知道他們也有成本。
您可以在更新語句結束時添加IF EXITS。
所以更新語句將是:
UPDATE person SET name = 'xxxxx' WHERE id = '16843158' IF exists;
的表人,名,ID是列名。
如果行退出,則返回True,否則返回False。使用這個,你可以創建一個支票,然後「執行一些額外的檢查並觸發一些」。如果行不退出,這也不會插入任何東西。
請檢查true/false是否作爲行的列或作爲布爾值返回,因爲我僅在cqlsh中檢查了它。
談論Java。在cqlsh中,它顯示爲列輸出。
我們想不管更新或插入。我只是試圖找出更新語句執行後知道的方式,如果它導致更新或插入。 – Sunil
你無法知道 – RussS