ACID-Datenbanktransaktionen in Couchbase SQL++
Couchbase unterstützt verteilte Multi-Document-ACID-Datenbanktransaktionen in großem Umfang ohne Einbußen bei der Performance und Hochverfügbarkeit. Migrieren Sie Ihre relationalen Datenbankanwendungen zu Couchbase und erreichen Sie ACID-Konformität, während Sie von der umfangreichen SQL-Unterstützung profitieren.

Was ist ACID?
In einer Datenbank ist ACID ein Akronym, das beschreibt, wie Transaktionen konsistent, sicher und zuverlässig verarbeitet werden können:
A | Atomarität | Aktualisierung mehrerer Dokumente mit Alles-oder-Nichts-Garantie. |
C | Konsistenz | Automatisch aufrechterhaltene Konsistenz für Replikate, Indizes und XDCR. |
I | Isolierung | Read Committed Isolation für gleichzeitige Leser. |
D | Dauerhaftigkeit | Schutz der Daten bei Ausfällen mit einstellbaren Haltbarkeitsstufen. |
Beispiele für Transaktionscode
Im Folgenden finden Sie drei Codebeispiele für gängige Transaktionsszenarien. Das erste ist eine Soll-/Haben-Transaktion, bei der sichergestellt werden soll, dass beide Konten geändert werden oder keines. Das zweite ist eine Massenaktualisierung aller Mitarbeiter einer Abteilung mit SQL++, um sicherzustellen, dass alle Mitarbeiter aktualisiert werden oder keiner.
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();
});
Verwandte Ressourcen
Whitepaper
Sind Sie bereit, beeindruckende Kundenerlebnisse zu schaffen?
Der einfachste und schnellste Weg, mit Couchbase zu beginnen