acid transactions ecommerce

ACID transactions in Couchbase

Couchbase supports distributed multi-document ACID transactions at scale with performance and high availability. Migrate your relational database applications to Couchbase and achieve ACID guarantees while taking advantage of rich SQL support.

Distributed ACID transactions – Highly available, easy to use, and scalable


A Atomicity Update multiple documents with all-or-nothing guarantee.
C Consistency Automatically maintained consistency for replicas, indexes, and XDCR.
I Isolation Read committed isolation for concurrent readers.
D Durability Data protection under failures with tunable durability levels.

Transactions code sample

 

In this common debit/credit scenario, Beth is transferring money from her account to Andy's account. Doing it in a transaction ensures that either both Beth's and Andy's accounts are modified, or neither account is modified.

                                                      // Transfer money from Beth’s account to Andy’s account

transactions.run((txnctx) -> {
        // get the account documents for Andy and Beth 	
        TransactionJsonDocument andy = txnctx.getOrError(collection, "Andy");
        JsonObject andyContent = andy.contentAsObject();
        int andyBalance = andyContent.getInt("account_balance");
        TransactionJsonDocument beth = txnctx.getOrError(collection, "Beth"); 
        JsonObject bethContent = beth.contentAsObject();
        int bethBalance = bethContent.getInt("account_balance");

        // if Beth has sufficient funds, make the transfer
        if (bethBalance > transferAmount) {
                andyContent.put("account_balance", andyBalance + transferAmount);
                txnctx.replace(andy, andyContent);
                bethContent.put("account_balance", bethBalance - transferAmount);
                txnctx.replace(beth, bethContent);
        }
        else throw new InsufficientFunds();  
        // Commit transaction - if omitted will be automatically committed 
        txnctx.commit();
});