Transações ACID distribuídas para aplicativos NoSQL

ACID em SQL, em escala com alta disponibilidade

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.

Analytics ecosystem diagra

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

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