iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 26
0

除了LWT以外,CASSANDRA/SCYALLA,也提供了另一個武器,batch(批次處理)

內容可以涵蓋selectupdatedelete

跟RDBMS的transaction有點相像,但不一樣。

batch可以保證執行內容的原子性,結果不是全部成功,就是全部失敗,中途失敗並不用像RDBMS那樣自己再另外寫rollback做處理。

用法如以下範例,BEGIN BATCH開始,以APPLY BATCH結尾,中間範圍是要執行批次處理的語法。

BEGIN BATCH
   INSERT INTO users (userid, password, name) VALUES ('user2', 'ch@ngem3b', 'second user');
   UPDATE users SET password = 'ps22dhds' WHERE userid = 'user3';
   INSERT INTO users (userid, password) VALUES ('user4', 'ch@ngem3c');
   DELETE name FROM users WHERE userid = 'user1';
APPLY BATCH;

batch 的使用效能與執行的語法內容有很大關係。

如果內容是對單一個partition key操作,那麼效能可以在很好的預期範圍之內。

如果內容是需要處理多個partition,效能和花費時間會額外花費比較多時間。

不過正因為LWT的用法,其實只能在同一個partition key上面做操作(就一句語法後面加IF),有需要跨partition做原子性的修改,就可以使用batch,這個也是提供batch方法的原因之一。

其實batch裡面也可以放LWT的語法,不過限制於內容都要在同樣一個partition key做操作。

另外補充一點,相同一個的partition key操作,會保證在一次性執行完畢。

對於不同partition操作,並沒有保證,所以可能某些內容因此在批次操作全部執行完之前,資料就被讀取。



上一篇
Day25. LWT
下一篇
Day27. prepare statement 與 Session
系列文
scylla 從零開始攻略30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言