Transações de banco de dados ACID no Couchbase SQL++
O Couchbase oferece suporte a transações distribuídas de banco de dados ACID com vários documentos em escala, sem sacrificar o desempenho e a alta disponibilidade. Migre seus aplicativos de banco de dados relacional para o Couchbase e obtenha conformidade com ACID, aproveitando o suporte avançado a SQL.
O que é ACID?
Em um banco de dados, ACID é um acrônimo que descreve como processar transações de forma consistente, segura e confiável:
A | Atomicidade | Atualize vários documentos com garantia de tudo ou nada. |
C | Consistência | Consistência mantida automaticamente para réplicas, índices e XDCR. |
I | Isolamento | Leia o isolamento comprometido para leitores simultâneos. |
D | Durabilidade | Proteção de dados em caso de falhas com níveis de durabilidade ajustáveis. |
Amostras de código de transações
Aqui estão três exemplos de código de cenários de transações comuns. O primeiro é uma transação de débito/crédito para garantir que ambas as contas sejam modificadas ou que nenhuma seja modificada. O segundo é uma atualização em massa de todos os funcionários em um departamento usando SQL++ para garantir que todos os funcionários sejam atualizados ou que nenhum seja.
INICIAR A TRANSAÇÃO;
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 DO TRABALHO PARA O SAVEPOINT s1;
SELECT cid, name, balance from customer;
COMMIT ;
// Transferir dinheiro da conta da Beth para a conta do Andy
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");
se (bethBalance > transferAmount) {
andyContent.put("account_balance", andyBalance + transferAmount);
txnctx.replace(andy, andyContent);
bethContent.put("account_balance", bethBalance - transferAmount);
txnctx.replace(beth, bethContent);
}
Caso contrário, lance um novo InsufficientFunds();
txnctx.commit();
});
// Atualização em massa dos salários de todos os funcionários em um departamento
transactions.run((ctx) -> {
var auditLine = JsonObject.create().put("content", "Update on 4/20/2020");
ctx.insert(auditCollection, "Dept10", auditLine);
ctx.query("UPDATE employees
SET salário = salário * 1,1
WHERE dept = 10 AND salary < 50000");
ctx.query("UPDATE departamento
SET status = 'updated'
WHERE dept = 10");
txnctx.commit();
});
Recursos relacionados
Whitepaper
Pronto para criar experiências incríveis para os clientes?
A maneira mais fácil e rápida de começar a usar o Couchbase