Verteilte ACID-Transaktionen für NoSQL-Anwendungen

ACID in SQL, skalierbar mit hoher Verfügbarkeit

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.

Analytics ecosystem diagra

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();  
});

Sind Sie bereit, beeindruckende Kundenerlebnisse zu schaffen?

Der einfachste und schnellste Weg, mit Couchbase zu beginnen