{"id":9439,"date":"2020-10-14T12:45:47","date_gmt":"2020-10-14T19:45:47","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=9439"},"modified":"2025-06-13T18:44:03","modified_gmt":"2025-06-14T01:44:03","slug":"transactions-n1ql-couchbase-distributed-nosql","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/transactions-n1ql-couchbase-distributed-nosql\/","title":{"rendered":"Transacciones N1QL : El\u00e1sticas, Escalables y Distribuidas"},"content":{"rendered":"<blockquote><p><span style=\"font-weight: 400;color: #0000ff\">SQL es el \u00fanico lenguaje del siglo XXII disponible actualmente para los desarrolladores.<\/span><\/p><\/blockquote>\n<p><strong>RESUMEN<\/strong><\/p>\n<p><span style=\"font-weight: 400\">En los sistemas de bases de datos relacionales, SQL es m\u00e1s que un lenguaje de consulta declarativo. Incluye el lenguaje procedimental (T-SQL, PL\/SQL, etc.) y define las transacciones y su sem\u00e1ntica.  SQL como lenguaje de consulta ha sido <\/span><span style=\"font-weight: 400\">irrazonablemente eficaz incluso en <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/es\/the-unreasonable-effectiveness-of-sql-in-nosql-databases\/\"><span style=\"font-weight: 400\">Sistemas de bases de datos NoSQL<\/span><\/a><span style=\"font-weight: 400\">. Sin embargo, pocos sistemas de bases de datos NoSQL soportan transacciones.  Los que las soportan vienen con una larga lista de limitaciones y\/o son incapaces de soportar operaciones SQL dentro de la transacci\u00f3n.  Introducimos y explicamos las transacciones en Couchbase N1QL: SQL para JSON.  Las transacciones N1QL son multi-todo: multi-documento, multi-bucket, multi-alcance, multi-colecci\u00f3n, y multi-DML-statement.<\/span><\/p>\n<p>N1QL Transactions est\u00e1 disponible con Couchbase 7.0 Beta. Puede descargarlo aqu\u00ed: <a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/\">https:\/\/www.couchbase.com\/downloads<\/a>. Consulte la documentaci\u00f3n <a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/introduction\/whats-new.html\">aqu\u00ed<\/a>.<\/p>\n<p><strong>INTRODUCCI\u00d3N<\/strong><\/p>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/10\/Screen-Shot-2020-10-13-at-5.46.18-PM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-9442\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/10\/Screen-Shot-2020-10-13-at-5.46.18-PM-300x166.png\" alt=\"\" width=\"661\" height=\"366\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/Screen-Shot-2020-10-13-at-5.46.18-PM-300x166.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/Screen-Shot-2020-10-13-at-5.46.18-PM-1024x565.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/Screen-Shot-2020-10-13-at-5.46.18-PM-768x424.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/Screen-Shot-2020-10-13-at-5.46.18-PM-20x11.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/Screen-Shot-2020-10-13-at-5.46.18-PM-1320x729.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/Screen-Shot-2020-10-13-at-5.46.18-PM.png 1348w\" sizes=\"auto, (max-width: 661px) 100vw, 661px\" \/><\/a><a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/index.html\"><span style=\"font-weight: 400\">N1QL<\/span><\/a><span style=\"font-weight: 400\"> es<\/span><span style=\"font-weight: 400\">\u00a0un lenguaje declarativo para manipular JSON. Couchbase almacena todos los documentos en el servicio de datos.  El servicio de consulta orquesta el <\/span><a href=\"https:\/\/www.couchbase.com\/blog\/es\/n1ql-query-basic-order-of-execution\/\"><span style=\"font-weight: 400\">ejecuci\u00f3n de consultas<\/span><\/a><span style=\"font-weight: 400\"> optimizar la consulta, crear un plan de ejecuci\u00f3n y, a continuaci\u00f3n, ejecutarla utilizando datos, indexaci\u00f3n y FTS.  El sitio <a href=\"https:\/\/docs.couchbase.com\/server\/current\/sdk\/overview.html\">SDK de Couchbase<\/a> y el protocolo de interacci\u00f3n de consultas se construye v\u00eda REST sobre HTTP\/S.   Las sentencias DML de N1QL incluyen <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/selectintro.html\">SELECCIONE<\/a>, <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/insert.html\">INSERTAR<\/a>, <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/update.html\">ACTUALIZACI\u00d3N<\/a>, <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/upsert.html\">UPSERT<\/a>, <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/delete.html\">BORRAR<\/a>y <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/merge.html\">FUSIONAR<\/a>.\u00a0\u00a0<\/span><\/p>\n<p><strong>TRANSACCIONES N1QL<\/strong><\/p>\n<p>Aqu\u00ed hay un ejemplo de transacciones en RDBMS y Couchbase N1QL.<\/p>\n<div class=\"responsive-table\">\n<table width=\"800\">\n<tbody>\n<tr>\n<td width=\"150\">\n<h6><span style=\"color: #ff0000\"><strong>Transacciones<\/strong><\/span><\/h6>\n<\/td>\n<td width=\"325\">\n<h6><span style=\"color: #0000ff\">Base de datos MySQL (las declaraciones son iguales\/similares en Oracle, SQL Server, Informix y DB2)<\/span><\/h6>\n<\/td>\n<td width=\"325\">\n<h6><span style=\"color: #ff0000\"><strong>Base de datos Couchbase (Cheshire-Cat)<\/strong><\/span><\/h6>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"150\">\n<h6>Insertar datos. Tuplas en MySQL, documentos JSON en Couchbase<\/h6>\n<\/td>\n<td width=\"325\">\n<h6>INSERT INTO cliente(cid, nombre, saldo) VALUES(4872, \"Juan P\u00e9rez\", 724,23);<\/h6>\n<h6>INSERT INTO cliente(cid, nombre, saldo) VALUES(1924, \"Bob Stanton\", 2735.48);<\/h6>\n<\/td>\n<td width=\"325\">\n<h6>INSERT INTO cliente<br \/>\nVALUES(\"cx4872\", {\"cid\": 4872, \"name\": \"John Doe\", \"balance\":724.23});<\/h6>\n<h6>INSERT INTO cliente<br \/>\nVALUES(\"cx1924\", {\"cid\": 1924, \"name\": \"Bob Stanton\", \"balance\":2735.48});<\/h6>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"150\">\n<h6>Transacci\u00f3n simple, d\u00e9bito y cr\u00e9dito. Las selecciones intermedias tienen que leer sus propias actualizaciones (RYOW)<\/h6>\n<\/td>\n<td width=\"325\">\n<h6><strong>INICIAR TRANSACCI\u00d3N;<\/strong><\/h6>\n<h6>UPDATE cliente SET saldo = saldo + 100 WHERE cid = 4872;<\/h6>\n<h6>SELECT cid, name, balance from cliente;<\/h6>\n<h6>UPDATE customer SET balance = balance - 100 WHERE cid = 1924;<\/h6>\n<h6>SELECT cid, name, balance from cliente;<\/h6>\n<h6><strong>COMPROMETERSE ;<\/strong><\/h6>\n<\/td>\n<td width=\"325\">\n<h6><strong>INICIAR TRANSACCI\u00d3N;<\/strong><\/h6>\n<h6>UPDATE cliente SET saldo = saldo + 100 WHERE cid = 4872;<\/h6>\n<h6>SELECT cid, name, balance from cliente;<\/h6>\n<h6>UPDATE customer SET balance = balance - 100 WHERE cid = 1924;<\/h6>\n<h6>SELECT cid, name, balance from cliente;<\/h6>\n<h6><strong>COMPROMETERSE ;<\/strong><\/h6>\n<\/td>\n<\/tr>\n<tr>\n<td width=\"150\">\n<h6>La segunda transacci\u00f3n con rollback parcial.<\/h6>\n<\/td>\n<td width=\"325\">\n<h6><strong>INICIAR TRANSACCI\u00d3N;<\/strong><\/h6>\n<h6>UPDATE cliente SET saldo = saldo + 100 WHERE cid = 4872;<\/h6>\n<h6>SELECT cid, name, balance from cliente;<\/h6>\n<h6><strong>SAVEPOINT s1;<\/strong><\/h6>\n<h6>UPDATE customer SET balance = balance - 100 WHERE cid = 1924;<\/h6>\n<h6>SELECT cid, name, balance from cliente;<\/h6>\n<h6><strong>ROLLBACK TRABAJO A PUNTO GUARDADO s1;<\/strong><\/h6>\n<h6>SELECT cid, name, balance from cliente;<\/h6>\n<h6><strong>COMPROMETERSE ;<\/strong><\/h6>\n<\/td>\n<td width=\"325\">\n<h6><strong>INICIAR TRANSACCI\u00d3N;<\/strong><\/h6>\n<h6>UPDATE cliente SET saldo = saldo + 100 WHERE cid = 4872;<\/h6>\n<h6>SELECT cid, name, balance from cliente;<\/h6>\n<h6><strong>SAVEPOINT s1;<\/strong><\/h6>\n<h6>UPDATE customer SET balance = balance - 100 WHERE cid = 1924;<\/h6>\n<h6>SELECT cid, name, balance from cliente;<\/h6>\n<h6><strong>ROLLBACK TRABAJO A PUNTO GUARDADO s1;<\/strong><\/h6>\n<h6>SELECT cid, name, balance from cliente;<\/h6>\n<h6><strong>COMPROMETERSE ;<\/strong><\/h6>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<blockquote><p><span style=\"color: #0000ff\">Si no ve mucha diferencia, es porque no la hay.\u00a0<\/span><\/p><\/blockquote>\n<p><strong>DECLARACIONES DE TRANSACCIONES N1QL<\/strong><\/p>\n<p>Transacciones N1QL un conjunto de transacciones que incluyen cualquiera de las sentencias DML en todos los formularios: <span style=\"color: #0000ff\">sin restricciones<\/span>. La protecci\u00f3n transaccional se emite a partir de nuevas declaraciones: <span style=\"color: #0000ff\">INICIO, COMMIT, ROLLBACK, SAVEPOINT<\/span>.<\/p>\n<h6><strong>INICIAR TRANSACCI\u00d3N (igual que INICIAR TRABAJO)<\/strong><\/h6>\n<p>Esta sentencia inicia una nueva transacci\u00f3n, asigna un nuevo ID de transacci\u00f3n, y devuelve el ID de transacci\u00f3n a la persona que llama. Hay dos reglas que los SDKs, herramientas (por ejemplo, CBQ shell) siguen para ejecutar con \u00e9xito el resto de la transacci\u00f3n.<\/p>\n<ol>\n<li>Env\u00ede este ID de transacci\u00f3n como par\u00e1metro a cada sentencia subsiguiente dentro de la transacci\u00f3n.  As\u00ed es como el servicio de consulta sabe que la sentencia debe ejecutarse como parte de una transacci\u00f3n concreta.<\/li>\n<li>Couchbase puede tener m\u00faltiples nodos de servicio de consulta, pero una \u00fanica transacci\u00f3n se ejecuta en un \u00fanico nodo de consulta. Puedes iniciar una nueva transacci\u00f3n en CUALQUIER NODO DE CONSULTA. Sin embargo, el resto de las sentencias PARA ESA \u00daNICA TRANSACCI\u00d3N deben ser enviadas al MISMO nodo de consulta.<\/li>\n<\/ol>\n<h6><strong>COMPROMETER TRANSACCI\u00d3N o COMPROMETER TRABAJO;<\/strong><\/h6>\n<p>Esto confirma todos los cambios de la transacci\u00f3n en el almac\u00e9n de datos. Este es un commit distribuido de la transacci\u00f3n en el almac\u00e9n de datos clave-valor de Couchbase.  El commit soporta todos los <a href=\"https:\/\/docs.couchbase.com\/java-sdk\/current\/concept-docs\/durability-replication-failure-considerations.html\">Durabilidad de Couchbase<\/a> opciones. Esto sigue siendo un sistema distribuido - al igual que la astronom\u00eda, las cosas raras ocurren a menudo. Ante cualquier fallo, la transacci\u00f3n completa se retrocede autom\u00e1ticamente y la aplicaci\u00f3n necesita reintentar la transacci\u00f3n. Los fallos pueden ocurrir por varias razones: fallo de red, fallo de nodo, nodo sobrecargado, y conflicto de escritura.  Al igual que los WRITEs directos de Couchbase son optimistas y los fallos pueden ocurrir debido a escrituras concurrentes resultando en <a href=\"https:\/\/docs.couchbase.com\/java-sdk\/current\/howtos\/kv-operations.html#retrying-on-cas-failures\">Conflictos CAS<\/a>Las transacciones N1QL tambi\u00e9n pueden fallar debido a conflictos de escritura. Implementamos una forma de <a href=\"https:\/\/en.wikipedia.org\/wiki\/Optimistic_concurrency_control\">concurrencia optimista<\/a> enfoque de las transacciones.<\/p>\n<h6><strong>ROLLBACK TRANSACTION o ROLLBACK WORK;<\/strong><\/h6>\n<p>En un rollback emitido por la aplicaci\u00f3n, todas las modificaciones realizadas dentro de la transacci\u00f3n son revertidas.<\/p>\n<p>Como has visto en los ejemplos anteriores, N1QL tambi\u00e9n admite <strong>puntos de guardado<\/strong> y retrocesos a los puntos de guardado dentro de la transacci\u00f3n.  Desde el punto de vista de la aplicaci\u00f3n, funcionan igual que sus hom\u00f3logos RDBMS.<\/p>\n<p><strong>FUNCIONES TRANSACCIONALES<\/strong><\/p>\n<p>La transacci\u00f3n es algo m\u00e1s que las declaraciones: se trata de la sem\u00e1ntica y las garant\u00edas.  De ah\u00ed el <a href=\"https:\/\/en.wikipedia.org\/wiki\/ACID\">\u00c1CIDO<\/a> definici\u00f3n. Hablamos de atomicidad antes wrt a COMMIT.  Hablemos un poco m\u00e1s sobre esto.<\/p>\n<p><strong>ATOMICIDAD\u00a0<\/strong>tanto para toda la transacci\u00f3n como para cada sentencia.  Las sentencias DML retroceder\u00e1n at\u00f3micamente ante cualquier fallo, pero la transacci\u00f3n en s\u00ed est\u00e1 abierta y puede continuar. Un ejemplo de fallo es un conflicto de clave de documento en la inserci\u00f3n.<\/p>\n<p><strong>CONSISTENCIA<\/strong> asegura que las restricciones se aplican de forma consistente para cada sentencia. La \u00fanica restricci\u00f3n en Couchbase es la restricci\u00f3n \u00fanica en la clave de documento.  N1QL comprueba la preexistencia de cada una de las claves insertadas y retrocede la sentencia ante cualquier conflicto.  Recuerda que usamos control de concurrencia optimista.  Esto significa que, a\u00fan despu\u00e9s de que el INSERT es exitoso, la etapa de commit puede encontrarse con un conflicto de escritura porque alguna otra sesi\u00f3n pudo haber insertado entre el insert y el commit.   Tendr\u00e1s que reintentar la transacci\u00f3n en tales fallos.<\/p>\n<p><strong>AISLAMIENTO<\/strong><\/p>\n<p>Soportamos el nivel de aislamiento COMMITTED READ. Todos los datos que se leen y eval\u00faan son datos comprometidos en el \u00edndice y el almac\u00e9n de datos. Por defecto, utilizamos el estricto <a href=\"https:\/\/docs.couchbase.com\/server\/current\/settings\/query-settings.html#section_nnj_sjk_k1b\">solicitud_plus<\/a> coherencia en las lecturas del \u00edndice.  Esto significa que, para un predicado determinado, utilizamos los datos m\u00e1s recientes del \u00edndice para calificar los documentos a seleccionar\/actualizar\/borrar.  A continuaci\u00f3n, vamos un paso m\u00e1s all\u00e1 para recuperar los documentos del almac\u00e9n KV y volver a aplicar los predicados para garantizar que se califica y actualiza la \u00faltima versi\u00f3n confirmada del documento.<\/p>\n<p>Si el rendimiento no fuera una consideraci\u00f3n, todo el mundo habr\u00eda utilizado transacciones serializables ;-) Puedes cambiar la consistencia del escaneo a <a href=\"https:\/\/docs.couchbase.com\/server\/current\/settings\/query-settings.html#section_nnj_sjk_k1b\">sin l\u00edmites<\/a> para mejorar el rendimiento de la exploraci\u00f3n de \u00edndices.<\/p>\n<p><strong>DURABILIDAD<\/strong><\/p>\n<p>N1QL es compatible con todos los <a href=\"https:\/\/docs.couchbase.com\/server\/current\/learn\/data\/durability.html\">opciones de durabilidad<\/a> y funciones con el almac\u00e9n de datos Couchbase para garantizar la durabilidad en nuestra base de datos distribuida.<\/p>\n<p><strong>CONCURRENCIA<\/strong><a href=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/10\/Screen-Shot-2020-10-13-at-6.58.35-PM.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-9445\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/10\/Screen-Shot-2020-10-13-at-6.58.35-PM-300x74.png\" alt=\"\" width=\"876\" height=\"216\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/Screen-Shot-2020-10-13-at-6.58.35-PM-300x74.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/Screen-Shot-2020-10-13-at-6.58.35-PM-1024x251.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/Screen-Shot-2020-10-13-at-6.58.35-PM-768x188.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/Screen-Shot-2020-10-13-at-6.58.35-PM-20x5.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/Screen-Shot-2020-10-13-at-6.58.35-PM.png 1616w\" sizes=\"auto, (max-width: 876px) 100vw, 876px\" \/><\/a>A grandes rasgos, las transacciones de bases de datos utilizan m\u00e9todos pesimistas u optimistas. <a href=\"https:\/\/en.wikipedia.org\/wiki\/Concurrency_control\">control de concurrencia<\/a>. Las bases de datos tradicionales de nodo \u00fanico siguen el control de concurrencia pesimista para evitar conflictos.  Este enfoque tambi\u00e9n se aplica a algunas de las implementaciones multinodo como Oracle RAC, DB2 Sysplex. Las implementaciones multinodo son posibles, pero requieren un costoso Infiniband, hardware personalizado, etc.<\/p>\n<p>Control de concurrencia optimista versiona cada unidad base de tupla (filas en rdbms, documentos en Couchbase), recuerda la versi\u00f3n que leen para modificar y comprueba si la versi\u00f3n ha cambiado durante la escritura.  Si efectivamente hay un conflicto, hay que volver a intentar toda la transacci\u00f3n. La ventaja de este enfoque es que, en una aplicaci\u00f3n bien dise\u00f1ada, deber\u00eda haber pocos conflictos: no sacar\u00e1s dinero y transferir\u00e1s dinero entre cuentas en el mismo nanosegundo.  En las raras ocasiones en que s\u00ed los haya, se tolera el reintento.<\/p>\n<h6><strong>Concurrencia en el servicio de consulta N1QL<\/strong><\/h6>\n<p>Couchbase N1QL usa control de concurrencia optimista. Cada transacci\u00f3n lee los documentos que necesita actualizar, los actualiza y guarda los documentos actualizados en su directorio privado. <strong>por transacci\u00f3n<\/strong> cach\u00e9. Cuando se emite una sentencia posterior, el servicio de consulta es consciente de los documentos actualizados dentro de las transacciones y utiliza esa versi\u00f3n en lugar de la versi\u00f3n anterior reflejada en el \u00edndice\/datos.  As\u00ed es como se proporciona el soporte de LECTURA-TU-POSICI\u00d3N-ESCRITURA.  Esto se modela para que todas las sentencias DML, todas las operaciones (select, join, project, aggregate, nest, unnesst, etc) obtengan este beneficio RYOW proporcionando una caracter\u00edstica consistente y crucial de la transacci\u00f3n. Incluso mientras la aplicaci\u00f3n est\u00e1 realizando transacciones (realizando tanto lecturas como escrituras), dentro de la transacci\u00f3n estamos leyendo y almacenando en cach\u00e9 las actualizaciones hasta el momento del commit. Esta es la fase READ de la transacci\u00f3n, y debido a este enfoque, no hay coordinaci\u00f3n entre m\u00faltiples transacciones o m\u00faltiples nodos de consulta dentro de una transacci\u00f3n hasta el commit (fase WRITE). Esto asegura el rendimiento y la escalabilidad de las transacciones distribuidas en Couchbase.  Y, antes de que preguntes, todo esto funciona concurrentemente con <a href=\"https:\/\/docs.couchbase.com\/java-sdk\/current\/howtos\/distributed-acid-transactions-from-the-sdk.html\">Transacciones distribuidas Couchbase<\/a> nosotros <a href=\"https:\/\/connectonline.couchbase.com\/forum\/t\/distributed-acid-transactions-in-couchbase\/239\">lanzado en 6.5<\/a>.<\/p>\n<blockquote><p><span style=\"color: #0000ff\">La coordinaci\u00f3n es la perdici\u00f3n de los sistemas escalables - <a style=\"color: #0000ff\" href=\"https:\/\/www.youtube.com\/watch?v=msRzhMVc4R8\">Peter Bailis<\/a><\/span><\/p><\/blockquote>\n<p><iframe loading=\"lazy\" title=\"&quot;Cuando &quot;lo peor&quot; es lo mejor (en sistemas distribuidos)&quot; por Peter Bailis\" width=\"900\" height=\"506\" src=\"https:\/\/www.youtube.com\/embed\/ZGIAypUUwoQ?feature=oembed&#038;enablejsapi=1&#038;origin=https:\/\/www.couchbase.com\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe><\/p>\n<p><strong>PR\u00d3XIMOS PASOS<\/strong><\/p>\n<p>Acabamos de anunciar que Couchbase 7.0 Beta estar\u00e1 en Noviembre de 2020. Permanezca atento a los detalles.<\/p>\n<p>Este es un breve resumen de lo que viene con Couchbase Transactions.  En la pr\u00f3xima serie de art\u00edculos, profundizaremos en la implementaci\u00f3n, uso, soporte SDK, Lambda Transactions, soporte Spring, etc, y m\u00e1s.<\/p>\n<p><strong>AGRADECIMIENTOS<\/strong><\/p>\n<p>Estoy feliz de anunciar las transacciones N1QL aqu\u00ed.  Este es el resultado de un intenso trabajo y colaboraci\u00f3n en Couchbase query, SDK, y los equipos de QE para dise\u00f1ar e implementar.  Gracias.<\/p>","protected":false},"excerpt":{"rendered":"<p>SQL is the only 22nd-century language available for developers today. ABSTRACT In relational database systems, SQL is more than a declarative query language. It includes procedural language (T-SQL, PL\/SQL, etc) and defines transactions and its semantics.\u00a0 SQL as a query [&hellip;]<\/p>\n","protected":false},"author":55,"featured_media":9866,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,2453,1812,2396],"tags":[1706,8191,1725,2221],"ppma_author":[8929],"class_list":["post-9439","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-global-secondary-index","category-n1ql-query","category-transactions","tag-concurrency","tag-distributed-transactions","tag-nosql-database","tag-transactions"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>N1QL Transactions : Elastic, Scalable, and Distributed<\/title>\n<meta name=\"description\" content=\"N1QL transactions are multi-document, multi-bucket, multi-scope, multi collection, and multi-DML-statement. Read on to learn more!\" \/>\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\/transactions-n1ql-couchbase-distributed-nosql\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"N1QL Transactions : Elastic, Scalable, and Distributed\" \/>\n<meta property=\"og:description\" content=\"N1QL transactions are multi-document, multi-bucket, multi-scope, multi collection, and multi-DML-statement. Read on to learn more!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/transactions-n1ql-couchbase-distributed-nosql\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-10-14T19:45:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T01:44:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/N1QL-Transactions-An-Elastic-and-Scalable-Distributed-Transactions.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"627\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Keshav Murthy\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/N1QL-Transactions-An-Elastic-and-Scalable-Distributed-Transactions.png\" \/>\n<meta name=\"twitter:creator\" content=\"@rkeshavmurthy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Keshav Murthy\" \/>\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\\\/transactions-n1ql-couchbase-distributed-nosql\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/transactions-n1ql-couchbase-distributed-nosql\\\/\"},\"author\":{\"name\":\"Keshav Murthy\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/c261644262bf98e146372fe647682636\"},\"headline\":\"N1QL Transactions : Elastic, Scalable, and Distributed\",\"datePublished\":\"2020-10-14T19:45:47+00:00\",\"dateModified\":\"2025-06-14T01:44:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/transactions-n1ql-couchbase-distributed-nosql\\\/\"},\"wordCount\":1535,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/transactions-n1ql-couchbase-distributed-nosql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2020\\\/10\\\/Screen-Shot-2020-11-17-at-2.34.11-PM.png\",\"keywords\":[\"Concurrency\",\"distributed transactions\",\"NoSQL Database\",\"transactions\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Global Secondary Index\",\"SQL++ \\\/ N1QL Query\",\"Transactions\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/transactions-n1ql-couchbase-distributed-nosql\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/transactions-n1ql-couchbase-distributed-nosql\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/transactions-n1ql-couchbase-distributed-nosql\\\/\",\"name\":\"N1QL Transactions : Elastic, Scalable, and Distributed\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/transactions-n1ql-couchbase-distributed-nosql\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/transactions-n1ql-couchbase-distributed-nosql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2020\\\/10\\\/Screen-Shot-2020-11-17-at-2.34.11-PM.png\",\"datePublished\":\"2020-10-14T19:45:47+00:00\",\"dateModified\":\"2025-06-14T01:44:03+00:00\",\"description\":\"N1QL transactions are multi-document, multi-bucket, multi-scope, multi collection, and multi-DML-statement. Read on to learn more!\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/transactions-n1ql-couchbase-distributed-nosql\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/transactions-n1ql-couchbase-distributed-nosql\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/transactions-n1ql-couchbase-distributed-nosql\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2020\\\/10\\\/Screen-Shot-2020-11-17-at-2.34.11-PM.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2020\\\/10\\\/Screen-Shot-2020-11-17-at-2.34.11-PM.png\",\"width\":2256,\"height\":874},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/transactions-n1ql-couchbase-distributed-nosql\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"N1QL Transactions : Elastic, Scalable, and Distributed\"}]},{\"@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\\\/c261644262bf98e146372fe647682636\",\"name\":\"Keshav Murthy\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/af74df754db27152971d0aed2f323ead5a1f9fe5afd0209af91e12e784451224?s=96&d=mm&r=g4e51d72fc07c662aa791316deafffac4\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/af74df754db27152971d0aed2f323ead5a1f9fe5afd0209af91e12e784451224?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/af74df754db27152971d0aed2f323ead5a1f9fe5afd0209af91e12e784451224?s=96&d=mm&r=g\",\"caption\":\"Keshav Murthy\"},\"description\":\"Keshav Murthy is a Vice President at Couchbase R&amp;D. Previously, he was at MapR, IBM, Informix, Sybase, with more than 20 years of experience in database design &amp; development. He lead the SQL and NoSQL R&amp;D team at IBM Informix. He has received two President's Club awards at Couchbase, two Outstanding Technical Achievement Awards at IBM. Keshav has a bachelor's degree in Computer Science and Engineering from the University of Mysore, India, and has received twenty four US patents.\",\"sameAs\":[\"https:\\\/\\\/blog.planetnosql.com\\\/\",\"https:\\\/\\\/x.com\\\/rkeshavmurthy\"],\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/author\\\/keshav-murthy\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Transacciones N1QL : El\u00e1sticas, Escalables y Distribuidas","description":"Las transacciones N1QL son multi-documento, multi-bucket, multi-alcance, multi-colecci\u00f3n, y multi-DML-statement. \u00a1Sigue leyendo para saber m\u00e1s!","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\/transactions-n1ql-couchbase-distributed-nosql\/","og_locale":"es_MX","og_type":"article","og_title":"N1QL Transactions : Elastic, Scalable, and Distributed","og_description":"N1QL transactions are multi-document, multi-bucket, multi-scope, multi collection, and multi-DML-statement. Read on to learn more!","og_url":"https:\/\/www.couchbase.com\/blog\/es\/transactions-n1ql-couchbase-distributed-nosql\/","og_site_name":"The Couchbase Blog","article_published_time":"2020-10-14T19:45:47+00:00","article_modified_time":"2025-06-14T01:44:03+00:00","og_image":[{"width":1200,"height":627,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/N1QL-Transactions-An-Elastic-and-Scalable-Distributed-Transactions.png","type":"image\/png"}],"author":"Keshav Murthy","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/N1QL-Transactions-An-Elastic-and-Scalable-Distributed-Transactions.png","twitter_creator":"@rkeshavmurthy","twitter_misc":{"Written by":"Keshav Murthy","Est. reading time":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/transactions-n1ql-couchbase-distributed-nosql\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/transactions-n1ql-couchbase-distributed-nosql\/"},"author":{"name":"Keshav Murthy","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c261644262bf98e146372fe647682636"},"headline":"N1QL Transactions : Elastic, Scalable, and Distributed","datePublished":"2020-10-14T19:45:47+00:00","dateModified":"2025-06-14T01:44:03+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/transactions-n1ql-couchbase-distributed-nosql\/"},"wordCount":1535,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/transactions-n1ql-couchbase-distributed-nosql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/Screen-Shot-2020-11-17-at-2.34.11-PM.png","keywords":["Concurrency","distributed transactions","NoSQL Database","transactions"],"articleSection":["Best Practices and Tutorials","Global Secondary Index","SQL++ \/ N1QL Query","Transactions"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/transactions-n1ql-couchbase-distributed-nosql\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/transactions-n1ql-couchbase-distributed-nosql\/","url":"https:\/\/www.couchbase.com\/blog\/transactions-n1ql-couchbase-distributed-nosql\/","name":"Transacciones N1QL : El\u00e1sticas, Escalables y Distribuidas","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/transactions-n1ql-couchbase-distributed-nosql\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/transactions-n1ql-couchbase-distributed-nosql\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/Screen-Shot-2020-11-17-at-2.34.11-PM.png","datePublished":"2020-10-14T19:45:47+00:00","dateModified":"2025-06-14T01:44:03+00:00","description":"Las transacciones N1QL son multi-documento, multi-bucket, multi-alcance, multi-colecci\u00f3n, y multi-DML-statement. \u00a1Sigue leyendo para saber m\u00e1s!","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/transactions-n1ql-couchbase-distributed-nosql\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/transactions-n1ql-couchbase-distributed-nosql\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/transactions-n1ql-couchbase-distributed-nosql\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/Screen-Shot-2020-11-17-at-2.34.11-PM.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/10\/Screen-Shot-2020-11-17-at-2.34.11-PM.png","width":2256,"height":874},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/transactions-n1ql-couchbase-distributed-nosql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"N1QL Transactions : Elastic, Scalable, and Distributed"}]},{"@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\/c261644262bf98e146372fe647682636","name":"Keshav Murthy","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/af74df754db27152971d0aed2f323ead5a1f9fe5afd0209af91e12e784451224?s=96&d=mm&r=g4e51d72fc07c662aa791316deafffac4","url":"https:\/\/secure.gravatar.com\/avatar\/af74df754db27152971d0aed2f323ead5a1f9fe5afd0209af91e12e784451224?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/af74df754db27152971d0aed2f323ead5a1f9fe5afd0209af91e12e784451224?s=96&d=mm&r=g","caption":"Keshav Murthy"},"description":"Keshav Murthy es Vicepresidente de Couchbase R&amp;D. Anteriormente, estuvo en MapR, IBM, Informix, Sybase, con m\u00e1s de 20 a\u00f1os de experiencia en dise\u00f1o y desarrollo de bases de datos. Dirigi\u00f3 el equipo de I+D de SQL y NoSQL en IBM Informix. Ha recibido dos premios President's Club en Couchbase y dos premios Outstanding Technical Achievement en IBM. Keshav es licenciado en Inform\u00e1tica e Ingenier\u00eda por la Universidad de Mysore, India, y ha recibido veinticuatro patentes estadounidenses.","sameAs":["https:\/\/blog.planetnosql.com\/","https:\/\/x.com\/rkeshavmurthy"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/keshav-murthy\/"}]}},"acf":[],"authors":[{"term_id":8929,"user_id":55,"is_guest":0,"slug":"keshav-murthy","display_name":"Keshav Murthy","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/af74df754db27152971d0aed2f323ead5a1f9fe5afd0209af91e12e784451224?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/9439","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\/55"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=9439"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/9439\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/9866"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=9439"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=9439"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=9439"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=9439"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}