{"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\/es\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/","title":{"rendered":"Casos de uso y mejores pr\u00e1cticas para transacciones distribuidas a trav\u00e9s de N1QL"},"content":{"rendered":"<p><b>\u00bfCouchbase admite transacciones?<\/b><\/p>\n<p><b>\u00a1S\u00ed! <\/b><span style=\"font-weight: 400\">Con 6.5, introdujimos el <a href=\"https:\/\/www.couchbase.com\/blog\/es\/transactions\/\">Transacci\u00f3n ACID<\/a> en Couchbase a trav\u00e9s de los SDK. El 1<\/span><span style=\"font-weight: 400\">st<\/span><span style=\"font-weight: 400\"> La pregunta que nos hicieron en su momento los clientes que se enteraron fue:<\/span><\/p>\n<p><b><i>\u00bfEst\u00e1 disponible el soporte de transacciones a trav\u00e9s de N1QL?<\/i><\/b><\/p>\n<p><b>\u00a1S\u00ed! <\/b><span style=\"font-weight: 400\">Con 7.0, \u00a1hemos empezado a soportar transacciones a trav\u00e9s de N1QL tambi\u00e9n!<strong>Las transacciones N1QL son multi-todo. Multi-documentos que pueden abarcar m\u00faltiples colecciones de m\u00faltiples \u00e1mbitos dentro de m\u00faltiples buckets. Puede tener m\u00faltiples transacciones ejecut\u00e1ndose en un \u00fanico nodo de consulta y puede tener m\u00faltiples nodos de consulta. NO hay coordinador central, eliminando as\u00ed un \u00fanico punto de fallo o contenci\u00f3n y dando paso a una escalabilidad infinita.<\/strong><\/span><\/p>\n<p><b><i>\u00bfQu\u00e9 es N1QL? y \u00bfPor qu\u00e9 es tan importante para Couchbase?<\/i><\/b><\/p>\n<p><span style=\"font-weight: 400\">Al igual que SQL es para RDBMS, \u00a1N1QL es para 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\"> es un lenguaje declarativo casi id\u00e9ntico a SQL y se utiliza para insertar\/recuperar y manipular los datos almacenados en forma de documentos JSON.<\/span><span style=\"font-weight: 400\">M\u00e1s informaci\u00f3n sobre N1QL <\/span><a href=\"https:\/\/query-tutorial.couchbase.com\/tutorial\/#1\"><span style=\"font-weight: 400\">aqu\u00ed<\/span><\/a><span style=\"font-weight: 400\"> .<\/span><\/p>\n<p><b><i>Si N1QL es como SQL, \u00bfpor qu\u00e9 no ten\u00eda antes ACID?<\/i><\/b><\/p>\n<p><span style=\"font-weight: 400\">N1QL siempre tuvo ACID dentro de un solo documento. Lo que no ten\u00edamos antes de la versi\u00f3n 7.0 era soporte para transacciones multi-documento a trav\u00e9s de N1QL.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Bien, pensemos primero por qu\u00e9 mucha gente cree que necesita transacciones multidocumento. El primer principio del modelado relacional de datos es la normalizaci\u00f3n de los datos en todas las tablas. Esto significa que muchas operaciones comunes de bases de datos, como la creaci\u00f3n de cuentas, requieren actualizaciones at\u00f3micas a trav\u00e9s de muchas filas y columnas.<\/span><\/p>\n<p><span style=\"font-weight: 400\">En Couchbase, el modelo de datos es fundamentalmente diferente. El modelo de documento anima a los usuarios a almacenar datos relacionados juntos en un \u00fanico documento. N1QL siempre ha soportado transacciones ACID en un solo documento y, cuando se aprovecha el modelo de documento apropiadamente, muchas aplicaciones no necesitan garant\u00edas ACID a trav\u00e9s de m\u00faltiples documentos. Como se muestra a continuaci\u00f3n, los datos que necesitan ser almacenados en 3 tablas diferentes vinculadas por PK-FK, se almacenan en un \u00fanico documento en 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 ejemplo, a\u00f1adir un art\u00edculo a la cesta de la compra <\/span><span style=\"font-weight: 400\">no necesita transacciones en Couchbase, ya que s\u00f3lo se actualiza un \u00fanico documento.<\/span><\/p>\n<p><span style=\"font-weight: 400\">Sin embargo, las transacciones no son s\u00f3lo una casilla de verificaci\u00f3n. Las transacciones, como todas las caracter\u00edsticas de Couchbase, pretenden facilitar la vida de los desarrolladores. Las garant\u00edas ACID entre documentos simplifican la l\u00f3gica de aplicaci\u00f3n necesaria para satisfacer aplicaciones complejas.<\/span><\/p>\n<h4><b><i>\u00bfCu\u00e1les son los casos de uso de las transacciones multidocumento?<\/i><\/b><b><i>:<\/i><\/b><\/h4>\n<p><span style=\"font-weight: 400\">Existen casos de uso en los que es necesario aplicar garant\u00edas ACID transaccionales a un conjunto de operaciones que abarcan m\u00faltiples documentos.  Las aplicaciones de \"sistema de registro\" son la clase t\u00edpica de carga de trabajo en la que resultan \u00fatiles las transacciones multidocumento. Algunos ejemplos son:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Procesamiento de eventos de aplicaci\u00f3n cuando los usuarios realizan acciones que si se repiten pueden causar diferentes resultados, por lo que tienen que tener todos \u00e9xito o todos fracaso. Por ejemplo, el t\u00edpico cargo o abono bancario.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Registro de acciones personalizadas de la aplicaci\u00f3n -que no se pueden revertir ni siquiera en caso de fallo del sistema-, por ejemplo, cuando un usuario transfiere la propiedad de un coche o una casa, la escritura no debe tener \u00e9xito si el registro no lo es.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Relaciones de muchos a muchos donde los datos encajan de forma natural en objetos definidos - por ejemplo, Clientes, pedidos de clientes, productos y fabricantes. Para calcular el total de un pedido de cliente, es necesario recopilar los valores de cada tabla y sumarlos para cada cliente.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400\">\u00a0<\/span><\/p>\n<h4><b>Detalles sobre transacciones a trav\u00e9s de N1QL en Couchbase:<\/b><\/h4>\n<p><span style=\"font-weight: 400\">Vamos a sumergirnos en las transacciones N1QL con una simple transacci\u00f3n, d\u00e9bito y cr\u00e9dito. Los selectos tienen que leer sus propias actualizaciones (RYOW)<\/span><\/p>\n<p><b>INICIAR TRANSACCI\u00d3N;<\/b><\/p>\n<p><b>UPDATE cliente SET saldo = saldo - 100 WHERE cid = 4872;<\/b><\/p>\n<p><b>UPDATE cliente SET saldo = saldo + 100 WHERE cid = 1924;<\/b><\/p>\n<p><b>SELECT cid, name, balance from cliente where cid in [4872,1924];<\/b><\/p>\n<p><b>COMPROMETERSE ;<\/b><\/p>\n<p>Esta es la misma sintaxis que escribir\u00edas en MySQL. Esa es la belleza de N1QL.<\/p>\n<p><span style=\"font-weight: 400\">No tienes que aprender un nuevo lenguaje para usar Couchbase si ya est\u00e1s familiarizado con SQL.<\/span><\/p>\n<p><span style=\"font-weight: 400\">En el ejemplo anterior,<\/span><\/p>\n<p><span style=\"font-weight: 400\">Si ya est\u00e1 familiarizado con la arquitectura de Couchbase, entonces<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">START TRANSACTION ir\u00e1 a un nodo de consulta. El nodo de consulta asignar\u00e1 un id de transacci\u00f3n \u00fanico (txid) a esta transacci\u00f3n.<\/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\">A continuaci\u00f3n viene la sentencia de actualizaci\u00f3n. El nodo de consulta mirar\u00e1 la cl\u00e1usula where, seleccionar\u00e1 el \u00edndice apropiado que servir\u00e1 a la consulta, encontrar\u00e1 el id del documento, enviar\u00e1 el id del documento al almac\u00e9n de datos (KV) y recuperar\u00e1 el documento en el nodo de consulta y luego actualizar\u00e1 el saldo. Si esto no estuviera dentro de una transacci\u00f3n, se enviar\u00eda de vuelta al almac\u00e9n de datos inmediatamente. Pero como est\u00e1 dentro de la transacci\u00f3n, este documento se almacenar\u00e1 en la cach\u00e9 del nodo de consulta. Esta cach\u00e9 se denomina tabla delta. Tenemos 1 tabla delta por transacci\u00f3n y por colecci\u00f3n. Por eso necesitamos que todas las sentencias de una transacci\u00f3n lleguen al mismo nodo de consulta. Esta uni\u00f3n se hace con el txid proporcionado por START TRANSACTION.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Con la siguiente actualizaci\u00f3n, lo mismo, el nodo Query mirar\u00e1 la cl\u00e1usula where, seleccionar\u00e1 el \u00edndice apropiado que servir\u00e1 a la consulta, encontrar\u00e1 el id del documento, pero ahora en lugar de ir directamente a KV para obtener el documento, ya que hay una tabla delta, primero mirar\u00e1 en la tabla delta si este documento ya existe en la tabla delta. En este caso, no existe, as\u00ed que va a buscarlo a KV, actualiza el saldo y lo almacena en la tabla delta.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">A continuaci\u00f3n viene la sentencia select al nodo query. Nuevamente el nodo de consulta mirar\u00e1 la cl\u00e1usula where, seleccionar\u00e1 el \u00edndice apropiado que servir\u00e1 a la consulta, encontrar\u00e1 el id del documento. Ahora buscar\u00e1 los ids de los documentos en la tabla delta, los encontrar\u00e1 all\u00ed y enviar\u00e1 los campos proyectados de vuelta al 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\">Hasta ahora hemos le\u00eddo del almac\u00e9n de datos pero nunca hemos escrito en \u00e9l. S\u00f3lo hemos escrito en la cach\u00e9 del nodo de consulta. Y por lo tanto decimos que seguimos la concurrencia optimista. M\u00faltiples transacciones podr\u00edan estar operando en estos mismos documentos al mismo tiempo.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Ahora cuando la siguiente sentencia llegue al nodo Query \"COMMIT\", es cuando los documentos actualizados ir\u00e1n al nodo KV y utilizaremos el protocolo commit resaltado. <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-transactions-java-api\/.\/\"><span style=\"font-weight: 400\">aqu\u00ed<\/span><\/a><span style=\"font-weight: 400\"> para confirmar los cambios.\u00a0<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">En este punto, si hubiera varias transacciones actualizando los mismos documentos, una tendr\u00eda \u00e9xito y las dem\u00e1s retroceder\u00edan y tendr\u00edan que volver a intentarlo.<\/span><\/li>\n<\/ul>\n<h4><b><i>Mejores pr\u00e1cticas para transacciones N1QL :<\/i><\/b><\/h4>\n<h5><b>\u00bfCu\u00e1ndo se deben utilizar las transacciones N1QL?<\/b><\/h5>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Un ejemplo t\u00edpico es el de un cr\u00e9dito de d\u00e9bito o una reserva a\u00e9rea con varios tramos.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Si quieres asegurarte de que los cambios realizados no se revierten incluso en caso de ca\u00edda del sistema, como la transferencia de la titularidad de una casa\/coche.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Cuando la l\u00f3gica requerida abarca datos que no pueden fusionarse en un \u00fanico documento y requiere actualizaciones de varios documentos.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Normalmente, cargas de trabajo de muy corta duraci\u00f3n que implican peque\u00f1os conjuntos de resultados, sin agregados importantes.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Cuando pueda necesitar modificar\/leer los mismos documentos una y otra vez (con el apoyo de Read your own writes mediante el uso de tablas delta).<\/span><\/li>\n<\/ol>\n<h5><b><i>\u00bfQu\u00e9 debe evitar hacer al utilizar transacciones N1QL?<\/i><\/b><\/h5>\n<p><span style=\"font-weight: 400\">Incluso en un ejemplo tan sencillo como el anterior, probablemente pueda verlo:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">La tabla Delta (que es por transacci\u00f3n\/por colecci\u00f3n) crecer\u00e1 con cada mutaci\u00f3n. Si tiene una transacci\u00f3n con muchas mutaciones, el uso de memoria aumentar\u00e1. As\u00ed que la recomendaci\u00f3n es limitar el n\u00famero de mutaciones dentro de una transacci\u00f3n. Para cargas de tipo ETL, o actualizaciones masivas que necesiten garant\u00edas ACID hemos proporcionado otra opci\u00f3n de transacciones impl\u00edcitas. Puedes leer sobre ellas <\/span><a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/settings\/query-settings.html#tximplicit\"><span style=\"font-weight: 400\">aqu\u00ed<\/span><\/a><span style=\"font-weight: 400\">El ajuste \"memory-quota\" en el servicio de consulta puede controlar la cantidad de memoria consumida por las tablas delta.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Utilice las transacciones s\u00f3lo en documentos de menos de 10 MB de tama\u00f1o.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">No incluya <\/span><a href=\"https:\/\/en.wikipedia.org\/wiki\/Data_definition_language\"><span style=\"font-weight: 400\">Operaciones DDL<\/span><\/a><span style=\"font-weight: 400\"> dentro de transacciones N1QL. Cualquier operaci\u00f3n DDL dar\u00e1 lugar a un error.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Por defecto, el tiempo de espera es de 15s. Puede modificarse en funci\u00f3n del medio que utilice para utilizar las transacciones N1QL (shell cbq, UI, Java SDK o REST API).<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">El servicio de consulta fue dise\u00f1ado para proporcionar un alto rendimiento y baja latencia, los cuales pueden verse afectados por las transacciones. Utilice transacciones N1QL cuando sus casos de uso requieran transacciones.<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">Dado que utilizamos concurrencia optimista, tenemos que estar seguros de que la mayor parte de nuestra carga de trabajo es tal que m\u00faltiples transacciones no est\u00e1n modificando los mismos documentos al mismo tiempo. Porque en ese caso, una tendr\u00e1 \u00e9xito y las otras retroceder\u00e1n con errores \"CAS mismatch\" o \"Write write conflict\".<\/span><\/li>\n<li style=\"font-weight: 400\"><span style=\"font-weight: 400\">No deber\u00edamos modificar los mismos documentos utilizando transacciones y no transacciones al mismo tiempo.<\/span><\/li>\n<\/ol>\n<p>Entender c\u00f3mo funcionan las transacciones utilizando el <a href=\"https:\/\/transactions.couchbase.com\/\">Simulador de transacciones<\/a><\/p>\n<p><span style=\"font-weight: 400\">M\u00e1s informaci\u00f3n sobre la ayuda a las transacciones a trav\u00e9s de N1QL<\/span><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/es\/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\/es\/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 v25.7.1 (Yoast SEO v25.7) - 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\/es\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\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\/es\/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\":\"es\",\"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\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\",\"@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\/es\/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":"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!?","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\/es\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/","og_locale":"es_MX","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\/es\/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":"es","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":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/use-cases-and-best-practices-to-use-distributed-transactions-in-n1ql\/"]}]},{"@type":"ImageObject","inLanguage":"es","@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":"El blog de Couchbase","description":"Couchbase, la base de datos 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":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@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":"es","@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 es Gerente Senior de Ingenier\u00eda para el Equipo de Consultas en Couchbase R&amp;D. Antes de Couchbase, Kamini estuvo 7 a\u00f1os en Futurewei como Arquitecto\/Gerente de Kernel y 13 a\u00f1os en IBM Informix como Ingeniero de Software. Kamini es licenciada en Inform\u00e1tica e Ingenier\u00eda por la Universidad de Bombay (India) y posee 5 patentes estadounidenses.","url":"https:\/\/www.couchbase.com\/blog\/es\/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","first_name":"Kamini","last_name":"Jagtiani","user_url":"","author_category":"","description":"Kamini Jagtiani es Gerente Senior de Ingenier\u00eda para el Equipo de Consultas en Couchbase R&amp;D. Antes de Couchbase, Kamini estuvo 7 a\u00f1os en Futurewei como Arquitecto\/Gerente de Kernel y 13 a\u00f1os en IBM Informix como Ingeniero de Software. Kamini es licenciada en Inform\u00e1tica e Ingenier\u00eda por la Universidad de Bombay (India) y posee 5 patentes estadounidenses."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/10528","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/50908"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=10528"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/10528\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/10545"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=10528"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=10528"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=10528"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=10528"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}