{"id":10528,"date":"2021-02-24T04:24:41","date_gmt":"2021-02-24T12:24:41","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=10528"},"modified":"2025-06-13T23:42:26","modified_gmt":"2025-06-14T06:42:26","slug":"use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/","title":{"rendered":"Casos de uso e pr\u00e1ticas recomendadas para transa\u00e7\u00f5es distribu\u00eddas por meio do N1QL"},"content":{"rendered":"<p><b>O Couchbase \u00e9 compat\u00edvel com transa\u00e7\u00f5es?<\/b><\/p>\n<p><b>Sim! <\/b><span style=\"font-weight: 400\">Com a vers\u00e3o 6.5, introduzimos o <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/transactions\/\">Transa\u00e7\u00e3o ACID<\/a> no Couchbase por meio dos SDKs. O 1<\/span><span style=\"font-weight: 400\">st<\/span><span style=\"font-weight: 400\"> A pergunta que recebemos na \u00e9poca dos clientes que souberam disso foi:<\/span><\/p>\n<p><b><i>O suporte a transa\u00e7\u00f5es est\u00e1 dispon\u00edvel por meio do N1QL?<\/i><\/b><\/p>\n<p><b>Sim! <\/b><span style=\"font-weight: 400\">Com a vers\u00e3o 7.0, come\u00e7amos a oferecer suporte a transa\u00e7\u00f5es por meio do N1QL tamb\u00e9m!<strong>As transa\u00e7\u00f5es N1QL s\u00e3o multitudo. V\u00e1rios documentos que podem abranger v\u00e1rias cole\u00e7\u00f5es de v\u00e1rios escopos em v\u00e1rios buckets. Voc\u00ea pode ter v\u00e1rias transa\u00e7\u00f5es em execu\u00e7\u00e3o em um \u00fanico n\u00f3 de consulta e pode ter v\u00e1rios n\u00f3s de consulta. N\u00c3O h\u00e1 um coordenador central, o que elimina um \u00fanico ponto de falha ou conten\u00e7\u00e3o e abre caminho para a escalabilidade infinita!<\/strong><\/span><\/p>\n<p><b><i>O que \u00e9 N1QL e por que ele \u00e9 t\u00e3o importante para o Couchbase?<\/i><\/b><\/p>\n<p><span style=\"font-weight: 400\">Assim como o SQL est\u00e1 para o RDBMS, o N1QL est\u00e1 para o Couchbase!<\/span><\/p>\n<p><a href=\"https:\/\/docs.couchbase.com\/server\/current\/getting-started\/try-a-query.html\"><span style=\"font-weight: 400\">N1QL<\/span><\/a><span style=\"font-weight: 400\"> \u00e9 uma linguagem declarativa, quase id\u00eantica ao SQL, e \u00e9 usada para inserir\/recuperar e manipular os dados armazenados na forma de documentos JSON.<\/span><span style=\"font-weight: 400\">Saiba mais sobre o N1QL <\/span><a href=\"https:\/\/query-tutorial.couchbase.com\/tutorial\/#1\"><span style=\"font-weight: 400\">aqui<\/span><\/a><span style=\"font-weight: 400\"> .<\/span><\/p>\n<p><b><i>Se o N1QL \u00e9 como o SQL, ent\u00e3o por que ele n\u00e3o tinha ACID antes?<\/i><\/b><\/p>\n<p><span style=\"font-weight: 400\">O N1QL sempre teve ACID em um \u00fanico documento. O que n\u00e3o t\u00ednhamos antes da vers\u00e3o 7.0 era o suporte a transa\u00e7\u00f5es com v\u00e1rios documentos por meio do N1QL.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Bem, vamos pensar primeiro no motivo pelo qual muitas pessoas acreditam que precisam de transa\u00e7\u00f5es com v\u00e1rios documentos. O primeiro princ\u00edpio da modelagem de dados relacionais \u00e9 a normaliza\u00e7\u00e3o dos dados entre as tabelas. Isso significa que muitas opera\u00e7\u00f5es comuns do banco de dados, como a cria\u00e7\u00e3o de contas, exigem atualiza\u00e7\u00f5es at\u00f4micas em muitas linhas e colunas.<\/span><\/p>\n<p><span style=\"font-weight: 400\">No Couchbase, o modelo de dados \u00e9 fundamentalmente diferente. O modelo de documento incentiva os usu\u00e1rios a armazenar dados relacionados em um \u00fanico documento. O N1QL sempre deu suporte a transa\u00e7\u00f5es ACID em um \u00fanico documento e, ao aproveitar o modelo de documento adequadamente, muitos aplicativos n\u00e3o precisam de garantias ACID em v\u00e1rios documentos. Conforme mostrado abaixo, os dados que precisam ser armazenados em tr\u00eas tabelas diferentes vinculadas por PK-FK s\u00e3o armazenados em um \u00fanico documento no Couchbase.\u00a0\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-10803 aligncenter\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/02\/Screen-Shot-2021-02-16-at-10.52.23-AM-300x171.png\" alt=\"\" width=\"805\" height=\"459\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-02-16-at-10.52.23-AM-300x171.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-02-16-at-10.52.23-AM-1024x583.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-02-16-at-10.52.23-AM-768x437.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-02-16-at-10.52.23-AM-1536x874.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-02-16-at-10.52.23-AM-2048x1165.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-02-16-at-10.52.23-AM-20x11.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-02-16-at-10.52.23-AM-1320x751.png 1320w\" sizes=\"auto, (max-width: 805px) 100vw, 805px\" \/><\/p>\n<p><span style=\"font-weight: 400\">Por exemplo, adicionar um item a um carrinho de compras <\/span><span style=\"font-weight: 400\">n\u00e3o precisa de transa\u00e7\u00f5es no Couchbase, pois voc\u00ea est\u00e1 atualizando apenas um \u00fanico documento<\/span><\/p>\n<p><span style=\"font-weight: 400\">Entretanto, as transa\u00e7\u00f5es n\u00e3o s\u00e3o apenas uma caixa de sele\u00e7\u00e3o. As transa\u00e7\u00f5es, como todos os recursos do Couchbase, t\u00eam como objetivo facilitar a vida dos desenvolvedores. As garantias ACID entre documentos simplificam a l\u00f3gica de aplicativo necess\u00e1ria para satisfazer aplicativos complexos.<\/span><\/p>\n<h4><b><i>Quais s\u00e3o os casos de uso para transa\u00e7\u00f5es com v\u00e1rios documentos?<\/i><\/b><b><i>:<\/i><\/b><\/h4>\n<p><span style=\"font-weight: 400\">H\u00e1 casos de uso em que as garantias ACID transacionais precisam ser aplicadas a um conjunto de opera\u00e7\u00f5es que abrangem v\u00e1rios documentos.  Os aplicativos de \"Sistema de registro\" s\u00e3o a classe t\u00edpica de carga de trabalho em que as transa\u00e7\u00f5es de v\u00e1rios documentos s\u00e3o \u00fateis. Os exemplos incluem:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Processamento de eventos de aplicativos quando os usu\u00e1rios executam a\u00e7\u00f5es que, se repetidas, podem causar resultados diferentes, de modo que todos eles devem ser bem-sucedidos ou falhar. Por exemplo, d\u00e9bito e cr\u00e9dito banc\u00e1rios t\u00edpicos.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Registro de a\u00e7\u00f5es personalizadas do aplicativo - que n\u00e3o podem ser revertidas mesmo em caso de falha do sistema, por exemplo, quando um usu\u00e1rio transfere a propriedade de um carro ou de uma casa, a grava\u00e7\u00e3o n\u00e3o deve ser bem-sucedida se o registro n\u00e3o for.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Relacionamentos de muitos para muitos em que os dados se encaixam naturalmente em objetos definidos - por exemplo, clientes, pedidos de clientes, produtos e fabricantes. Para calcular o total em um pedido de cliente, os valores de cada tabela precisam ser coletados e somados para cada cliente.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">\u00a0<\/span><\/p>\n<h4><b>Detalhes sobre transa\u00e7\u00f5es por meio do N1QL no Couchbase:<\/b><\/h4>\n<p><span style=\"font-weight: 400\">Vamos nos aprofundar nas transa\u00e7\u00f5es N1QL com uma transa\u00e7\u00e3o simples, d\u00e9bito e cr\u00e9dito. Os Selects precisam ler suas pr\u00f3prias atualiza\u00e7\u00f5es (RYOW)<\/span><\/p>\n<p><b>INICIAR A TRANSA\u00c7\u00c3O;<\/b><\/p>\n<p><b>UPDATE customer SET balance = balance - 100 WHERE cid = 4872;<\/b><\/p>\n<p><b>UPDATE customer SET balance = balance + 100 WHERE cid = 1924;<\/b><\/p>\n<p><b>SELECT cid, name, balance from customer where cid in [4872,1924];<\/b><\/p>\n<p><b>COMMIT ;<\/b><\/p>\n<p>Essa \u00e9 a mesma sintaxe que voc\u00ea escreveria no MySQL. Essa \u00e9 a beleza do N1QL.<\/p>\n<p><span style=\"font-weight: 400\">Voc\u00ea n\u00e3o precisa aprender uma nova linguagem para usar o Couchbase se j\u00e1 estiver familiarizado com SQL.<\/span><\/p>\n<p><span style=\"font-weight: 400\">No exemplo acima,<\/span><\/p>\n<p><span style=\"font-weight: 400\">Se voc\u00ea j\u00e1 estiver familiarizado com a arquitetura do Couchbase, ent\u00e3o<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">START TRANSACTION ir\u00e1 para um n\u00f3 de consulta. O n\u00f3 de consulta atribuir\u00e1 um ID de transa\u00e7\u00e3o exclusivo (txid) a essa transa\u00e7\u00e3o.<\/span><\/li>\n<\/ul>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-10804 aligncenter\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/02\/Screen-Shot-2021-01-30-at-2.54.03-PM-300x95.png\" alt=\"\" width=\"900\" height=\"285\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-01-30-at-2.54.03-PM-300x95.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-01-30-at-2.54.03-PM-1024x325.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-01-30-at-2.54.03-PM-768x244.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-01-30-at-2.54.03-PM-1536x488.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-01-30-at-2.54.03-PM-2048x650.png 2048w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-01-30-at-2.54.03-PM-20x6.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-01-30-at-2.54.03-PM-1320x419.png 1320w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Em seguida, vem a instru\u00e7\u00e3o de atualiza\u00e7\u00e3o. O n\u00f3 de consulta examinar\u00e1 a cl\u00e1usula where, selecionar\u00e1 o \u00edndice apropriado que atender\u00e1 \u00e0 consulta, encontrar\u00e1 o ID do documento, enviar\u00e1 o ID do documento para o armazenamento de dados (KV) e buscar\u00e1 o documento no n\u00f3 de consulta e, em seguida, atualizar\u00e1 o saldo. Se isso n\u00e3o estivesse em uma transa\u00e7\u00e3o, seria enviado de volta ao armazenamento de dados imediatamente. Mas, como est\u00e1 dentro da transa\u00e7\u00e3o, esse documento ser\u00e1 armazenado no cache do n\u00f3 de consulta. Esse cache \u00e9 chamado de tabela delta. Temos uma tabela delta por transa\u00e7\u00e3o e por cole\u00e7\u00e3o. \u00c9 por isso que precisamos que todas as declara\u00e7\u00f5es de uma transa\u00e7\u00e3o cheguem ao mesmo n\u00f3 de consulta. Essa jun\u00e7\u00e3o \u00e9 feita com o txid fornecido por START TRANSACTION.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Com a pr\u00f3xima atualiza\u00e7\u00e3o, a mesma coisa, o n\u00f3 de consulta examinar\u00e1 a cl\u00e1usula where, selecionar\u00e1 o \u00edndice apropriado que atender\u00e1 \u00e0 consulta, encontrar\u00e1 o ID do documento, mas agora, em vez de ir diretamente para a KV para buscar o documento, como h\u00e1 uma tabela delta, ele primeiro procurar\u00e1 na tabela delta se esse documento j\u00e1 existe na tabela delta. Nesse caso, n\u00e3o existe, ent\u00e3o ele vai buscar no KV, atualiza o saldo e o armazena na tabela delta.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Em seguida, vem a instru\u00e7\u00e3o select para o n\u00f3 de consulta. Novamente, o n\u00f3 de consulta examinar\u00e1 a cl\u00e1usula where, selecionar\u00e1 o \u00edndice apropriado que atender\u00e1 \u00e0 consulta e encontrar\u00e1 o ID do documento. Agora ele procurar\u00e1 os ids do documento na tabela delta, os encontrar\u00e1 l\u00e1 e enviar\u00e1 os campos projetados de volta ao cliente.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-10844 aligncenter\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/02\/Screen-Shot-2021-01-30-at-2.48.49-PM-300x91.png\" alt=\"\" width=\"797\" height=\"242\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-01-30-at-2.48.49-PM-300x91.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-01-30-at-2.48.49-PM-1024x312.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-01-30-at-2.48.49-PM-768x234.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-01-30-at-2.48.49-PM-1536x468.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-01-30-at-2.48.49-PM-20x6.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-01-30-at-2.48.49-PM-1320x402.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/02\/Screen-Shot-2021-01-30-at-2.48.49-PM.png 1774w\" sizes=\"auto, (max-width: 797px) 100vw, 797px\" \/><\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">At\u00e9 agora, voc\u00ea v\u00ea que lemos do armazenamento de dados, mas nunca gravamos no armazenamento de dados. S\u00f3 escrevemos no cache do n\u00f3 de consulta. Por isso, dizemos que seguimos a simultaneidade otimista. V\u00e1rias transa\u00e7\u00f5es poderiam estar operando nesses mesmos documentos ao mesmo tempo.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Agora, quando a pr\u00f3xima instru\u00e7\u00e3o atingir o n\u00f3 de consulta \"COMMIT\", ser\u00e1 quando os documentos atualizados ir\u00e3o para o n\u00f3 KV e usaremos o protocolo de confirma\u00e7\u00e3o destacado <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-transactions-java-api\/.\/\"><span style=\"font-weight: 400\">aqui<\/span><\/a><span style=\"font-weight: 400\"> para realmente confirmar as altera\u00e7\u00f5es.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Nesse ponto, se houvesse v\u00e1rias transa\u00e7\u00f5es atualizando os mesmos documentos, uma seria bem-sucedida e as outras seriam revertidas e teriam que tentar novamente.<\/span><\/li>\n<\/ul>\n<h4><b><i>Pr\u00e1ticas recomendadas para transa\u00e7\u00f5es N1QL :<\/i><\/b><\/h4>\n<h5><b>Quando voc\u00ea deve usar as transa\u00e7\u00f5es N1QL?<\/b><\/h5>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Quando voc\u00ea tem v\u00e1rios extratos de consulta que devem ser aprovados ou reprovados, um exemplo t\u00edpico: cr\u00e9dito de d\u00e9bito, reserva de companhia a\u00e9rea com v\u00e1rias etapas<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Se voc\u00ea quiser ter certeza de que as altera\u00e7\u00f5es feitas n\u00e3o ser\u00e3o revertidas, mesmo em caso de falha do sistema, como a transfer\u00eancia do t\u00edtulo de uma casa\/carro.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Quando a l\u00f3gica necess\u00e1ria abrange dados que n\u00e3o podem ser mesclados em um \u00fanico documento e exige atualiza\u00e7\u00f5es em v\u00e1rios documentos.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Normalmente, cargas de trabalho de execu\u00e7\u00e3o muito curta envolvendo pequenos conjuntos de resultados - sem grandes agregados.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Quando voc\u00ea precisar modificar\/ler os mesmos documentos v\u00e1rias vezes (com o suporte de Read your own writes usando tabelas delta)<\/span><\/li>\n<\/ol>\n<h5><b><i>O que voc\u00ea deve evitar fazer ao usar transa\u00e7\u00f5es N1QL?<\/i><\/b><\/h5>\n<p><span style=\"font-weight: 400\">Mesmo com o exemplo simples acima, voc\u00ea provavelmente pode ver isso:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">A tabela delta (que \u00e9 por transa\u00e7\u00e3o\/por cole\u00e7\u00e3o) crescer\u00e1 a cada muta\u00e7\u00e3o. Se voc\u00ea tiver uma transa\u00e7\u00e3o com muitas muta\u00e7\u00f5es, o uso da mem\u00f3ria aumentar\u00e1. Portanto, a recomenda\u00e7\u00e3o \u00e9 limitar o n\u00famero de muta\u00e7\u00f5es em uma transa\u00e7\u00e3o. Para cargas do tipo ETL ou atualiza\u00e7\u00f5es massivas que precisam de garantias ACID, fornecemos outra op\u00e7\u00e3o de transa\u00e7\u00f5es impl\u00edcitas. Voc\u00ea pode ler sobre elas <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/settings\/query-settings.html#tximplicit\"><span style=\"font-weight: 400\">aqui<\/span><\/a><span style=\"font-weight: 400\">A configura\u00e7\u00e3o \"memory-quota\" no servi\u00e7o de consulta pode controlar a quantidade de mem\u00f3ria consumida pelas tabelas delta.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Use as transa\u00e7\u00f5es somente em documentos com menos de 10 MB de tamanho.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">N\u00e3o inclua <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Data_definition_language\"><span style=\"font-weight: 400\">Opera\u00e7\u00f5es DDL<\/span><\/a><span style=\"font-weight: 400\"> em transa\u00e7\u00f5es N1QL. Qualquer opera\u00e7\u00e3o DDL resultar\u00e1 em um erro.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Por padr\u00e3o, o tempo limite \u00e9 de 15s. Isso pode ser modificado dependendo do meio que voc\u00ea est\u00e1 usando para usar as transa\u00e7\u00f5es N1QL (shell cbq, UI, Java SDK ou API REST)<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">O servi\u00e7o de consulta foi projetado para oferecer alta taxa de transfer\u00eancia e baixa lat\u00eancia, o que pode ser afetado pelas transa\u00e7\u00f5es. Use transa\u00e7\u00f5es N1QL quando seus casos de uso necessitarem de transa\u00e7\u00f5es.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Como usamos a concorr\u00eancia otimista, precisamos ter certeza de que a maior parte da nossa carga de trabalho \u00e9 tal que v\u00e1rias transa\u00e7\u00f5es n\u00e3o est\u00e3o modificando os mesmos documentos ao mesmo tempo. Porque, nesse caso, uma ser\u00e1 bem-sucedida e as outras ser\u00e3o revertidas com erros de \"incompatibilidade de CAS\" ou \"conflito de grava\u00e7\u00e3o\".<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">N\u00e3o dever\u00edamos estar modificando os mesmos documentos usando transa\u00e7\u00f5es e n\u00e3o transa\u00e7\u00f5es ao mesmo tempo.<\/span><\/li>\n<\/ol>\n<p>Entenda como as transa\u00e7\u00f5es funcionam usando o <a href=\"https:\/\/transactions.couchbase.com\/\">Simulador de transa\u00e7\u00f5es<\/a><\/p>\n<p><span style=\"font-weight: 400\">Mais informa\u00e7\u00f5es sobre o suporte a transa\u00e7\u00f5es por meio do N1QL<\/span><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/transactions-n1ql-couchbase-distributed-nosql\/\"><span style=\"font-weight: 400\">https:\/\/www.couchbase.com\/blog\/transactions-n1ql-couchbase-distributed-nosql\/<\/span><\/a><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-transactions-with-n1ql\/\"><span style=\"font-weight: 400\">https:\/\/www.couchbase.com\/blog\/couchbase-transactions-with-n1ql\/<\/span><\/a><\/p>\n<p><a href=\"https:\/\/docs.couchbase.com\/java-sdk\/current\/howtos\/distributed-acid-transactions-from-the-sdk.html#n1ql-queries\"><span style=\"font-weight: 400\">https:\/\/docs.couchbase.com\/java-sdk\/current\/howtos\/distributed-acid-transactions-from-the-sdk.html#n1ql-queries<\/span><\/a><\/p>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>Does Couchbase support transactions? Yes! With 6.5, we introduced the ACID transaction support in Couchbase through the SDKs. The 1st question we got at the time from the customers that heard about it was: Is transaction support available through N1QL? [&hellip;]<\/p>","protected":false},"author":50908,"featured_media":10545,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,2225,1816,1812,2396],"tags":[9499,8191,1725,2221],"ppma_author":[9099],"class_list":["post-10528","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-cloud","category-couchbase-server","category-n1ql-query","category-transactions","tag-acid-transactions","tag-distributed-transactions","tag-nosql-database","tag-transactions"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Use cases and Best Practices for Distributed Transactions through N1QL - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Typical use cases and Best Practices for using the newly introduced distributed transactions through N1QL in Couhbase!What to do and what to avoid doing!?\" \/>\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\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Use cases and Best Practices for Distributed Transactions through N1QL\" \/>\n<meta property=\"og:description\" content=\"Typical use cases and Best Practices for using the newly introduced distributed transactions through N1QL in Couhbase!What to do and what to avoid doing!?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-24T12:24:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T06:42:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/Screen-Shot-2021-01-31-at-12.46.45-AM.png\" \/>\n\t<meta property=\"og:image:width\" content=\"3359\" \/>\n\t<meta property=\"og:image:height\" content=\"1565\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Kamini Jagtiani\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kamini Jagtiani\" \/>\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\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/\"},\"author\":{\"name\":\"Kamini Jagtiani\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f99c5767a877147f9cf658230bc2473b\"},\"headline\":\"Use cases and Best Practices for Distributed Transactions through N1QL\",\"datePublished\":\"2021-02-24T12:24:41+00:00\",\"dateModified\":\"2025-06-14T06:42:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/\"},\"wordCount\":1464,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/Screen-Shot-2021-01-31-at-12.46.45-AM.png\",\"keywords\":[\"ACID transactions\",\"distributed transactions\",\"NoSQL Database\",\"transactions\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Capella\",\"Couchbase Server\",\"SQL++ \/ N1QL Query\",\"Transactions\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/\",\"name\":\"Use cases and Best Practices for Distributed Transactions through N1QL - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/Screen-Shot-2021-01-31-at-12.46.45-AM.png\",\"datePublished\":\"2021-02-24T12:24:41+00:00\",\"dateModified\":\"2025-06-14T06:42:26+00:00\",\"description\":\"Typical use cases and Best Practices for using the newly introduced distributed transactions through N1QL in Couhbase!What to do and what to avoid doing!?\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/Screen-Shot-2021-01-31-at-12.46.45-AM.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/Screen-Shot-2021-01-31-at-12.46.45-AM.png\",\"width\":3359,\"height\":1565},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Use cases and Best Practices for Distributed Transactions through N1QL\"}]},{\"@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\/f99c5767a877147f9cf658230bc2473b\",\"name\":\"Kamini Jagtiani\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/257695296726c224fc7f0e85b30c9129\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/546f9f69203064f77430f14922d59be33e3f0ea674078a793fc813dd40310c5c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/546f9f69203064f77430f14922d59be33e3f0ea674078a793fc813dd40310c5c?s=96&d=mm&r=g\",\"caption\":\"Kamini Jagtiani\"},\"description\":\"Kamini Jagtiani is a Senior Engineering Manager for the Query Team at Couchbase R&amp;D. Before Couchbase, Kamini was 7 years at Futurewei as Kernel Architect\/Manager and 13 years at IBM Informix as Software Engineer. Kamini has a Bachelors's degree in Computer Science and Engineering from Bombay University, India and holds 5 US patents.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/kaminijagtiani\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Use cases and Best Practices for Distributed Transactions through N1QL - The Couchbase Blog","description":"Casos de uso t\u00edpicos e pr\u00e1ticas recomendadas para usar as transa\u00e7\u00f5es distribu\u00eddas rec\u00e9m-introduzidas por meio do N1QL no Couhbase: o que fazer e o que evitar fazer?","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\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/","og_locale":"pt_BR","og_type":"article","og_title":"Use cases and Best Practices for Distributed Transactions through N1QL","og_description":"Typical use cases and Best Practices for using the newly introduced distributed transactions through N1QL in Couhbase!What to do and what to avoid doing!?","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/","og_site_name":"The Couchbase Blog","article_published_time":"2021-02-24T12:24:41+00:00","article_modified_time":"2025-06-14T06:42:26+00:00","og_image":[{"width":3359,"height":1565,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/Screen-Shot-2021-01-31-at-12.46.45-AM.png","type":"image\/png"}],"author":"Kamini Jagtiani","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Kamini Jagtiani","Est. reading time":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/"},"author":{"name":"Kamini Jagtiani","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/f99c5767a877147f9cf658230bc2473b"},"headline":"Use cases and Best Practices for Distributed Transactions through N1QL","datePublished":"2021-02-24T12:24:41+00:00","dateModified":"2025-06-14T06:42:26+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/"},"wordCount":1464,"commentCount":1,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/Screen-Shot-2021-01-31-at-12.46.45-AM.png","keywords":["ACID transactions","distributed transactions","NoSQL Database","transactions"],"articleSection":["Best Practices and Tutorials","Couchbase Capella","Couchbase Server","SQL++ \/ N1QL Query","Transactions"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/","url":"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/","name":"Use cases and Best Practices for Distributed Transactions through N1QL - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/Screen-Shot-2021-01-31-at-12.46.45-AM.png","datePublished":"2021-02-24T12:24:41+00:00","dateModified":"2025-06-14T06:42:26+00:00","description":"Casos de uso t\u00edpicos e pr\u00e1ticas recomendadas para usar as transa\u00e7\u00f5es distribu\u00eddas rec\u00e9m-introduzidas por meio do N1QL no Couhbase: o que fazer e o que evitar fazer?","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/Screen-Shot-2021-01-31-at-12.46.45-AM.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/01\/Screen-Shot-2021-01-31-at-12.46.45-AM.png","width":3359,"height":1565},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Use cases and Best Practices for Distributed Transactions through N1QL"}]},{"@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\/f99c5767a877147f9cf658230bc2473b","name":"Kamini Jagtiani","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/257695296726c224fc7f0e85b30c9129","url":"https:\/\/secure.gravatar.com\/avatar\/546f9f69203064f77430f14922d59be33e3f0ea674078a793fc813dd40310c5c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/546f9f69203064f77430f14922d59be33e3f0ea674078a793fc813dd40310c5c?s=96&d=mm&r=g","caption":"Kamini Jagtiani"},"description":"Kamini Jagtiani \u00e9 gerente s\u00eanior de engenharia da equipe de consultas da Couchbase R&amp;D. Antes da Couchbase, Kamini trabalhou 7 anos na Futurewei como arquiteto\/gerente de kernel e 13 anos na IBM Informix como engenheiro de software. Kamini \u00e9 bacharel em Ci\u00eancia da Computa\u00e7\u00e3o e Engenharia pela Universidade de Bombay, na \u00cdndia, e possui 5 patentes nos EUA.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/kaminijagtiani\/"}]}},"authors":[{"term_id":9099,"user_id":50908,"is_guest":0,"slug":"kaminijagtiani","display_name":"Kamini Jagtiani","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/546f9f69203064f77430f14922d59be33e3f0ea674078a793fc813dd40310c5c?s=96&d=mm&r=g","author_category":"","last_name":"Jagtiani","first_name":"Kamini","job_title":"","user_url":"","description":"Kamini Jagtiani \u00e9 gerente s\u00eanior de engenharia da equipe de consultas da Couchbase R&amp;D. Antes da Couchbase, Kamini trabalhou 7 anos na Futurewei como arquiteto\/gerente de kernel e 13 anos na IBM Informix como engenheiro de software. Kamini \u00e9 bacharel em Ci\u00eancia da Computa\u00e7\u00e3o e Engenharia pela Universidade de Bombay, na \u00cdndia, e possui 5 patentes nos EUA."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/10528","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\/50908"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=10528"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/10528\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/10545"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=10528"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=10528"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=10528"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=10528"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}