Transacciones ACID distribuidas para aplicaciones NoSQL

ACID en SQL, a escala con alta disponibilidad

Transacciones de bases de datos ACID en Couchbase SQL++

Couchbase soporta transacciones distribuidas de bases de datos ACID multi-documento a escala sin sacrificar el rendimiento y la alta disponibilidad. Migre sus aplicaciones de bases de datos relacionales a Couchbase y consiga la conformidad con ACID al tiempo que aprovecha la amplia compatibilidad con SQL.

Analytics ecosystem diagra

¿Qué es el ÁCIDO?

En una base de datos, ACID es un acrónimo que describe cómo procesar las transacciones de forma coherente, segura y fiable:

A Atomicidad Actualice varios documentos con garantía de todo o nada.
C Coherencia Consistencia mantenida automáticamente para réplicas, índices y XDCR.
I Aislamiento Aislamiento comprometido de lectura para lectores concurrentes.
D Durabilidad Protección de datos en caso de fallo con niveles de durabilidad ajustables.

Ejemplos de código de transacciones

Aquí hay tres ejemplos de código de escenarios de transacciones comunes. El primero es una transacción de débito/crédito para asegurar que ambas cuentas se modifican o ninguna se modifica. El segundo es una actualización masiva de todos los empleados de un departamento utilizando SQL++ para garantizar que todos los empleados se actualizan o ninguno.

 START TRANSACTION;
UPDATE customer SET balance = balance + 100 WHERE cid = 4872;
SELECT cid, name, balance  from customer;
SAVEPOINT s1;
UPDATE customer SET balance = balance – 100 WHERE cid = 1924;
SELECT cid, name, balance from customer;
ROLLBACK WORK TO SAVEPOINT s1;
SELECT cid, name, balance from customer;
COMMIT ;
 // Transfer money from Beth’s account to Andy’s account

transactions.run((txnctx) -> {
var andy = txnctx.get(collection, "Andy");
var andyContent = andy.contentAsObject();
int andyBalance = andyContent.getInt("account_balance");
var beth = txnctx.get(collection, "Beth");
var bethContent = beth.contentAsObject();
int bethBalance = bethContent.getInt("account_balance");

	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();  
txnctx.commit();
 });
 // Bulk update salaries of all employees in a department
transactions.run((ctx) -> {

    var auditLine = JsonObject.create().put("content", "Update on 4/20/2020");
    ctx.insert(auditCollection, "Dept10", auditLine);
    ctx.query("UPDATE employees 
               SET salary = salary * 1.1  
               WHERE dept = 10 AND salary < 50000");
    ctx.query("UPDATE department 
               SET status = 'updated'
               WHERE dept = 10");
   
    txnctx.commit();  
});

¿Preparado para crear experiencias de cliente increíbles?

La forma más fácil y rápida de empezar con Couchbase