Transactions de base de données ACID dans Couchbase SQL++
Couchbase prend en charge les transactions de bases de données ACID multi-documents distribuées à grande échelle sans sacrifier les performances et la haute disponibilité. Migrez vos applications de bases de données relationnelles vers Couchbase et atteignez la conformité ACID tout en profitant d'un support SQL riche.
Qu'est-ce que l'ACID ?
Dans une base de données, ACID est un acronyme qui décrit comment traiter les transactions de manière cohérente, sûre et fiable :
A | Atomicité | Mise à jour de plusieurs documents avec une garantie "tout ou rien". |
C | Cohérence | Cohérence maintenue automatiquement pour les répliques, les index et le XDCR. |
I | L'isolement | Isolation de la lecture engagée pour les lecteurs concurrents. |
D | Durabilité | Protection des données en cas de défaillance avec des niveaux de durabilité réglables. |
Exemples de code de transactions
Voici trois exemples de code correspondant à des scénarios de transaction courants. Le premier est une transaction de débit/crédit pour s'assurer que les deux comptes sont modifiés ou qu'aucun ne l'est. Le deuxième est une mise à jour en bloc de tous les employés d'un département à l'aide de SQL++ pour s'assurer que tous les employés sont mis à jour ou qu'aucun ne l'est.
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();
});
Ressources connexes
Webinaire
Livre blanc
Prêt à créer des expériences client extraordinaires ?
La façon la plus simple et la plus rapide de commencer avec Couchbase