{"id":8743,"date":"2020-05-28T14:49:24","date_gmt":"2020-05-28T21:49:24","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=8743"},"modified":"2025-06-13T22:40:23","modified_gmt":"2025-06-14T05:40:23","slug":"couchbase-eventing-small-scripts-that-solve-big-problems-at-scale","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/","title":{"rendered":"Couchbase Eventing: Peque\u00f1os scripts que resuelven grandes problemas"},"content":{"rendered":"<h2>Eventos sencillos pero potentes:<\/h2>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/eventing\/\">Eventos<\/a> permite a los peque\u00f1os guiones superar problemas dif\u00edciles de resolver.<\/p>\n<p><em>Si est\u00e1 familiarizado tanto con Couchbase como con Eventing, no dude en omitir la breve descripci\u00f3n general y pasar a la parte siguiente. <a href=\"#examples\">ejemplos.<\/a><\/em><\/p>\n<h2>Visi\u00f3n general:<\/h2>\n<p>En primer lugar, veamos lo b\u00e1sico <a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/eventing\/eventing-lifecycle.html\">Ciclo de vida de los eventos<\/a>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-8739 size-large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2020\/05\/cron_implementation_1_image_0_lifecycle_overview_notitle_b-1024x398.png\" alt=\"Eventing Life Cycle 6.5\" width=\"900\" height=\"350\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/05\/cron_implementation_1_image_0_lifecycle_overview_notitle_b-1024x398.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/05\/cron_implementation_1_image_0_lifecycle_overview_notitle_b-300x117.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/05\/cron_implementation_1_image_0_lifecycle_overview_notitle_b-768x298.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/05\/cron_implementation_1_image_0_lifecycle_overview_notitle_b-1536x597.png 1536w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/05\/cron_implementation_1_image_0_lifecycle_overview_notitle_b-20x8.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/05\/cron_implementation_1_image_0_lifecycle_overview_notitle_b-1320x513.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/05\/cron_implementation_1_image_0_lifecycle_overview_notitle_b.png 1825w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p>Los siguientes pasos muestran lo f\u00e1cil que es escribir y utilizar una funci\u00f3n de eventos<\/p>\n<ul>\n<li>A\u00f1ade (o importa) una funci\u00f3n de eventos a trav\u00e9s de la interfaz de usuario de Couchbase Server.<\/li>\n<li>Asigne una fuente de datos, un cubo de bloc de notas y algunos enlaces para manipular documentos o comunicarse con el mundo exterior.<\/li>\n<li>Implementar alg\u00fan c\u00f3digo JavaScript para procesar la mutaci\u00f3n recibida.<\/li>\n<li>Guarde su nueva funci\u00f3n y pulse \"Desplegar\".<\/li>\n<\/ul>\n<p>Eso es todo, ahora tiene una funci\u00f3n distribuida que responde a las mutaciones en su conjunto de datos en tiempo real en todo su cl\u00faster.<\/p>\n<p>El servicio de Eventing proporciona una plataforma sin infraestructura que puede escalar sus funciones de Eventing a medida que su negocio experimenta un crecimiento, ya sea un pico de una sola vez o un aumento mensual en los almacenes de datos o clientes atendidos sin preocuparse por el hecho de que sus funciones de Eventing basadas en JavaScript se est\u00e1n ejecutando de una manera robusta, fiable y distribuida en paralelo.  Para obtener m\u00e1s informaci\u00f3n sobre Couchbase Eventing, consulte la p\u00e1gina <a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/eventing\/eventing-overview.html\">Concurso completo<\/a> en nuestra documentaci\u00f3n.<\/p>\n<p>Los ejemplos de este art\u00edculo muestran que en algunos casos Eventing puede actuar como una gota de aceite para \"liberar\" las partes m\u00f3viles de sus aplicaciones.<\/p>\n<h2>Couchbase una base de datos que se construye por encargo:<\/h2>\n<p>Me gusta pensar en un cl\u00faster de Couchbase como un conjunto de \"microservicios\" escalables e interoperables. Estos servicios pueden conectarse entre s\u00ed y dimensionarse para satisfacer un conjunto espec\u00edfico de necesidades operativas y empresariales.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-3884 size-large\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2017\/07\/MDS-container-1-1024x405.png\" alt=\"\" width=\"900\" height=\"356\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/07\/MDS-container-1-1024x405.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/07\/MDS-container-1-300x119.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/07\/MDS-container-1-768x304.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/07\/MDS-container-1-20x8.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/07\/MDS-container-1-1320x522.png 1320w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2017\/07\/MDS-container-1.png 1330w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/p>\n<p>Couchbase proporciona escalado multidimensional, o MDS, a trav\u00e9s de seis servicios clave con una interferencia m\u00ednima de recursos entre ellos. Adem\u00e1s, cada servicio de Couchbase es escalable de forma independiente, simplemente a\u00f1adiendo m\u00e1s nodos. Esto permite a los clientes crear el cl\u00faster multinodo ideal con el menor coste total de propiedad posible para la tarea o tareas en cuesti\u00f3n.<\/p>\n<ul>\n<li>Los nodos de datos se escalan f\u00e1cilmente para proporcionar operaciones KV conscientes de JSON a escala para b\u00fasquedas de uno o varios registros es extremadamente r\u00e1pido.  \u00bfAcabo de mencionar que \"<em><u>para b\u00fasquedas de uno o varios registros es extremadamente r\u00e1pido<\/u><\/em>\"S\u00ed, lo hice, pero realmente quiero hacer hincapi\u00e9 en esto.<\/li>\n<li>Los nodos de consulta se escalan f\u00e1cilmente para proporcionar \u00edndices y tambi\u00e9n N1QL, una mejora de SQL que funciona de forma nativa con documentos JSON, que permite a los programadores ponerse en marcha r\u00e1pidamente sin tener que aprender una nueva forma de pensar.<\/li>\n<li>Los nodos de \u00edndice se escalan f\u00e1cilmente para proporcionar \u00edndices flexibles que aceleren algunas o todas las consultas N1QL.<\/li>\n<li>Los nodos de b\u00fasqueda se ampl\u00edan f\u00e1cilmente para ofrecer b\u00fasquedas de texto completo en lenguaje natural con: b\u00fasqueda en funci\u00f3n del idioma, puntuaci\u00f3n de los resultados e \u00edndices r\u00e1pidos basados en FTS,<\/li>\n<li>El nodo Analytics se escala f\u00e1cilmente a la capacidad de gesti\u00f3n paralela de datos para ejecutar de forma eficiente consultas complejas: grandes operaciones ad hoc de join, set, agregaci\u00f3n y agrupaci\u00f3n en grandes conjuntos de datos.<\/li>\n<li>El servicio Eventing se escala f\u00e1cilmente para proporcionar un paradigma inform\u00e1tico que los desarrolladores pueden utilizar para gestionar los cambios (o mutaciones) de datos y reaccionar ante ellos en tiempo real.<\/li>\n<\/ul>\n<p>Como todas las l\u00edneas de productos, los nuevos servicios de Couchbase Query, Search, Eventing y Analytics tienen algunos defectos, pero en conjunto, la cesta completa proporciona una suite unificada, o una ventanilla \u00fanica para resolver un sinf\u00edn de problemas.  En serio, si no te importa un producto unificado y todo lo que vas a hacer es usar FTS, podr\u00edas considerar usar Elasticsearch, pero una vez que necesites integrar tus resultados de FTS con N1QL (SQL para JSON), podr\u00edas haber empezado mucho mejor con Couchbase.<\/p>\n<p>Hoy vamos a utilizar s\u00f3lo dos servicios 1) el servicio primario de KV proporcionado por los nodos de datos 2) el servicio de eventos.  Voy a destacar a trav\u00e9s de unas peque\u00f1as funciones de JavaScript c\u00f3mo se puede superar algunos problemas dif\u00edciles a escala aprovechando el servicio de eventos.<\/p>\n<h2>Requisitos previos \/ Aprendizaje del concurso completo:<\/h2>\n<p>En este art\u00edculo vamos a utilizar la \u00faltima versi\u00f3n de GA, es decir, Couchbase versi\u00f3n 6.5.1<\/p>\n<p>Sin embargo, si usted no est\u00e1 familiarizado con Couchbase o el servicio Eventing por favor camine a trav\u00e9s de GET STARTED y un ejemplo Eventing espec\u00edficamente se refieren a los siguientes:<\/p>\n<ul>\n<li>Configure un servidor Couchbase 6.5.1 que funcione seg\u00fan las instrucciones de <a href=\"https:\/\/docs.couchbase.com\/server\/current\/getting-started\/start-here.html\">Comience aqu\u00ed<\/a><\/li>\n<li id=\"examples\">Comprender c\u00f3mo desplegar una funci\u00f3n b\u00e1sica de Eventing seg\u00fan las instrucciones de la secci\u00f3n <a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/eventing\/eventing-example-data-enrichment.html\">Enriquecimiento de datos<\/a> ejemplo espec\u00edficamente \"Caso 2\" donde s\u00f3lo utilizaremos un cubo el cubo 'fuente'.<\/li>\n<\/ul>\n<h2>Enriquecimiento de datos mediante eventos:<\/h2>\n<h4>Un problema t\u00edpico de un cliente<\/h4>\n<p>Un sistema de producci\u00f3n en vivo ha almacenado miles de millones de documentos. Ha surgido una nueva necesidad empresarial que exige enriquecer los datos existentes.  Esta necesidad de datos adicionales afecta a todo el conjunto de documentos.  El impacto operativo abarca tanto los datos antiguos o hist\u00f3ricos como los nuevos o mutantes. La empresa necesita mantener el sistema de producci\u00f3n en funcionamiento ininterrumpido y responder continuamente a los nuevos datos en tiempo real.<\/p>\n<p>Consideremos un ejemplo de aplicaci\u00f3n un tanto artificioso: un servicio de b\u00fasqueda GeoIP. Esta utilidad necesita un conjunto de datos que permita buscar pa\u00edses por rangos de direcciones IPV4. La implementaci\u00f3n inicial almacenaba los registros de la siguiente manera:<\/p>\n<pre class=\"toolbar-overlay:false lang:js decode:true\">{\r\n  \"type\": \"ip_country_map\",\r\n  \"country\": \"RU\",\r\n  \"ip_start\": \"7.12.60.1\",\r\n  \"ip_end\": \"7.62.60.9\"\r\n}<\/pre>\n<p>Meses o m\u00e1s tarde cambian los nuevos requisitos empresariales. Ingenier\u00eda necesitaba enriquecer los documentos JSON con nuevos campos.  El requisito era incluir las representaciones num\u00e9ricas de las dos direcciones IPV4 existentes.<\/p>\n<div class=\"codeMirror-wrapper\">\n<pre class=\"toolbar-overlay:false lang:js decode:true\">{\r\n  \"type\": \"ip_country_map\",\r\n  \"country\": \"RU\",\r\n  \"ip_end\": \"7.62.60.9\",\r\n  \"ip_start\": \"7.12.60.1\",\r\n  \"ip_num_start\": 118242305,\r\n  \"ip_num_end\": 121519113\r\n}<\/pre>\n<\/div>\n<h4>Eventing al rescate<\/h4>\n<p>Una simple funci\u00f3n de eventos de catorce (14) l\u00edneas JavaScript (2 de las cuales son comentarios) puede escribirse e implementarse para resolver el problema con recursos m\u00ednimos.<\/p>\n<div class=\"codeMirror-wrapper\">\n<pre class=\"toolbar-overlay:false lang:js decode:true\">function OnUpdate(doc, meta) {\r\n  if (doc.type !== \"ip_country_map\" ) return;\r\n  doc[\"ip_num_start\"] = get_numip_first_3_octets(doc[\"ip_start\"]);\r\n  doc[\"ip_num_end\"]   = get_numip_first_3_octets(doc[\"ip_end\"]);\r\n  \/\/ src is a bucket alias to the source bucket in settings, write back to it\r\n  src[meta.id]=doc;\r\n}\r\nfunction get_numip_first_3_octets(ip) {\r\n  if (!ip) return 0;\r\n  var parts = ip.split('.');\r\n  \/\/ IP Number = A x (256*256*256) + B x (256*256) + C x 256 + D\r\n  return = (parts[0]*(256*256*256)) + (parts[1]*(256*256)) +\r\n               (parts[2]*256) + parseInt(parts[3]);\r\n}<\/pre>\n<\/div>\n<p>Al desplegar la funci\u00f3n anterior con un \"l\u00edmite de alimentaci\u00f3n\" establecido en \"Todo\", todos los documentos de tipo \"ip_country_map\" son procesados y enriquecidos.<\/p>\n<p>La funci\u00f3n de eventos se deja \"desplegada\" reaccionando a todas las nuevas inserciones o actualizaciones (o mutaciones) en tiempo real enriqueciendo los nuevos elementos y tambi\u00e9n actualizando los elementos existentes en los cambios de \"ip_start_num\" o \"ip_end_num\" a las representaciones \"num\u00e9ricas\" adecuadas.<\/p>\n<p>Como los documentos est\u00e1n enriquecidos (los campos antiguos siguen presentes), las aplicaciones de producci\u00f3n existentes seguir\u00e1n funcionando.  Todos los datos nuevos o modificados se actualizan en tiempo real al nuevo esquema.  Los componentes de la aplicaci\u00f3n GeoIP se desacoplan a trav\u00e9s de esta sencilla funci\u00f3n de eventos, de modo que pueden actualizarse de uno en uno.<\/p>\n<p>Cuando todos los componentes de producci\u00f3n han sido actualizados, la funci\u00f3n de eventos puede ser desinstalada y dada de baja.<\/p>\n<h2>Purga de datos obsoletos mediante eventos:<\/h2>\n<h4>Un problema t\u00edpico de un cliente<\/h4>\n<p>Un sistema de producci\u00f3n en vivo ha almacenado m\u00e1s de 7.000 millones de documentos.  Todos los documentos tienen una caducidad autom\u00e1tica (o <a href=\"https:\/\/www.couchbase.com\/blog\/es\/how-to-manage-ttl-with-couchbase-n1ql\/\">TTL<\/a> para el tiempo de vida). El entorno de producci\u00f3n recibe constantemente datos nuevos y expira constantemente datos antiguos.<\/p>\n<p>Se cometi\u00f3 un error operativo que provoc\u00f3 la creaci\u00f3n de 2.000 millones de documentos sin fecha de caducidad.<\/p>\n<p>El cliente no ten\u00eda los recursos (ni deseaba pagar por los recursos) para crear un gran \u00edndice para utilizar N1QL para identificar seleccionar y purgar los datos que carec\u00edan de un TTL activo (distinto de cero) cuando ya no eran \u00fatiles.<\/p>\n<h4>Eventing al rescate<\/h4>\n<p>Una simple funci\u00f3n de eventos de seis (6) l\u00edneas JavaScript (2 de las cuales son comentarios) se implement\u00f3 y resolvi\u00f3 el problema con recursos m\u00ednimos.<\/p>\n<div class=\"codeMirror-wrapper\">\n<pre class=\"toolbar-overlay:false lang:js decode:true\">function OnUpdate(doc, meta) {\r\n    if (meta.expiration !== 0) return;\r\n    \/\/ delete all items that have TTL or expiration of 0\r\n    \/\/ src is a bucket alias to the source bucket in settings, delete from it.\r\n    delete src[meta.id];\r\n}<\/pre>\n<\/div>\n<p>Al desplegar la funci\u00f3n anterior con un \"L\u00edmite de alimentaci\u00f3n\" establecido en \"Todo\", se escane\u00f3 todo el conjunto de documentos del bucket de origen. Todos los documentos con un TTL distinto de cero (lo que significa que no ten\u00edan caducidad) fueron ignorados.  S\u00f3lo se eliminan los documentos coincidentes con un TTL superior a cero.<\/p>\n<p>Una vez limpiado el bucket de origen, se desinstal\u00f3 la funci\u00f3n de eventos, ya que se utilizaba como herramienta administrativa.<\/p>\n<p>Tenga en cuenta que podr\u00edamos reemplazar la prueba de expiraci\u00f3n !== 0 en nuestro JavaScript para filtrar los datos para cualquier prop\u00f3sito necesario.<\/p>\n<p>Es bastante f\u00e1cil adivinar lo que estamos haciendo a continuaci\u00f3n:<\/p>\n<pre class=\"toolbar-overlay:false lang:js decode:true\">function OnUpdate(doc, meta) {\r\n    if (!(doc.type === \"customer\"&amp;&amp; doc.active === false)) return \r\n    \/\/ archive the customer to the bucket aias arc and remove from the bucket alias src\r\n    arc[meta.id] = doc;\r\n    delete src[meta.id];\r\n}<\/pre>\n<p>De hecho, podr\u00edamos actualizar f\u00e1cilmente lo anterior para realizar un archivo en cascada y eliminar no s\u00f3lo del cliente sino de cualquier otra informaci\u00f3n relacionada como pedidos, devoluciones y direcciones de env\u00edo. Consulte el ejemplo <a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/eventing\/eventing-examples-cascade-delete.html\">Cascada Suprimir<\/a> en la documentaci\u00f3n de Eventing.<\/p>\n<h2>Eliminaci\u00f3n de datos sensibles mediante Eventing:<\/h2>\n<h4>Un problema t\u00edpico de un cliente<\/h4>\n<p>Una empresa que ejecuta Couchbase on-premises en producci\u00f3n necesitaba compartir informaci\u00f3n de perfiles de clientes (150M y creciendo).  Su socio comercial tambi\u00e9n ejecuta Couchbase, pero en un proveedor en la nube, AWS.<\/p>\n<p>Dado un registro de perfil t\u00edpico como el siguiente:<\/p>\n<div class=\"codeMirror-wrapper\">\n<pre class=\"toolbar-overlay:false lang:js decode:true\">{\r\n  \"type\": \"master_profile\",\r\n  \"first_name\": \"Peter\",\r\n  \"last_name\": \"Chang\",\r\n  \"id\": 80927079070,\r\n  \"basic_profile\": {\r\n    \"partner_id\": 80980221,\r\n    \"services\": [\r\n      {\r\n        \"music\": true\r\n      },\r\n      {\r\n        \"radio\": true\r\n      },\r\n      {\r\n        \"video\": false\r\n      }\r\n    ]\r\n  },\r\n  \"sensitive_profile\": {\r\n    \"ssn\": \"111-11-1111\",\r\n    \"credit_card\": {\r\n      \"number\": \"3333-333-3333-3333\",\r\n      \"expires\": \"01\/09\",\r\n      \"ccv\": \"111\"\r\n    }\r\n  },\r\n  \"address\": {\r\n    \"home\": {\r\n      \"street\": \"4032 Kenwood Drive\",\r\n      \"city\": \"Boston\",\r\n      \"zip\": \"02102\"\r\n    },\r\n    \"billing\": {\r\n      \"street\": \"541 Bronx Street\",\r\n      \"city\": \"Boston\",\r\n      \"zip\": \"02102\"\r\n    }\r\n  },\r\n  \"phone\": {\r\n    \"home\": \"800-555-9201\",\r\n    \"work\": \"877-123-8811\",\r\n    \"cell\": \"878-234-8171\"\r\n  },\r\n  \"locale\": \"en_US\",\r\n  \"timezone\": -7,\r\n  \"gender\": \"M\"\r\n}<\/pre>\n<p>No pod\u00edan compartir todo el perfil, ya que conten\u00eda datos sensibles sobre las preferencias de los usuarios y los m\u00e9todos de pago.  Solo necesitaban compartir un subconjunto limitado como el siguiente:<\/p>\n<\/div>\n<div class=\"codeMirror-wrapper\">\n<pre class=\"toolbar-overlay:false lang:js decode:true\">{\r\n  \"type\": \"shared_profile\",\r\n  \"first_name\": \"Peter\",\r\n  \"id\": 80927079070,\r\n  \"basic_profile\": {\r\n    \"partner_id\": 80980221,\r\n    \"services\": [\r\n      {\r\n        \"music\": true\r\n      },\r\n      {\r\n        \"radio\": true\r\n      },\r\n      {\r\n        \"video\": false\r\n      }\r\n    ]\r\n  },\r\n  \"timezone\": -7\r\n}<\/pre>\n<\/div>\n<p>El cliente quer\u00eda sustituir la soluci\u00f3n SPARK de desgaste intermedio, que requer\u00eda horas en caso de fallo para inicializarse y s\u00f3lo ofrec\u00eda un lento proceso por lotes (horas para reflejar las actualizaciones) y sincronizar la informaci\u00f3n del perfil en tiempo real.<\/p>\n<h4>Eventing al rescate<\/h4>\n<p>Una simple funci\u00f3n de eventos de nueve (9) l\u00edneas JavaScript (3 de las cuales son comentarios) fue desplegada y resolvi\u00f3 el problema con recursos m\u00ednimos.<\/p>\n<div class=\"codeMirror-wrapper\">\n<pre class=\"toolbar-overlay:false lang:js decode:true\">function OnUpdate(doc, meta) {\r\n    \/\/ only process our profile documents\r\n    if (doc.type !== \"master_profile\") return;\r\n    \/\/ aws_bkt is a bucket alias to the target bucket to replicate to AWS via \r\n    \/\/ XCDR. Write the minimal (non-sensitive) profile doc to the bucket for AWS.\r\n    aws_bkt[\"shared_profile::\"+doc.id] = \r\n        { \"type\": \"shared_profile\", \"first_name\": doc.first_name, \"id\": doc.id, \r\n          \"basic_profile\": doc.basic_profile, \"timezone\": doc.timezone };\r\n}<\/pre>\n<\/div>\n<p>Al desplegar la Funci\u00f3n anterior con un \"L\u00edmite de alimentaci\u00f3n\" establecido en \"Todo\", se escane\u00f3 todo el conjunto de documentos del bucket de origen y se procesaron todos los documentos de tipo: \"master_profile\" y s\u00f3lo se copi\u00f3 en el bucket de destino compartido un subdocumento de cada perfil sin la informaci\u00f3n sensible.<\/p>\n<p>La funci\u00f3n de eventos siempre se deja desplegada reaccionando a todos los cambios (o mutaciones) de perfil de usuario en tiempo real y reenviando todas y cada una de las mutaciones al bucket de destino de AWS.<\/p>\n<p>En este caso de uso se realiza una sincronizaci\u00f3n final de cubo a cubo a trav\u00e9s de Couchbase <a href=\"https:\/\/docs.couchbase.com\/server\/current\/learn\/clusters-and-availability\/xdcr-overview.html\">XCDR<\/a> Los datos confidenciales no salen en ning\u00fan momento del cl\u00faster local y nunca se transmiten a AWS.<\/p>\n<h3>Recursos<\/h3>\n<ul>\n<li><em>Descargar:\u00a0<\/em><a href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/?family=server&amp;product=couchbase-server-developer\">Descargar Couchbase Server 6.5.1<\/a><\/li>\n<\/ul>\n<h3>Referencias<\/h3>\n<ul>\n<li>Documentaci\u00f3n de Couchbase Eventing:<br \/>\n<a href=\"https:\/\/docs.couchbase.com\/server\/current\/eventing\/eventing-overview.html\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/docs.couchbase.com\/server\/current\/eventing\/eventing-overview.html<\/a><\/li>\n<li>Couchbase Server 6.5 Novedades:<br \/>\n<a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/introduction\/whats-new.html\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/docs.couchbase.com\/server\/6.5\/introduction\/whats-new.html<\/a><\/li>\n<li>Blogs de Couchbase sobre Eventing:<br \/>\n<a href=\"https:\/\/www.couchbase.com\/blog\/es\/tag\/eventing\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.couchbase.com\/blog\/tag\/eventing\/<\/a><\/li>\n<\/ul>","protected":false},"excerpt":{"rendered":"<p>Eventing Simple Yet Powerful: Eventing allows small scripts to overcome hard to solve problems. If you are familiar with both Couchbase and Eventing please feel free to skip the brief overview and skip\u00a0ahead to the examples. Overview: First off, let&#8217;s [&hellip;]<\/p>","protected":false},"author":42711,"featured_media":8745,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1815,1821,1816,2273,9411],"tags":[1445,9271,2046],"ppma_author":[9113],"class_list":["post-8743","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-best-practices-and-tutorials","category-couchbase-architecture","category-couchbase-server","category-eventing","category-multi-dimensional-scaling","tag-mds","tag-multi-dimensional-scaling","tag-mutation"],"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>Couchbase Eventing: Small Scripts That Solve Big Problems - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"With simple functions come great power. Couchbase Eventing is must have tool in your big data arsenal allowing small scripts to overcome hard to solve problems.\" \/>\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\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Couchbase Eventing: Small Scripts That Solve Big Problems\" \/>\n<meta property=\"og:description\" content=\"With simple functions come great power. Couchbase Eventing is must have tool in your big data arsenal allowing small scripts to overcome hard to solve problems.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-28T21:49:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T05:40:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/05\/eventing_water_drop_impact_on_a_water-surface_detail-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"897\" \/>\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=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/\"},\"author\":{\"name\":\"Jon Strabala, Principal Product Manager, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c991579f88217edee79ffedb6fc914cc\"},\"headline\":\"Couchbase Eventing: Small Scripts That Solve Big Problems\",\"datePublished\":\"2020-05-28T21:49:24+00:00\",\"dateModified\":\"2025-06-14T05:40:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/\"},\"wordCount\":1564,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/05\/eventing_water_drop_impact_on_a_water-surface_detail-scaled.jpg\",\"keywords\":[\"MDS\",\"Multi-Dimensional Scaling (MDS)\",\"mutation\"],\"articleSection\":[\"Application Design\",\"Best Practices and Tutorials\",\"Couchbase Architecture\",\"Couchbase Server\",\"Eventing\",\"Multi-Dimensional Scaling (MDS)\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/\",\"name\":\"Couchbase Eventing: Small Scripts That Solve Big Problems - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/05\/eventing_water_drop_impact_on_a_water-surface_detail-scaled.jpg\",\"datePublished\":\"2020-05-28T21:49:24+00:00\",\"dateModified\":\"2025-06-14T05:40:23+00:00\",\"description\":\"With simple functions come great power. Couchbase Eventing is must have tool in your big data arsenal allowing small scripts to overcome hard to solve problems.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/05\/eventing_water_drop_impact_on_a_water-surface_detail-scaled.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/05\/eventing_water_drop_impact_on_a_water-surface_detail-scaled.jpg\",\"width\":2560,\"height\":897,\"caption\":\"Eventing small scripts\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Couchbase Eventing: Small Scripts That Solve Big Problems\"}]},{\"@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":"Couchbase Eventing: Small Scripts That Solve Big Problems - The Couchbase Blog","description":"Con funciones simples viene un gran poder. Couchbase Eventing es una herramienta imprescindible en tu arsenal de big data que permite a peque\u00f1os scripts superar problemas dif\u00edciles de resolver.","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\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/","og_locale":"es_MX","og_type":"article","og_title":"Couchbase Eventing: Small Scripts That Solve Big Problems","og_description":"With simple functions come great power. Couchbase Eventing is must have tool in your big data arsenal allowing small scripts to overcome hard to solve problems.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/","og_site_name":"The Couchbase Blog","article_published_time":"2020-05-28T21:49:24+00:00","article_modified_time":"2025-06-14T05:40:23+00:00","og_image":[{"width":2560,"height":897,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/05\/eventing_water_drop_impact_on_a_water-surface_detail-scaled.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":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/"},"author":{"name":"Jon Strabala, Principal Product Manager, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c991579f88217edee79ffedb6fc914cc"},"headline":"Couchbase Eventing: Small Scripts That Solve Big Problems","datePublished":"2020-05-28T21:49:24+00:00","dateModified":"2025-06-14T05:40:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/"},"wordCount":1564,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/05\/eventing_water_drop_impact_on_a_water-surface_detail-scaled.jpg","keywords":["MDS","Multi-Dimensional Scaling (MDS)","mutation"],"articleSection":["Application Design","Best Practices and Tutorials","Couchbase Architecture","Couchbase Server","Eventing","Multi-Dimensional Scaling (MDS)"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/","url":"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/","name":"Couchbase Eventing: Small Scripts That Solve Big Problems - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/05\/eventing_water_drop_impact_on_a_water-surface_detail-scaled.jpg","datePublished":"2020-05-28T21:49:24+00:00","dateModified":"2025-06-14T05:40:23+00:00","description":"Con funciones simples viene un gran poder. Couchbase Eventing es una herramienta imprescindible en tu arsenal de big data que permite a peque\u00f1os scripts superar problemas dif\u00edciles de resolver.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/05\/eventing_water_drop_impact_on_a_water-surface_detail-scaled.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2020\/05\/eventing_water_drop_impact_on_a_water-surface_detail-scaled.jpg","width":2560,"height":897,"caption":"Eventing small scripts"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Couchbase Eventing: Small Scripts That Solve Big Problems"}]},{"@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\/8743","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=8743"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/8743\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/8745"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=8743"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=8743"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=8743"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=8743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}