CASSANDRA/SCYLLA 支援輕量級交易機制,lightweight transactions 。
這種輕量級交易機制,又稱Compare and Set (CAS)。
用於確保需要順序一致性
的需求情境,白話翻譯一下,就是如果符合某個條件,就變更,不符前置條件就不執行。
如以下語法:
INSERT INTO cycling.cyclist_name (id, lastname, firstname)
VALUES (4647f6d3-7bd2-4085-8d6c-1229351b5498, 'KNETEMANN', 'Roxxane')
IF NOT EXISTS;
UPDATE cycling.cyclist_name
SET firstname = ‘Roxane’
WHERE id = 4647f6d3-7bd2-4085-8d6c-1229351b5498
IF firstname = ‘Roxxane’;
使用條件僅限制於INSERT
和UPDATE
這兩種操作。
IF
關鍵字的使用,就決定了是否是使用LWT。
Cassandra 使用的是 Paxos protocol
會有以下4個步驟
多了4個roundtrip,導致使用LWT所造成的延遲會多4倍,因此官方建議LWT也是需要評估之後再做使用。
SCYLLA 對於LWT的實作細節與CASSANDRA有所不同,使用了更少的roundtrip,並且優化相關處理。
如以下比較:
cassandra 需要4次
scylla 僅需要3次
還有一些比較進階的改進,譬如說CAS coordinator機制上的優化等等。
SCYLLA 官方鼓勵大家,若過去因為考量到CASSANDRA使用LWT上的效能顧慮,不妨試試SCYLLA的LWT,在需要ACID的使用情境下,LWT可以有所幫助。