{"id":7322,"date":"2019-08-09T10:00:15","date_gmt":"2019-08-09T17:00:15","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=7322"},"modified":"2024-01-26T19:16:49","modified_gmt":"2024-01-27T03:16:49","slug":"distributed-multi-document-acid-transactions-in-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/distributed-multi-document-acid-transactions-in-couchbase\/","title":{"rendered":"Entendendo as transa\u00e7\u00f5es ACID distribu\u00eddas de v\u00e1rios documentos"},"content":{"rendered":"<p><span style=\"font-weight: 400\">O CTO do Couchbase, Ravi Mayuram, anunciou as transa\u00e7\u00f5es ACID distribu\u00eddas de v\u00e1rios documentos no Couchbase Server 6.5. Eu recomendo fortemente <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-brings-distributed-multi-document-acid-transactions-to-nosql\/\">lendo o blog do Ravi<\/a> que destaca como as transa\u00e7\u00f5es do Couchbase s\u00e3o uma uni\u00e3o inovadora de garantias ACID com escala, alta disponibilidade, desempenho e flexibilidade.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Neste blog, vou me aprofundar em nosso projeto de <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/transactions\/\">Transa\u00e7\u00f5es ACID<\/a> funcionalidade.\u00a0<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Simples, mas poderoso<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Primeiramente, vamos ver como \u00e9 f\u00e1cil escrever uma transa\u00e7\u00e3o do Couchbase. Voc\u00ea abre uma transa\u00e7\u00e3o, faz algum trabalho e confirma (ou falha) com <\/span><b>A<\/b><span style=\"font-weight: 400\">tomicidade, <\/span><b>C<\/b><span style=\"font-weight: 400\">onsist\u00eancia, <\/span><b>I<\/b><span style=\"font-weight: 400\">solu\u00e7\u00e3o e <\/span><b>D<\/b><span style=\"font-weight: 400\">urabilidade.   Aproveitando o SDK e as APIs regulares do Couchbase, voc\u00ea pode utilizar os recursos da plataforma de programa\u00e7\u00e3o subjacente. Aqui est\u00e1 um trecho de c\u00f3digo que mostra um d\u00e9bito\/cr\u00e9dito b\u00e1sico, transferindo fundos de uma conta para outra com uma transa\u00e7\u00e3o ACID:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7326 size-large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/08\/TransactionsCodeImage-1024x627.png\" alt=\"\" width=\"900\" height=\"551\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/TransactionsCodeImage-1024x627.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/TransactionsCodeImage-300x184.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/TransactionsCodeImage-768x470.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/TransactionsCodeImage-1536x941.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/TransactionsCodeImage-20x12.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/TransactionsCodeImage-1320x809.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/TransactionsCodeImage.png 1760w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p><span style=\"font-weight: 400\">H\u00e1 muitos recursos incorporados para facilitar a programa\u00e7\u00e3o com transa\u00e7\u00f5es no Couchbase:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Confirma\u00e7\u00e3o ou revers\u00e3o autom\u00e1tica com flexibilidade para tamb\u00e9m fazer isso explicitamente.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Tentativas autom\u00e1ticas para erros transit\u00f3rios, como atrasos de durabilidade devido a falhas na rede ou conflitos de bloqueio.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Dura\u00e7\u00e3o configur\u00e1vel para uma transa\u00e7\u00e3o. Os deadlocks s\u00e3o resolvidos automaticamente, pois uma das transa\u00e7\u00f5es atingir\u00e1 o tempo limite e liberar\u00e1 seus recursos.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Limpeza autom\u00e1tica de transa\u00e7\u00f5es \u00f3rf\u00e3s em caso de falha do cliente.<\/span><\/li>\n<\/ul>\n<p>Se voc\u00ea quiser um tutorial r\u00e1pido sobre programa\u00e7\u00e3o com a API Java de transa\u00e7\u00f5es e um exemplo de c\u00f3digo para download, consulte <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-transactions-java-api\/\">Blog e v\u00eddeo de Graham Pople<\/a>.<\/p>\n<h2><span style=\"font-weight: 400\">Garantias da ACID<\/span><\/h2>\n<p><span style=\"font-weight: 400\">As transa\u00e7\u00f5es do Couchbase fornecem atomicidade, consist\u00eancia, isolamento e durabilidade, conforme exigem as garantias ACID:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><b>Atomicidade<\/b><span style=\"font-weight: 400\"> e <\/span><b>Durabilidade<\/b><span style=\"font-weight: 400\"> s\u00e3o propriedades bin\u00e1rias - ou voc\u00ea tem ou n\u00e3o tem.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400\"><b>Isolamento<\/b><span style=\"font-weight: 400\"> \u00e9 um espectro com compensa\u00e7\u00f5es. Os bancos de dados relacionais populares, como Oracle, MySQL e SQL Server, escolheram diferentes n\u00edveis de isolamento padr\u00e3o e m\u00e1ximo.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400\"><b>Consist\u00eancia<\/b><span style=\"font-weight: 400\"> tem significados diferentes para o p\u00fablico do ACID tradicional e para o p\u00fablico dos sistemas distribu\u00eddos. A defini\u00e7\u00e3o tradicional de ACID diz que uma transa\u00e7\u00e3o deve levar o banco de dados de um estado v\u00e1lido para outro. A defini\u00e7\u00e3o de sistemas distribu\u00eddos decorrente do teorema CAP diz que cada leitura deve receber a \u00faltima grava\u00e7\u00e3o, embora isso comece a parecer um pouco com a sem\u00e2ntica de isolamento. <\/span><\/li>\n<\/ul>\n<p>Aqui est\u00e1 um resumo das garantias ACID fornecidas pelas transa\u00e7\u00f5es no Couchbase Server 6.5.<\/p>\n<table>\n<tbody>\n<tr>\n<td><b>A<\/b><span style=\"font-weight: 400\">tomicidade<\/span><\/td>\n<td><span style=\"font-weight: 400\">Sem\u00e2ntica de tudo ou nada para atualizar v\u00e1rios documentos em v\u00e1rios fragmentos em n\u00f3s diferentes.<\/span><\/td>\n<\/tr>\n<tr>\n<td><b>C<\/b><span style=\"font-weight: 400\">onsist\u00eancia<\/span><\/td>\n<td><span style=\"font-weight: 400\">As r\u00e9plicas s\u00e3o imediatamente consistentes com a confirma\u00e7\u00e3o da transa\u00e7\u00e3o.<\/span><\/p>\n<p><span style=\"font-weight: 400\">GSI, FTS, XDCR s\u00e3o eventualmente consistentes com o commit da transa\u00e7\u00e3o (<\/span><i><span style=\"font-weight: 400\">O N1QL pode impor uma consist\u00eancia forte na leitura com request_plus<\/span><\/i><span style=\"font-weight: 400\">)\u00a0\u00a0<\/span><\/td>\n<\/tr>\n<tr>\n<td><b>I<\/b><span style=\"font-weight: 400\">sola\u00e7\u00e3o<\/span><\/td>\n<td><span style=\"font-weight: 400\">Leitura Isolamento comprometido para todos os leitores simult\u00e2neos - <\/span><span style=\"font-weight: 400\">se s\u00e3o leituras transacionais ou n\u00e3o transacionais<\/span><\/td>\n<\/tr>\n<tr>\n<td><b>D<\/b><span style=\"font-weight: 400\">urabilidade<\/span><\/td>\n<td><span style=\"font-weight: 400\">3 n\u00edveis de durabilidade dispon\u00edveis para prote\u00e7\u00e3o de dados:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><i><span style=\"font-weight: 400\">replicar para uma maioria\u00a0<\/span><\/i><\/li>\n<li style=\"font-weight: 400\"><i><span style=\"font-weight: 400\">replicar para uma maioria e persistir em disco no prim\u00e1rio<\/span><\/i><\/li>\n<li style=\"font-weight: 400\"><i><span style=\"font-weight: 400\">persistir no disco em uma maioria<\/span><\/i><\/li>\n<\/ul>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><span style=\"font-weight: 400\">Sim, eles s\u00e3o distribu\u00eddos<\/span><\/h2>\n<p><span style=\"font-weight: 400\">As transa\u00e7\u00f5es ACID do Couchbase s\u00e3o multi-documento e multi-n\u00f3 - portanto, s\u00e3o realmente distribu\u00eddas, como voc\u00ea pode ver na ilustra\u00e7\u00e3o arquitet\u00f4nica simplificada do Couchbase abaixo. A ilustra\u00e7\u00e3o mostra um cluster simples do Couchbase com 3 n\u00f3s e 9 vbuckets\/shards com 2 r\u00e9plicas (total de 3 c\u00f3pias de dados). A transa\u00e7\u00e3o modifica dois documentos, Andy e Beth, com sua c\u00f3pia ativa em dois n\u00f3s separados. A conclus\u00e3o bem-sucedida da transa\u00e7\u00e3o garantir\u00e1 que a c\u00f3pia ativa de cada um dos dois documentos, bem como a maioria de suas c\u00f3pias totais (o que, nesse caso, significa 1 de 2 r\u00e9plicas al\u00e9m da ativa), sejam atualizadas com o novo valor. A falha garantir\u00e1 que o estado permane\u00e7a inalterado e id\u00eantico ao anterior \u00e0 transa\u00e7\u00e3o.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-7327 size-large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/08\/TransactionsDistributedImage-1024x454.png\" alt=\"\" width=\"900\" height=\"399\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/TransactionsDistributedImage-1024x454.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/TransactionsDistributedImage-300x133.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/TransactionsDistributedImage-768x340.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/TransactionsDistributedImage-1536x680.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/TransactionsDistributedImage-20x9.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/TransactionsDistributedImage-1320x585.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/TransactionsDistributedImage.png 2048w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<h2><span style=\"font-weight: 400\">Detalhamento de recursos<\/span><\/h2>\n<p><span style=\"font-weight: 400\">Embora o resumo do ACID forne\u00e7a uma perspectiva de alto n\u00edvel, os detalhes a seguir fornecem uma compreens\u00e3o mais profunda da sem\u00e2ntica:<\/span><\/p>\n<h3><span style=\"font-weight: 400\">Multi-n\u00f3, multi-bucket, multi-documento<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Uma \u00fanica transa\u00e7\u00e3o pode abranger v\u00e1rios documentos, em v\u00e1rios buckets, em v\u00e1rios n\u00f3s. Como no Couchbase, um bucket mapeia um banco de dados, uma transa\u00e7\u00e3o pode, na verdade, abranger v\u00e1rios bancos de dados que vivem no mesmo cluster do Couchbase. Isso, juntamente com a capacidade do Couchbase de executar JOINs entre buckets, proporciona enorme flexibilidade ao aplicativo.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">Somente os dados confirmados podem ser lidos pelos consumidores de DCP<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Todas as leituras feitas de qualquer maneira, inclusive de N1QL, XDCR, Analytics, Mobile, Eventing e Connectors, retornar\u00e3o apenas dados confirmados. Ningu\u00e9m jamais poder\u00e1 ler dados n\u00e3o confirmados\/sujos. O protocolo DCP (Data Change Protocol) do Couchbase garante que nenhum dado intermedi\u00e1rio n\u00e3o confirmado seja lido por um consumidor downstream.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">Bloqueio e detec\u00e7\u00e3o de conflitos<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Os conflitos entre transa\u00e7\u00f5es que tentam atualizar os mesmos documentos s\u00e3o detectados e tratados revertendo uma delas e tentando novamente (at\u00e9 o tempo limite da transa\u00e7\u00e3o que, por padr\u00e3o, \u00e9 de 15s). Isso \u00e9 feito por meio de uma combina\u00e7\u00e3o de otimismo e <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/optimistic-or-pessimistic-locking-which-one-should-you-pick\/\">bloqueio pessimista<\/a> no n\u00edvel do documento.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Qualquer documento que voc\u00ea queira modificar em uma transa\u00e7\u00e3o deve ser lido primeiro dentro da transa\u00e7\u00e3o e todas as grava\u00e7\u00f5es nela s\u00e3o automaticamente grava\u00e7\u00f5es CAS (Check and Set). Portanto, se uma transa\u00e7\u00e3o ler dados que posteriormente s\u00e3o alterados por outra grava\u00e7\u00e3o transacional (ou n\u00e3o transacional), no momento da grava\u00e7\u00e3o essa transa\u00e7\u00e3o detectar\u00e1 o conflito de CAS, reverter\u00e1 e tentar\u00e1 novamente.\u00a0\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Na transa\u00e7\u00e3o de d\u00e9bito\/cr\u00e9dito acima, em que o dinheiro est\u00e1 sendo transferido da conta de Beth para a conta de Andy, se a conta de Beth for alterada ap\u00f3s a transa\u00e7\u00e3o ter lido a conta dela, mas antes de modific\u00e1-la, a transa\u00e7\u00e3o detectar\u00e1 isso, reverter\u00e1 e tentar\u00e1 novamente.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Quando o documento \u00e9 modificado na transa\u00e7\u00e3o, ele obt\u00e9m implicitamente um bloqueio de grava\u00e7\u00e3o no documento, que \u00e9 liberado somente quando a transa\u00e7\u00e3o termina. Se uma segunda transa\u00e7\u00e3o tentar modificar um documento que j\u00e1 esteja bloqueado por uma transa\u00e7\u00e3o, essa \u00faltima transa\u00e7\u00e3o detectar\u00e1 o conflito de grava\u00e7\u00e3o, far\u00e1 uma revers\u00e3o e tentar\u00e1 novamente at\u00e9 o per\u00edodo de tempo limite da transa\u00e7\u00e3o.\u00a0\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400\">Voltando ao exemplo de d\u00e9bito\/cr\u00e9dito acima, suponha uma transa\u00e7\u00e3o durante o voo em que a conta de Beth tenha sido deduzida, mas a de Andy ainda n\u00e3o tenha sido atualizada. Nesse momento, o documento da conta de Beth est\u00e1 bloqueado. Portanto, se outra transa\u00e7\u00e3o para transferir dinheiro da conta da Beth para a conta do Bill estiver sendo tentada simultaneamente, ela detectar\u00e1 o conflito de grava\u00e7\u00e3o na Beth e reverter\u00e1.<\/span><\/p>\n<h3><span style=\"font-weight: 400\">Durabilidade s\u00edncrona<\/span><\/h3>\n<p><span style=\"font-weight: 400\">No Couchbase Server 6.5, temos uma nova implementa\u00e7\u00e3o do protocolo de replica\u00e7\u00e3o que garante que uma muta\u00e7\u00e3o seja vis\u00edvel para os leitores somente depois de atender aos crit\u00e9rios de replica\u00e7\u00e3o\/persist\u00eancia e possa ser revertida se esses crit\u00e9rios n\u00e3o forem atendidos. Esse novo mecanismo de replica\u00e7\u00e3o est\u00e1 sendo submetido a testes internos abrangentes da Jepsen. <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/introduction-to-jepsen-testing-at-couchbase\/\">Leia o blog de Korrigan<\/a> para saber mais.<\/span><\/p>\n<p><span style=\"font-weight: 400\">A replica\u00e7\u00e3o s\u00edncrona oferece durabilidade ajust\u00e1vel, permitindo que voc\u00ea escolha o n\u00edvel de prote\u00e7\u00e3o contra falhas (falha de n\u00f3, falha de disco, falhas \u00fanicas ou m\u00faltiplas) que deseja para cada grava\u00e7\u00e3o. H\u00e1 tr\u00eas n\u00edveis para escolher:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><i><span style=\"font-weight: 400\">maioria - <\/span><\/i><span style=\"font-weight: 400\">Esse n\u00edvel de durabilidade garante que a grava\u00e7\u00e3o seja propagada para a maioria das r\u00e9plicas antes de retornar (por exemplo, se o cluster estiver configurado com 2 r\u00e9plicas, ela ser\u00e1 gravada na RAM na r\u00e9plica ativa e propagada para pelo menos 1 r\u00e9plica antes de retornar o sucesso ao aplicativo)<\/span><\/li>\n<li style=\"font-weight: 400\"><i><span style=\"font-weight: 400\">persistToActive<\/span><\/i><span style=\"font-weight: 400\"> - Esse n\u00edvel garante que a grava\u00e7\u00e3o seja propagada na RAM para a maioria das r\u00e9plicas e persista no disco na r\u00e9plica ativa antes de retornar o sucesso ao aplicativo.<\/span><\/li>\n<li style=\"font-weight: 400\"><i><span style=\"font-weight: 400\">persistToMajority <\/span><\/i><span style=\"font-weight: 400\">- esse n\u00edvel garante que a grava\u00e7\u00e3o seja mantida no disco na maioria dos n\u00f3s antes de retornar o sucesso ao aplicativo.<\/span><\/li>\n<\/ul>\n<p>Se a durabilidade falhar (tempo limite, falha no n\u00f3 etc.), a grava\u00e7\u00e3o ser\u00e1 automaticamente revertida e o cliente ser\u00e1 notificado da falha.<\/p>\n<p><i><span style=\"font-weight: 400\">Observa\u00e7\u00e3o: as novas grava\u00e7\u00f5es de durabilidade s\u00edncrona s\u00e3o aplic\u00e1veis a transa\u00e7\u00f5es e a muta\u00e7\u00f5es de documentos \u00fanicos.<\/span><\/i><\/p>\n<p><i><span style=\"font-weight: 400\">Observa\u00e7\u00e3o: se voc\u00ea n\u00e3o especificar nenhum n\u00edvel de durabilidade, ele ser\u00e1 tratado de forma ass\u00edncrona, o que acaba sendo dur\u00e1vel.<\/span><\/i><\/p>\n<p><span style=\"font-weight: 400\">As transa\u00e7\u00f5es s\u00e3o colocadas em camadas sobre o novo mecanismo de replica\u00e7\u00e3o s\u00edncrona e, por padr\u00e3o, definem o n\u00edvel de durabilidade em '<\/span><i><span style=\"font-weight: 400\">maioria<\/span><\/i><span style=\"font-weight: 400\">'. Voc\u00ea pode substituir o padr\u00e3o escolhendo um n\u00edvel de durabilidade diferente por transa\u00e7\u00e3o. <\/span><i><span style=\"font-weight: 400\">'persistToMajority'<\/span><\/i><span style=\"font-weight: 400\"> oferece a mais forte prote\u00e7\u00e3o de dados em caso de v\u00e1rias falhas.\u00a0<\/span><\/p>\n<h3><span style=\"font-weight: 400\">Compartimentos ef\u00eameros<\/span><\/h3>\n<p><span style=\"font-weight: 400\">Voc\u00ea tamb\u00e9m pode usar transa\u00e7\u00f5es e durabilidade s\u00edncrona em buckets ef\u00eameros. H\u00e1 casos de uso de cache que n\u00e3o precisam de persist\u00eancia, mas ainda querem garantir que os itens no cache sejam atualizados com garantias ACID.<\/span><\/p>\n<h2><span style=\"font-weight: 400\">Pr\u00f3ximas etapas<\/span><\/h2>\n<p><span style=\"font-weight: 400\">O suporte a transa\u00e7\u00f5es ACID de v\u00e1rios documentos no Couchbase Server 6.5 \u00e9 inovador e abre novos casos de uso para sua empresa. <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/10-common-nosql-use-cases-for-modern-applications\/\">Aplicativos NoSQL<\/a>. Gostar\u00edamos muito de receber seus coment\u00e1rios e sugest\u00f5es sobre os aprimoramentos adicionais necess\u00e1rios para as transa\u00e7\u00f5es. Aqui est\u00e3o alguns recursos para voc\u00ea come\u00e7ar:<\/span><\/p>\n<p><strong><em>Baixar<\/em><\/strong><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/?family=server&amp;product=couchbase-server-developer\">Fa\u00e7a o download do Couchbase Server 6.5<\/a><\/p>\n<p><strong><em>Documenta\u00e7\u00e3o<\/em><\/strong><\/p>\n<p><a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/learn\/data\/distributed-acid-transactions.html\"><span style=\"font-weight: 400\">Documenta\u00e7\u00e3o do Couchbase Transactions 6.5<\/span><\/a><\/p>\n<p><a href=\"https:\/\/docs.couchbase.com\/java-sdk\/3.0\/howtos\/distributed-acid-transactions-from-the-sdk.html\"><span style=\"font-weight: 400\">Guia de instru\u00e7\u00f5es do Couchbase Transactions 6.5 para SDKs<\/span><\/a><\/p>\n<p><strong><em>Blogs <\/em><\/strong><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-brings-distributed-multi-document-acid-transactions-to-nosql\/\">O Couchbase traz as transa\u00e7\u00f5es ACID multidocumento distribu\u00eddas para o NoSQL<\/a><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-transactions-java-api\/\">Introdu\u00e7\u00e3o \u00e0 API Java do Couchbase Transactions [V\u00eddeo]<\/a><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/announcing-couchbase-server-6-5-0-whats-new-and-improved\/\">Anunciando o Couchbase Server 6.5 - Novidades e aprimoramentos<\/a><\/p>\n<p><strong><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/tag\/6-5\/\">Todos os blogs 6.5<\/a><\/strong><\/p>","protected":false},"excerpt":{"rendered":"<p>Couchbase CTO Ravi Mayuram announced Distributed Multi-document ACID Transactions in Couchbase Server 6.5. I highly recommend reading Ravi&#8217;s blog which highlights how Couchbase transactions are an innovative union of ACID guarantees with scale, high-availability, performance and flexibility. In this blog, [&hellip;]<\/p>","protected":false},"author":31463,"featured_media":10739,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1821,1816,2396],"tags":[2378],"ppma_author":[9079],"class_list":["post-7322","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-architecture","category-couchbase-server","category-transactions","tag-6-5"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Understanding Distributed Multi-Document ACID Transactions<\/title>\n<meta name=\"description\" content=\"Couchbase transactions are an innovative union of ACID guarantees with scale, high-availability, performance and flexibility.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/distributed-multi-document-acid-transactions-in-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Understanding Distributed Multi-Document ACID Transactions\" \/>\n<meta property=\"og:description\" content=\"Couchbase transactions are an innovative union of ACID guarantees with scale, high-availability, performance and flexibility.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/distributed-multi-document-acid-transactions-in-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-08-09T17:00:15+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-27T03:16:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/08\/Transactions-1-1_RESIZED.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"631\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Shivani Gupta\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Shivani Gupta\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/\"},\"author\":{\"name\":\"Shivani Gupta\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/1015706fa52f49e2e4ab139abda363b1\"},\"headline\":\"Understanding Distributed Multi-Document ACID Transactions\",\"datePublished\":\"2019-08-09T17:00:15+00:00\",\"dateModified\":\"2024-01-27T03:16:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/\"},\"wordCount\":1412,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Transactions-1-1_RESIZED.jpg\",\"keywords\":[\"6.5\"],\"articleSection\":[\"Couchbase Architecture\",\"Couchbase Server\",\"Transactions\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/\",\"name\":\"Understanding Distributed Multi-Document ACID Transactions\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Transactions-1-1_RESIZED.jpg\",\"datePublished\":\"2019-08-09T17:00:15+00:00\",\"dateModified\":\"2024-01-27T03:16:49+00:00\",\"description\":\"Couchbase transactions are an innovative union of ACID guarantees with scale, high-availability, performance and flexibility.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Transactions-1-1_RESIZED.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Transactions-1-1_RESIZED.jpg\",\"width\":1600,\"height\":631,\"caption\":\"A smartphone executing a wireless transaction by tapping a card reader\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Understanding Distributed Multi-Document ACID Transactions\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/1015706fa52f49e2e4ab139abda363b1\",\"name\":\"Shivani Gupta\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/958854edc0e632ef5d325afcfa90cf32\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/21281e35ea9170ee660a9c1417cf39f4b04015e2628fd86f3d7580a305964fa8?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/21281e35ea9170ee660a9c1417cf39f4b04015e2628fd86f3d7580a305964fa8?s=96&d=mm&r=g\",\"caption\":\"Shivani Gupta\"},\"description\":\"Shivani Gupta is Director of Product Management at Couchbase for the Core Server. Shivani has over 20 years of varied experience in Big Data, Distributed Systems, and Databases at different companies including Oracle, Microsoft, VMWare, Hortonworks and now Couchbase.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/shivani-gupta\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Entendendo as transa\u00e7\u00f5es ACID distribu\u00eddas de v\u00e1rios documentos","description":"As transa\u00e7\u00f5es do Couchbase s\u00e3o uma uni\u00e3o inovadora de garantias ACID com escala, alta disponibilidade, desempenho e flexibilidade.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/distributed-multi-document-acid-transactions-in-couchbase\/","og_locale":"pt_BR","og_type":"article","og_title":"Understanding Distributed Multi-Document ACID Transactions","og_description":"Couchbase transactions are an innovative union of ACID guarantees with scale, high-availability, performance and flexibility.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/distributed-multi-document-acid-transactions-in-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-08-09T17:00:15+00:00","article_modified_time":"2024-01-27T03:16:49+00:00","og_image":[{"width":1600,"height":631,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/08\/Transactions-1-1_RESIZED.jpg","type":"image\/jpeg"}],"author":"Shivani Gupta","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Shivani Gupta","Est. reading time":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/"},"author":{"name":"Shivani Gupta","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/1015706fa52f49e2e4ab139abda363b1"},"headline":"Understanding Distributed Multi-Document ACID Transactions","datePublished":"2019-08-09T17:00:15+00:00","dateModified":"2024-01-27T03:16:49+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/"},"wordCount":1412,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Transactions-1-1_RESIZED.jpg","keywords":["6.5"],"articleSection":["Couchbase Architecture","Couchbase Server","Transactions"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/","name":"Entendendo as transa\u00e7\u00f5es ACID distribu\u00eddas de v\u00e1rios documentos","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Transactions-1-1_RESIZED.jpg","datePublished":"2019-08-09T17:00:15+00:00","dateModified":"2024-01-27T03:16:49+00:00","description":"As transa\u00e7\u00f5es do Couchbase s\u00e3o uma uni\u00e3o inovadora de garantias ACID com escala, alta disponibilidade, desempenho e flexibilidade.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Transactions-1-1_RESIZED.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/08\/Transactions-1-1_RESIZED.jpg","width":1600,"height":631,"caption":"A smartphone executing a wireless transaction by tapping a card reader"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/distributed-multi-document-acid-transactions-in-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Understanding Distributed Multi-Document ACID Transactions"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/1015706fa52f49e2e4ab139abda363b1","name":"Shivani Gupta","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/958854edc0e632ef5d325afcfa90cf32","url":"https:\/\/secure.gravatar.com\/avatar\/21281e35ea9170ee660a9c1417cf39f4b04015e2628fd86f3d7580a305964fa8?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/21281e35ea9170ee660a9c1417cf39f4b04015e2628fd86f3d7580a305964fa8?s=96&d=mm&r=g","caption":"Shivani Gupta"},"description":"Shivani Gupta \u00e9 diretora de gerenciamento de produtos da Couchbase para o Core Server. Shivani tem mais de 20 anos de experi\u00eancia variada em Big Data, sistemas distribu\u00eddos e bancos de dados em diferentes empresas, incluindo Oracle, Microsoft, VMWare, Hortonworks e agora Couchbase.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/shivani-gupta\/"}]}},"authors":[{"term_id":9079,"user_id":31463,"is_guest":0,"slug":"shivani-gupta","display_name":"Shivani Gupta","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/21281e35ea9170ee660a9c1417cf39f4b04015e2628fd86f3d7580a305964fa8?s=96&d=mm&r=g","author_category":"","last_name":"Gupta","first_name":"Shivani","job_title":"","user_url":"","description":"Shivani Gupta \u00e9 diretora de gerenciamento de produtos da Couchbase para o Core Server. Shivani tem mais de 20 anos de experi\u00eancia variada em Big Data, sistemas distribu\u00eddos e bancos de dados em diferentes empresas, incluindo Oracle, Microsoft, VMWare, Hortonworks e agora Couchbase."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/7322","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/31463"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=7322"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/7322\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/10739"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=7322"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=7322"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=7322"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=7322"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}