{"id":12479,"date":"2021-12-21T08:00:29","date_gmt":"2021-12-21T16:00:29","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=12479"},"modified":"2025-06-13T22:40:20","modified_gmt":"2025-06-14T05:40:20","slug":"migrating-buckets-to-collections-scopes-via-eventing-part-2","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/","title":{"rendered":"Migraci\u00f3n de cubos a colecciones y \u00e1mbitos mediante eventos: Parte 2"},"content":{"rendered":"<h2>Migraci\u00f3n de cubos a colecciones y \u00e1mbitos mediante eventos: Parte 2<\/h2>\n<p>Una vez m\u00e1s (como ya hice en la primera parte) quiero destacar un excelente blog escrito por Shivani Gupta, <a href=\"https:\/\/www.couchbase.com\/blog\/es\/how-to-migrate-to-scopes-and-collections-in-couchbase-7-0\/\" target=\"_blank\" rel=\"noopener\">C\u00f3mo migrar a \u00e1mbitos y colecciones en Couchbase 7.0<\/a>que cubre en gran detalle otros m\u00e9todos para migrar documentos basados en buckets a Scopes y Collections en Couchbase.  Te animo a leer tambi\u00e9n sobre los m\u00faltiples m\u00e9todos no-Eventing que Shivani toca.<\/p>\n<blockquote><p><strong>Tanto si eres nuevo en Couchbase o<\/strong> veterinario experimentado, es probable que haya o\u00eddo hablar de los Scopes y Collections. Si est\u00e1s listo para probarlos, este art\u00edculo te ayuda a hacerlo realidad.<\/p>\n<p>Los \u00e1mbitos y las colecciones son una nueva funci\u00f3n introducida en <a href=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-server-7-0-release\/?ref=blog\" target=\"_blank\" rel=\"noopener\">Servidor Couchbase 7.0<\/a>\u00a0que te permite organizar l\u00f3gicamente los datos dentro de Couchbase. Para saber m\u00e1s,\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/es\/scopes-and-collections-for-modern-multi-tenant-applications-couchbase-7-0\/?ref=blog\" target=\"_blank\" rel=\"noopener\">lea esta introducci\u00f3n a \u00c1mbitos y colecciones<\/a>.<\/p>\n<p>Deber\u00edas aprovechar Scopes y Collections si quieres mapear tu RDBMS heredado a una base de datos de documentos o si est\u00e1s intentando consolidar cientos de microservicios y\/o tenants en un \u00fanico\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/capella\/\" target=\"_blank\" rel=\"noopener\">Couchbase<\/a>\u00a0(lo que se traduce en un coste total de propiedad mucho menor).<\/p><\/blockquote>\n<hr \/>\n<h2>Uso de eventos para la migraci\u00f3n de \u00e1mbitos y colecciones<\/h2>\n<p><span style=\"font-weight: 400\">En el art\u00edculo anterior (Parte 1), discut\u00ed la mec\u00e1nica de un m\u00e9todo de alto rendimiento para migrar desde una versi\u00f3n anterior de Couchbase a Scopes y Collections en Couchbase 7.0 basado en <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/eventing\/\">Eventos<\/a>.<\/span><\/p>\n<p><span style=\"font-weight: 400\">S\u00f3lo se necesita el Servicio de Datos (o KV) y el Servicio de Eventos para migrar de buckets a colecciones. En un cluster de Couchbase grande y bien ajustado, puedes migrar m\u00e1s de 1 mill\u00f3n de documentos por segundo. S\u00ed, sin N1QL, y sin necesidad de \u00edndices.<\/span><\/p>\n<p><span style=\"font-weight: 400\">En este art\u00edculo de seguimiento, proporcionar\u00e9 una metodolog\u00eda sencilla totalmente automatizada para realizar grandes migraciones con docenas (o incluso cientos) de tipos de datos a trav\u00e9s de un simple <\/span><i><span style=\"font-weight: 400\">Perl<\/span><\/i><span style=\"font-weight: 400\"> gui\u00f3n.<\/span><\/p>\n<h3>Recapitulaci\u00f3n de la funci\u00f3n final de Eventing: ConvertBucketToCollections<\/h3>\n<p><span style=\"font-weight: 400\">En la Parte 1 ten\u00edamos los siguientes ajustes para la Funci\u00f3n de Eventos.  Nota para cada tipo \u00fanico, \"<strong>cerveza<\/strong>\" y \"<strong>cervecer\u00eda<\/strong>\"tuvimos que a\u00f1adir un alias de Bucket binding a la colecci\u00f3n destino en modo \"lectura+escritura\".  Adem\u00e1s tuvimos que crear las colecciones de destino, en este caso \"<strong>datos.masivos.cerveza<\/strong>\" y \"<strong>datos.masivos.cervecer\u00eda<\/strong>&#8220;<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-12480 size-full\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/11\/Part2_FINAL_SETTINGS.jpg\" alt=\"\" width=\"513\" height=\"991\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/Part2_FINAL_SETTINGS.jpg 513w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/Part2_FINAL_SETTINGS-155x300.jpg 155w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/Part2_FINAL_SETTINGS-300x580.jpg 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/Part2_FINAL_SETTINGS-10x20.jpg 10w\" sizes=\"auto, (max-width: 513px) 100vw, 513px\" \/><\/p>\n<p><span style=\"font-weight: 400\">En la Parte 1 ten\u00edamos el siguiente c\u00f3digo JavaScript en nuestra Funci\u00f3n Eventing.  Nota a cada tipo \u00fanico, \"<strong>cerveza<\/strong>\" y \"<strong>cervecer\u00eda<\/strong>\"Tuvimos que replicar un bloque de c\u00f3digo JavaScript y actualizar la referencia del alias de enlace correspondiente o la colecci\u00f3n de destino en el servicio de datos de Couchbase.<\/span><\/p>\n<pre class=\"toolbar-overlay:false lang:js decode:true\">function OnUpdate(doc, meta) {\r\n    if (!doc.type) return;\r\n  \r\n    var type = doc.type;\r\n    if (DROP_TYPE) delete doc.type;\r\n  \r\n    if (type === 'beer') {\r\n        if (DO_COPY) beer_col[meta.id] = doc;\r\n        if (DO_DELETE) {\r\n            if(!beer_col[meta.id]) { \/\/ safety check \r\n                log(\"skip delete copy not found type=\" + doc.type + \", meta.id=\" + meta.id);\r\n            } else {\r\n                delete src_col[meta.id];\r\n            }\r\n        }\r\n    }\r\n    if (type === 'brewery') {\r\n        if (DO_COPY) brewery_col[meta.id] = doc;\r\n        if (DO_DELETE) {\r\n            if(!brewery_col[meta.id]) { \/\/ safety check\r\n                log(\"skip delete copy not found type=\" + doc.type + \", meta.id=\" + meta.id);\r\n            } else {\r\n                delete src_col[meta.id];\r\n            }\r\n        }\r\n    }\r\n}<\/pre>\n<h2>La t\u00e9cnica de la Parte 1 funciona, pero \u00bfy si tengo muchos tipos?<\/h2>\n<p>Usando Eventing se pueden hacer migraciones como se muestra en la Parte 1, pero parece un poco de trabajo para configurar las cosas.<\/p>\n<p>Si tiene 80 tipos diferentes, utilizar esta t\u00e9cnica (tanto para crear la funci\u00f3n de eventos como para crear los espacios clave necesarios) supondr\u00eda una cantidad incre\u00edble de esfuerzo propenso a errores. Si tuviera 80 tipos en un cubo para migrar y dividir, no me gustar\u00eda hacer todo el trabajo descrito anteriormente a mano para cada tipo.<\/p>\n<h2>Automatizar mediante CustomConvertBucketToCollections.pl<\/h2>\n<p>Para resolver este problema, escrib\u00ed un peque\u00f1o <em>Perl<\/em> gui\u00f3n, <em>CustomConvertBucketToCollections.pl<\/em>que genera dos archivos:<\/p>\n<ul>\n<li><em>CustomConvertBucketToCollections.json<\/em>, <span style=\"font-weight: 400\">es una funci\u00f3n completa de Eventing que realiza todo el trabajo descrito en este post<\/span>.<\/li>\n<li><em>MakeCustomKeyspaces.sh<\/em>, <span style=\"font-weight: 400\">es un archivo shell para construir todos los espacios de claves necesarios e importar la funci\u00f3n Eventing generada.<\/span><\/li>\n<\/ul>\n<p>Puede encontrar este script en GitHub en <a href=\"https:\/\/github.com\/jon-strabala\/cb-buckets-to-collections\">https:\/\/github.com\/jon-strabala\/cb-buckets-to-collections<\/a>.<\/p>\n<p>Nota, el script <em>CustomConvertBucketToCollections.pl <\/em>requiere que ambos <strong><em>Perl<\/em><\/strong> (lenguaje pr\u00e1ctico de extracci\u00f3n e informe) y tambi\u00e9n <strong><em>jq<\/em><\/strong> (un procesador JSON de l\u00ednea de comandos ligero y flexible).<\/p>\n<h2>Ejemplo: Migraci\u00f3n de 250 millones de registros con 80 tipos diferentes<\/h2>\n<p><span style=\"font-weight: 400\">Tenemos 250 millones de documentos en keyspac<\/span>e \"<strong>input._default._default<\/strong>\" con <span style=\"font-weight: 400\">80 tipos diferentes y desea reorganizar los datos por tipo en colecciones bajo el <\/span>alcance \"<strong>salida.reorg<\/strong>&#8221; <span style=\"font-weight: 400\">por el tipo de propiedad. Tenemos un cl\u00faster de AWS de tres instancias r5.2xlarge, todas ellas ejecutando el servicio de datos y el servicio nocturno.<\/span><\/p>\n<p>El cubo de entrada \"<strong>entrada<\/strong>\" en este ejemplo est\u00e1 configurado con una cuota de memoria de 16000 MB.<\/p>\n<p>A continuaci\u00f3n utilizo el CustomConvertBucketToCollections.pl <em>Perl<\/em> de GitHub en <a href=\"https:\/\/github.com\/jon-strabala\/cb-buckets-to-collections\">https:\/\/github.com\/jon-strabala\/cb-buckets-to-collections<\/a>. Como puedes ver puede ser trivial hacer migraciones usando un script automatizado.<\/p>\n<h3>Paso 1: Configuraci\u00f3n \u00fanica<\/h3>\n<pre class=\"toolbar-overlay:false lang:default decode:true\">git clone https:\/\/github.com\/jon-strabala\/cb-buckets-to-collections\r\ncd cb-buckets-to-collections\r\nPATH=${PATH}:\/opt\/couchbase\/bin\r\n\r\ncd cb-buckets-to-collections\/\r\nchmod +x CustomConvertBucketToCollections.pl big_data_test_gen.pl big_data_test_load.sh<\/pre>\n<h3>Paso 2: Crear documentos de prueba 250M<\/h3>\n<p>Ejecutar el interactivo <strong>big_data_test_load.sh<\/strong>\u00a0mando:<\/p>\n<pre class=\"toolbar-overlay:false lang:default decode:true\">.\/big_data_test_load.sh<\/pre>\n<p>Par\u00e1metros de configuraci\u00f3n de entrada:<\/p>\n<pre># This bash script, 'big_data_test_load.sh', will load &lt;N&gt; million test\r\n# documents into a &lt;bucket&gt;._default._default in 1 million chunks as\r\n# created by the perl script 'big_data_test_gen.pl'. The data will\r\n# have 80 different document type values evenly distributed.\r\n\r\nEnter the number of test docs to create in the millions    250\r\nEnter the bucket (or target) to load test docs into        input\r\nEnter the username:password to your cluster                admin:jtester\r\nEnter the hostname or ip address of your cluster           localhost\r\nEnter the number of threads for cbimport                   8\r\n\r\nWill load 2 million test docs into keyspace input._default._default (the default for bucket input)\r\ntype ^C to abort, running in 5 sec.\r\n\r\nRunning ....\r\ngen\/cbimport block: 1 of 2, start at Mon 01 Nov 2021 11:06:01 AM PDT\r\nJSON `file:\/\/.\/data.json` imported to `couchbase:\/\/localhost` successfully\r\nDocuments imported: 1000000 Documents failed: 0\r\n** removed 23 lines **\r\ngen\/cbimport block: 250 of 250, start at Mon 01 Nov 2021 11:24:05 AM PDT\r\nJSON `file:\/\/.\/data.json` imported to `couchbase:\/\/localhost` successfully\r\nDocuments imported: 1000000 Documents failed: 0<\/pre>\n<p>Ahora deber\u00eda haber 250 millones de documentos de prueba en el espacio de claves.\u00a0<strong>input._default._default<\/strong>.<\/p>\n<h3>Paso 3: Generar la funci\u00f3n Eventing y el script Keyspace<\/h3>\n<p>Ejecutar el interactivo\u00a0<strong>CustomConvertBucketToCollections.pl<\/strong>\u00a0mando:<\/p>\n<pre class=\"toolbar-overlay:false lang:default decode:true\">.\/CustomConvertBucketToCollections.pl<\/pre>\n<p>Par\u00e1metros de configuraci\u00f3n de entrada:<\/p>\n<pre class=\"toolbar-overlay:false copy:false lang:default decode:true\">Enter the bucket (or source) to convert to collections [travel-sample]: input\r\nEnter the username:password to your cluster [admin:jtester]:\r\nEnter the hostname or ip address of your cluster [localhost]:\r\nEnter the destination bucket.scope [mybucket.myscope]: output.reorg\r\nEnter the Eventing storage keyspace bucket.scope.collection [rr100.eventing.metadata]:\r\nEnter the number of workers (LTE # cores more is faster) [8]:\r\nProbe the bucket (or source) to determine the set of types [Y]:\r\nsamples across the bucket (or source) to find types [20000]: 100000\r\nmaximum estimated # of types in the bucket (or source) [30]: 100\r\n\r\n\r\nScanning input for 'type' property this may take a few seconds\r\n\r\ncurl -s -u Administrator:password https:\/\/localhost:8093\/query\/service -d \\\r\n    'statement=INFER `input`._default._default WITH {\"sample_size\": 100000, \"num_sample_values\": 100, \"similarity_metric\": 0.1}' \\\r\n    | jq '.results[][].properties.type.samples | .[]' | sort -u\r\n\r\nTYPES FOUND: t01 t02 t03 t04 t05 t06 t07 t08 t09 t10 t11 t12 t13 t14 t15 t16 t17 t18 t19 t20 t21 t22 t23 t24 t25 t26 t27 t28 t29 \r\nt30 t31 t32 t33 t34 t35 t36 t37 t38 t39 t40 t41 t42 t43 t44 t45 t46 t47 t48 t49 t50 t51 t52 t53 t54 t55 t56 t57 t58 t59 t60 t61 \r\nt62 t63 t64 t65 t66 t67 t68 t69 t70 t71 t72 t73 t74 t75 t76 t77 t78 t79 t80\r\n\r\nGenerating Eventing Function: CustomConvertBucketToCollections.json\r\n\r\nGenerating Keyspace commands: MakeCustomKeyspaces.sh<\/pre>\n<p><span style=\"font-weight: 400\">En el interactivo <\/span><i><span style=\"font-weight: 400\">Perl<\/span><\/i><span style=\"font-weight: 400\"> gui\u00f3n anterior, se modificaron cuatro de las opciones predeterminadas anteriores.<\/span><\/p>\n<h3>Paso 3: Actualice MakeCustomKeyspaces.sh (seg\u00fan sea necesario)<\/h3>\n<p><span style=\"font-weight: 400\">Puedes simplemente \"<strong>vi MakeCustomKeyspaces.sh<\/strong>\"y modifique los valores necesarios. Opto por utilizar el m\u00e9todo Unix <\/span><i><span style=\"font-weight: 400\">sed<\/span><\/i><span style=\"font-weight: 400\"> para aumentar el tama\u00f1o de la RAM del <\/span>cubo \"<strong>salida\"<\/strong> de 100 a 1600<\/p>\n<pre class=\"toolbar-overlay:false lang:default decode:true\">cat MakeCustomKeyspaces.sh | sed -e 's\/\\(^.*bucket=output.*ramsize=\\)100 \\(\\.*\\)\/\\116000 \\2\/' &gt; tmp\r\nmv tmp MakeCustomKeyspaces.sh<\/pre>\n<h3>Paso 4: Ejecute el script MakeCustomKeyspaces.sh<\/h3>\n<pre class=\"toolbar-overlay:false lang:default decode:true\">sh .\/MakeCustomKeyspaces.sh<\/pre>\n<p class=\"\">a continuaci\u00f3n:<\/p>\n<pre class=\"copy:false lang:default decode:true\">SUCCESS: Bucket created\r\nSUCCESS: Scope created\r\nSUCCESS: Collection created\r\nSUCCESS: Bucket created\r\nSUCCESS: Scope created\r\nSUCCESS: Collection created\r\nSUCCESS: Collection created\r\n** removed 77 lines **\r\nSUCCESS: Collection created\r\nSUCCESS: Events imported<\/pre>\n<h3>Paso 5: Actualizar la interfaz de usuario de Couchbase en la p\u00e1gina de eventos<\/h3>\n<p>Para encontrar la nueva funci\u00f3n de eventos (o funci\u00f3n actualizada) en la interfaz de usuario de Couchbase, vaya a la p\u00e1gina de eventos y actualice su navegador web.<\/p>\n<h3>Paso 6: Implantar CustomConvertBucketToCollections<\/h3>\n<p>En la interfaz de usuario de Couchbase, vaya a la p\u00e1gina de eventos y despliegue la funci\u00f3n de eventos \"<strong>CustomConvertBucketToCollections<\/strong>&#8220;.<\/p>\n<p>En unos 45 minutos la reorganizaci\u00f3n deber\u00eda estar completamente hecha.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-12180\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2021\/10\/04_in_done_a.jpg\" alt=\"\" width=\"1073\" height=\"711\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/04_in_done_a.jpg 1073w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/04_in_done_a-300x199.jpg 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/04_in_done_a-1024x679.jpg 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/04_in_done_a-768x509.jpg 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/10\/04_in_done_a-20x13.jpg 20w\" sizes=\"auto, (max-width: 1073px) 100vw, 1073px\" \/><\/p>\n<p>En efecto, todos los documentos est\u00e1n reorganizados por tipo como colecciones. En este modesto cl\u00faster, se procesaron a 93K docs\/seg.<\/p>\n<h2>Reflexiones finales<\/h2>\n<p>Si le ha resultado \u00fatil esta serie de art\u00edculos y est\u00e1 interesado en seguir aprendiendo sobre el concurso completo, haga clic aqu\u00ed. <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/eventing\/?ref=blog\" target=\"_blank\" rel=\"noopener\">el servicio de eventos Couchbase<\/a>.<\/p>\n<p>Espero que encuentre el CustomConvertBucketToCollections.pl <em>Perl<\/em> de GitHub en <a href=\"https:\/\/github.com\/jon-strabala\/cb-buckets-to-collections\">https:\/\/github.com\/jon-strabala\/cb-buckets-to-collections<\/a> una herramienta valiosa en su arsenal cuando necesite migrar un cubo con muchos tipos a un paradigma de colecciones.<\/p>\n<p>Si\u00e9ntase libre de mejorar el script CustomConvertBucketToCollections.pl para utilizar un archivo de configuraci\u00f3n intermedio al Eventing <em>Perl<\/em> donde se pueden ajustar todos los par\u00e1metros. A continuaci\u00f3n, utilice el archivo de configuraci\u00f3n intermedio para crear la funci\u00f3n de eventos y el script de shell de configuraci\u00f3n.<\/p>\n<p>Ejemplo de archivo de configuraci\u00f3n intermedio:<\/p>\n<pre class=\"\">[\r\n  {\r\n\t\"src_ks\": \"input._default._default\",\r\n\t\"dst_ks\": \"output.myscope.t01\",\r\n\t\"create_dst_ks\": true,\r\n\t\"dst_copy\": true,\r\n\t\"src_del\": true,\r\n\t\"dst_remove_type\": true\r\n  }, {\r\n\t\"src_ks\": \"input._default._default\",\r\n\t\"dst_ks\": \"output.myscope.t02\",\r\n\t\"create_dst_ks\": true,\r\n\t\"dst_copy\": true,\r\n\t\"src_del\": true,\r\n\t\"dst_remove_type\": true\r\n  }, {\r\n\t\"src_ks\": \"input._default._default\",\r\n\t\"dst_ks\": \"output.myscope.t03\",\r\n\t\"create_dst_ks\": true,\r\n\t\"dst_copy\": true,\r\n\t\"src_del\": true,\r\n\t\"dst_remove_type\": true\r\n  }\r\n]<\/pre>\n<h2>Recursos<\/h2>\n<ul>\n<li><em>Descargar:<\/em> <a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/?ref=blog\" target=\"_blank\" rel=\"noopener\">Descargar Couchbase Server 7.0<\/a><\/li>\n<li><i><span style=\"font-weight: 400\">Scriptlet de Eventing:<\/span><\/i><a href=\"https:\/\/docs.couchbase.com\/server\/current\/eventing\/eventing-handler-ConvertBucketToCollections.html?ref=blog\"> <span style=\"font-weight: 400\">Funci\u00f3n: ConvertBucketToCollections<\/span><\/a><\/li>\n<li><em>GitHub:<\/em> <a href=\"https:\/\/github.com\/jon-strabala\/cb-buckets-to-collections?ref=blog\" target=\"_blank\" rel=\"noopener\">Herramienta Perl: cb-buckets-to-collections.pl<\/a><\/li>\n<\/ul>\n<h2>Referencias<\/h2>\n<ul>\n<li><a href=\"https:\/\/docs.couchbase.com\/server\/6.6\/eventing\/eventing-overview.html?ref=blog\" target=\"_blank\" rel=\"noopener noreferrer\">Documentaci\u00f3n sobre eventos de Couchbase<\/a><\/li>\n<li><a href=\"https:\/\/docs.couchbase.com\/server\/7.0\/introduction\/whats-new.html?ref=blog\" target=\"_blank\" rel=\"noopener noreferrer\">Novedades: Couchbase Server 7.0<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/es\/how-to-migrate-to-scopes-and-collections-in-couchbase-7-0\/\" target=\"_blank\" rel=\"noopener\">C\u00f3mo migrar a \u00e1mbitos y colecciones en Couchbase 7.0<\/a><\/li>\n<li><a href=\"https:\/\/www.couchbase.com\/blog\/es\/tag\/eventing\/?ref=blog\" target=\"_blank\" rel=\"noopener noreferrer\">Otros blogs de Couchbase sobre Eventing<\/a><\/li>\n<\/ul>\n<p>Me encantar\u00eda que me contaras qu\u00e9 te han parecido las capacidades de Couchbase y el servicio Eventing, y c\u00f3mo benefician a tu negocio de cara al futuro. Por favor, comparte tu opini\u00f3n a trav\u00e9s de los comentarios de abajo o en <a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/?ref=blog\" target=\"_blank\" rel=\"noopener\">los foros de Couchbase<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>Migrating Buckets to Collections &amp; Scopes via Eventing: Part 2 Again (as I did in Part 1) I want to point out an excellent blog written by Shivani Gupta, How to Migrate to Scopes &amp; Collections in Couchbase 7.0, which [&hellip;]<\/p>","protected":false},"author":42711,"featured_media":12478,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1821,1816,2273,9336],"tags":[2379,9343,1766,9339],"ppma_author":[9113],"class_list":["post-12479","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-architecture","category-couchbase-server","category-eventing","category-scopes-and-collections","tag-best-practices","tag-couchbase-7-0","tag-data-migration","tag-scopes-and-collections"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Migrating Buckets to Collections &amp; Scopes via Eventing: Part 2 - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Learn how to use the Couchbase Eventing Service to easily and automatically migrate your Bucket based data to Scopes &amp; Collections. Part 2\" \/>\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\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Migrating Buckets to Collections &amp; Scopes via Eventing: Part 2\" \/>\n<meta property=\"og:description\" content=\"Learn how to use the Couchbase Eventing Service to easily and automatically migrate your Bucket based data to Scopes &amp; Collections. Part 2\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2021-12-21T16:00:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T05:40:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/migration2-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"799\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jon Strabala, Principal Product Manager, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jon Strabala, Principal Product Manager, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/\"},\"author\":{\"name\":\"Jon Strabala, Principal Product Manager, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c991579f88217edee79ffedb6fc914cc\"},\"headline\":\"Migrating Buckets to Collections &amp; Scopes via Eventing: Part 2\",\"datePublished\":\"2021-12-21T16:00:29+00:00\",\"dateModified\":\"2025-06-14T05:40:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/\"},\"wordCount\":1058,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/migration2-1.jpg\",\"keywords\":[\"best practices\",\"Couchbase 7.0\",\"Data Migration\",\"Scopes and Collections\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Architecture\",\"Couchbase Server\",\"Eventing\",\"Scopes and Collections\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/\",\"name\":\"Migrating Buckets to Collections &amp; Scopes via Eventing: Part 2 - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/migration2-1.jpg\",\"datePublished\":\"2021-12-21T16:00:29+00:00\",\"dateModified\":\"2025-06-14T05:40:20+00:00\",\"description\":\"Learn how to use the Couchbase Eventing Service to easily and automatically migrate your Bucket based data to Scopes & Collections. Part 2\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/migration2-1.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/migration2-1.jpg\",\"width\":1600,\"height\":799},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Migrating Buckets to Collections &amp; Scopes via Eventing: Part 2\"}]},{\"@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\/c991579f88217edee79ffedb6fc914cc\",\"name\":\"Jon Strabala, Principal Product Manager, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9c6045b0c2f7b07b0ee10f94ad748a25\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/db52a9f6d84faba430dd38106cdbc16ff02c2066b103b5f6b4cfcde40e83c683?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/db52a9f6d84faba430dd38106cdbc16ff02c2066b103b5f6b4cfcde40e83c683?s=96&d=mm&r=g\",\"caption\":\"Jon Strabala, Principal Product Manager, Couchbase\"},\"description\":\"Jon Strabala is a Principal Product Manager, responsible for the Couchbase Eventing Service. Before joining Couchbase, he spent more than 20 years building software products across various domains, starting with EDA in aerospace then transitioning to building enterprise software focused on what today is coined \u201cIoT\u201d and \u201cat-scale data.\u201d Jon worked for several small software consultancies until eventually starting and managing his own firm. He has extensive experience in NoSQL\/NewSQL, both in contributing and commercializing new technologies such as compressed bitmaps and column stores. Jon holds a bachelor\u2019s degree in electrical engineering and a master's in computer engineering, both from the University of Southern California, and an MBA from the University of California at Irvine.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/jon-strabala\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Migrating Buckets to Collections &amp; Scopes via Eventing: Part 2 - The Couchbase Blog","description":"Learn how to use the Couchbase Eventing Service to easily and automatically migrate your Bucket based data to Scopes & Collections. Part 2","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\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/","og_locale":"es_MX","og_type":"article","og_title":"Migrating Buckets to Collections &amp; Scopes via Eventing: Part 2","og_description":"Learn how to use the Couchbase Eventing Service to easily and automatically migrate your Bucket based data to Scopes & Collections. Part 2","og_url":"https:\/\/www.couchbase.com\/blog\/es\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/","og_site_name":"The Couchbase Blog","article_published_time":"2021-12-21T16:00:29+00:00","article_modified_time":"2025-06-14T05:40:20+00:00","og_image":[{"width":1600,"height":799,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/migration2-1.jpg","type":"image\/jpeg"}],"author":"Jon Strabala, Principal Product Manager, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Jon Strabala, Principal Product Manager, Couchbase","Est. reading time":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/"},"author":{"name":"Jon Strabala, Principal Product Manager, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c991579f88217edee79ffedb6fc914cc"},"headline":"Migrating Buckets to Collections &amp; Scopes via Eventing: Part 2","datePublished":"2021-12-21T16:00:29+00:00","dateModified":"2025-06-14T05:40:20+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/"},"wordCount":1058,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/migration2-1.jpg","keywords":["best practices","Couchbase 7.0","Data Migration","Scopes and Collections"],"articleSection":["Best Practices and Tutorials","Couchbase Architecture","Couchbase Server","Eventing","Scopes and Collections"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/","url":"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/","name":"Migrating Buckets to Collections &amp; Scopes via Eventing: Part 2 - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/migration2-1.jpg","datePublished":"2021-12-21T16:00:29+00:00","dateModified":"2025-06-14T05:40:20+00:00","description":"Learn how to use the Couchbase Eventing Service to easily and automatically migrate your Bucket based data to Scopes & Collections. Part 2","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/migration2-1.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2021\/11\/migration2-1.jpg","width":1600,"height":799},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/migrating-buckets-to-collections-scopes-via-eventing-part-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Migrating Buckets to Collections &amp; Scopes via Eventing: Part 2"}]},{"@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\/c991579f88217edee79ffedb6fc914cc","name":"Jon Strabala, Director Principal de Producto, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9c6045b0c2f7b07b0ee10f94ad748a25","url":"https:\/\/secure.gravatar.com\/avatar\/db52a9f6d84faba430dd38106cdbc16ff02c2066b103b5f6b4cfcde40e83c683?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/db52a9f6d84faba430dd38106cdbc16ff02c2066b103b5f6b4cfcde40e83c683?s=96&d=mm&r=g","caption":"Jon Strabala, Principal Product Manager, Couchbase"},"description":"Jon Strabala es Gerente Principal de Producto, responsable del Servicio de Eventos de Couchbase. Antes de unirse a Couchbase, pas\u00f3 m\u00e1s de 20 a\u00f1os construyendo productos de software a trav\u00e9s de diversos dominios, comenzando con EDA en el sector aeroespacial y luego la transici\u00f3n a la construcci\u00f3n de software empresarial centrado en lo que hoy se conoce como \"IoT\" y \"datos a escala\". Jon trabaj\u00f3 para varias peque\u00f1as consultoras de software hasta que finalmente fund\u00f3 y dirigi\u00f3 su propia empresa. Tiene una amplia experiencia en NoSQL\/NewSQL, tanto en la contribuci\u00f3n como en la comercializaci\u00f3n de nuevas tecnolog\u00edas como los mapas de bits comprimidos y los almacenes de columnas. Jon es licenciado en ingenier\u00eda el\u00e9ctrica y tiene un m\u00e1ster en ingenier\u00eda inform\u00e1tica, ambos por la Universidad del Sur de California, y un MBA por la Universidad de California en Irvine.","url":"https:\/\/www.couchbase.com\/blog\/es\/author\/jon-strabala\/"}]}},"authors":[{"term_id":9113,"user_id":42711,"is_guest":0,"slug":"jon-strabala","display_name":"Jon Strabala, Principal Product Manager, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/db52a9f6d84faba430dd38106cdbc16ff02c2066b103b5f6b4cfcde40e83c683?s=96&d=mm&r=g","author_category":"","last_name":"Strabala, Principal Product Manager, Couchbase","first_name":"Jon","job_title":"","user_url":"","description":"Jon Strabala es Gerente Principal de Producto, responsable del Servicio de Eventos de Couchbase. Antes de unirse a Couchbase, pas\u00f3 m\u00e1s de 20 a\u00f1os construyendo productos de software a trav\u00e9s de diversos dominios, comenzando con EDA en el sector aeroespacial y luego la transici\u00f3n a la construcci\u00f3n de software empresarial centrado en lo que hoy se conoce como \"IoT\" y \"datos a escala\". Jon trabaj\u00f3 para varias peque\u00f1as consultoras de software hasta que finalmente fund\u00f3 y dirigi\u00f3 su propia empresa. Tiene una amplia experiencia en NoSQL\/NewSQL, tanto en la contribuci\u00f3n como en la comercializaci\u00f3n de nuevas tecnolog\u00edas como los mapas de bits comprimidos y los almacenes de columnas. Jon es licenciado en ingenier\u00eda el\u00e9ctrica y tiene un m\u00e1ster en ingenier\u00eda inform\u00e1tica, ambos por la Universidad del Sur de California, y un MBA por la Universidad de California en Irvine."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/12479","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\/42711"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=12479"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/12479\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/12478"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=12479"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=12479"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=12479"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=12479"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}