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.

¿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();
});
Recursos relacionados
Libro Blanco
¿Preparado para crear experiencias de cliente increíbles?
La forma más fácil y rápida de empezar con Couchbase