{"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\/pt\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/","title":{"rendered":"Eventos do Couchbase: Pequenos scripts que resolvem grandes problemas"},"content":{"rendered":"<h2>Eventing Simple Yet Powerful:<\/h2>\n<p><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/eventing\/\">Eventos<\/a> permite que pequenos scripts superem problemas dif\u00edceis de resolver.<\/p>\n<p><em>Se voc\u00ea j\u00e1 conhece o Couchbase e o Eventing, fique \u00e0 vontade para pular a breve vis\u00e3o geral e passar para a se\u00e7\u00e3o <a href=\"#examples\">exemplos.<\/a><\/em><\/p>\n<h2>Vis\u00e3o geral:<\/h2>\n<p>Em primeiro lugar, vamos dar uma olhada no b\u00e1sico <a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/eventing\/eventing-lifecycle.html\">Ciclo de vida de 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>As etapas abaixo mostram como \u00e9 f\u00e1cil escrever e usar uma Eventing Function<\/p>\n<ul>\n<li>Adicionar (ou importar) uma Eventing Function por meio da interface do usu\u00e1rio do Couchbase Server.<\/li>\n<li>Atribua uma fonte de dados, um bucket de bloco de notas e algumas associa\u00e7\u00f5es para manipular documentos ou se comunicar com o mundo externo.<\/li>\n<li>Implemente algum c\u00f3digo JavaScript para processar a muta\u00e7\u00e3o recebida.<\/li>\n<li>Salve sua nova fun\u00e7\u00e3o e clique em \"Deploy\" (Implementar)<\/li>\n<\/ul>\n<p>\u00c9 isso, agora voc\u00ea tem uma fun\u00e7\u00e3o distribu\u00edda que responde a muta\u00e7\u00f5es em seu conjunto de dados em tempo real em todo o cluster.<\/p>\n<p>O servi\u00e7o Eventing oferece uma plataforma sem infraestrutura que pode escalonar suas Eventing Functions \u00e0 medida que sua empresa cresce, seja um pico \u00fanico ou um aumento mensal nos armazenamentos de dados ou nos clientes atendidos, sem se preocupar com o fato de que suas fun\u00e7\u00f5es Eventing baseadas em JavaScript est\u00e3o sendo executadas de forma distribu\u00edda paralela robusta e confi\u00e1vel.  Para saber mais sobre o Couchbase Eventing, consulte a se\u00e7\u00e3o <a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/eventing\/eventing-overview.html\">Vis\u00e3o geral de eventos<\/a> em nossa documenta\u00e7\u00e3o.<\/p>\n<p>Os exemplos deste artigo mostram que, em alguns casos, o Eventing pode agir como uma gota de \u00f3leo para \"liberar\" as partes m\u00f3veis de seus aplicativos.<\/p>\n<h2>O Couchbase \u00e9 um banco de dados que voc\u00ea constr\u00f3i sob encomenda:<\/h2>\n<p>Gosto de pensar em um cluster do Couchbase como um conjunto de \"microsservi\u00e7os\" escalon\u00e1veis e interoper\u00e1veis. Esses servi\u00e7os podem ser conectados e dimensionados para atender a um conjunto espec\u00edfico de necessidades operacionais e comerciais.<\/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>O Couchbase oferece escalonamento multidimensional, ou MDS, em seis servi\u00e7os principais com interfer\u00eancia m\u00ednima de recursos entre eles. Al\u00e9m disso, cada servi\u00e7o do Couchbase pode ser dimensionado de forma independente, bastando adicionar mais n\u00f3s. Isso permite que os clientes criem o cluster ideal de v\u00e1rios n\u00f3s com o menor TCO poss\u00edvel para a(s) tarefa(s) em quest\u00e3o.<\/p>\n<ul>\n<li>Os n\u00f3s de dados s\u00e3o facilmente dimensionados para fornecer opera\u00e7\u00f5es KV com reconhecimento de JSON em escala para pesquisas de registros \u00fanicos e m\u00faltiplos, o que \u00e9 extremamente r\u00e1pido.  Eu acabei de mencionar que \"<em><u>para pesquisas de registros \u00fanicos e m\u00faltiplos, \u00e9 extremamente r\u00e1pido<\/u><\/em>\", sim, eu fiz, mas realmente quero enfatizar isso.<\/li>\n<li>Os n\u00f3s de consulta s\u00e3o facilmente dimensionados para fornecer \u00edndices e tamb\u00e9m N1QL, um aprimoramento de SQL que funciona nativamente com documentos JSON, o que permite que os programadores comecem a trabalhar rapidamente sem precisar aprender uma nova maneira de pensar.<\/li>\n<li>Os n\u00f3s de \u00edndice s\u00e3o facilmente dimensionados para fornecer \u00edndices flex\u00edveis para acelerar algumas ou todas as consultas N1QL.<\/li>\n<li>Os n\u00f3s de pesquisa s\u00e3o facilmente dimensionados para fornecer pesquisa de texto completo para consultas em linguagem natural, com: pesquisa com reconhecimento de idioma, pontua\u00e7\u00e3o de resultados e \u00edndices r\u00e1pidos baseados em FTS,<\/li>\n<li>O n\u00f3 Analytics \u00e9 facilmente dimensionado para o recurso de gerenciamento de dados paralelos para executar com efici\u00eancia consultas complexas: grandes opera\u00e7\u00f5es ad hoc de jun\u00e7\u00e3o, conjunto, agrega\u00e7\u00e3o e agrupamento em grandes conjuntos de dados.<\/li>\n<li>O servi\u00e7o Eventing \u00e9 facilmente dimensionado para fornecer um paradigma de computa\u00e7\u00e3o que os desenvolvedores podem usar para lidar com altera\u00e7\u00f5es (ou muta\u00e7\u00f5es) de dados e reagir a elas em tempo real.<\/li>\n<\/ul>\n<p>Como em todas as linhas de produtos, os servi\u00e7os mais recentes do Couchbase Query, Search, Eventing e Analytics t\u00eam alguns defeitos, mas, no conjunto, a cesta completa oferece um pacote unificado ou um balc\u00e3o \u00fanico para resolver uma infinidade de problemas.  Falando s\u00e9rio, se voc\u00ea n\u00e3o se importa com um produto unificado e tudo o que vai fazer \u00e9 usar o FTS, talvez considere usar o Elasticsearch, mas quando precisar integrar os resultados do FTS com o N1QL (SQL para JSON), talvez tenha sido muito melhor come\u00e7ar com o Couchbase.<\/p>\n<p>Hoje, utilizaremos apenas dois servi\u00e7os: 1) o servi\u00e7o KV principal fornecido pelos n\u00f3s de dados; 2) o Eventing Service.  Destacarei, por meio de algumas pequenas fun\u00e7\u00f5es JavaScript, como voc\u00ea pode superar alguns problemas dif\u00edceis de escala aproveitando o Eventing Service.<\/p>\n<h2>Pr\u00e9-requisitos \/ Aprendendo sobre Eventing:<\/h2>\n<p>Neste artigo, usaremos a vers\u00e3o mais recente do GA, ou seja, a vers\u00e3o 6.5.1 do Couchbase<\/p>\n<p>No entanto, se voc\u00ea n\u00e3o estiver familiarizado com o Couchbase ou com o servi\u00e7o Eventing, consulte o GET STARTED e um exemplo de Eventing, especificamente o seguinte:<\/p>\n<ul>\n<li>Configure um servidor Couchbase 6.5.1 funcional de acordo com as instru\u00e7\u00f5es em <a href=\"https:\/\/docs.couchbase.com\/server\/current\/getting-started\/start-here.html\">Comece aqui!<\/a><\/li>\n<li id=\"examples\">Entenda como implantar uma fun\u00e7\u00e3o b\u00e1sica de Eventing de acordo com as instru\u00e7\u00f5es do <a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/eventing\/eventing-example-data-enrichment.html\">Enriquecimento de dados<\/a> exemplo, especificamente o \"Caso 2\", em que usaremos apenas um compartimento, o compartimento de \"origem\".<\/li>\n<\/ul>\n<h2>Enriquecimento de dados por meio de eventos:<\/h2>\n<h4>Um problema t\u00edpico do cliente<\/h4>\n<p>Um sistema de produ\u00e7\u00e3o ativo armazenou bilh\u00f5es de documentos. Surgiu uma nova necessidade comercial em que os dados existentes precisam ser enriquecidos.  Essa necessidade de dados adicionais afeta o conjunto completo de documentos.  O impacto operacional abrange dados antigos ou hist\u00f3ricos e tamb\u00e9m dados novos ou mutantes. A empresa precisa manter o sistema de produ\u00e7\u00e3o em funcionamento ininterrupto e responder continuamente a novos dados em tempo real.<\/p>\n<p>Considere um aplicativo de exemplo um tanto for\u00e7ado, um servi\u00e7o de pesquisa GeoIP. Esse utilit\u00e1rio precisa de um conjunto de dados para permitir a pesquisa de pa\u00edses por intervalos de endere\u00e7os IPV4. A implementa\u00e7\u00e3o inicial armazenava registros da seguinte forma:<\/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 ou mais tarde, novos requisitos comerciais mudam. A engenharia precisava que os documentos JSON fossem enriquecidos com novos campos.  O requisito era incluir as representa\u00e7\u00f5es num\u00e9ricas dos dois endere\u00e7os 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 para o resgate<\/h4>\n<p>Uma simples fun\u00e7\u00e3o de evento de 14 linhas JavaScript (2 das quais s\u00e3o coment\u00e1rios) pode ser escrita e implementada para resolver o problema com o m\u00ednimo de recursos.<\/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>Ao implantar a fun\u00e7\u00e3o acima com um \"Limite de feed\" definido como \"Tudo\", todos os documentos do tipo: \"ip_country_map\" s\u00e3o processados e enriquecidos.<\/p>\n<p>A Eventing Function \u00e9 deixada \"implantada\", reagindo a todas as novas inser\u00e7\u00f5es ou atualiza\u00e7\u00f5es (ou muta\u00e7\u00f5es) em tempo real, enriquecendo novos itens e tamb\u00e9m atualizando itens existentes em altera\u00e7\u00f5es de \"ip_start_num\" ou \"ip_end_num\" para as representa\u00e7\u00f5es \"num\u00e9ricas\" adequadas.<\/p>\n<p>Como os documentos s\u00e3o enriquecidos (os campos antigos ainda est\u00e3o presentes), os aplicativos de produ\u00e7\u00e3o existentes continuar\u00e3o funcionando.  Todos os dados novos ou alterados s\u00e3o atualizados em tempo real para o novo esquema.  Os componentes do aplicativo GeoIP s\u00e3o desacoplados por meio dessa fun\u00e7\u00e3o de evento simples, de modo que podem ser atualizados um de cada vez.<\/p>\n<p>Quando todos os componentes de produ\u00e7\u00e3o tiverem sido atualizados, a Eventing Function poder\u00e1 ser desimplantada e desativada.<\/p>\n<h2>Elimina\u00e7\u00e3o de dados obsoletos por meio de eventos:<\/h2>\n<h4>Um problema t\u00edpico do cliente<\/h4>\n<p>Um sistema de produ\u00e7\u00e3o ativo armazenou mais de 7 bilh\u00f5es de documentos.  Todos os documentos t\u00eam uma expira\u00e7\u00e3o autom\u00e1tica (ou <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/how-to-manage-ttl-with-couchbase-n1ql\/\">TTL<\/a> para tempo de vida). O ambiente de produ\u00e7\u00e3o recebe constantemente novos dados e expira constantemente os dados antigos.<\/p>\n<p>Foi cometido um erro operacional que resultou na cria\u00e7\u00e3o de 2 bilh\u00f5es de documentos sem validade.<\/p>\n<p>O cliente n\u00e3o tinha os recursos (nem desejava pagar pelos recursos) para criar um \u00edndice grande para utilizar o N1QL para identificar, selecionar e eliminar os dados que n\u00e3o tinham um TTL ativo (diferente de zero) quando n\u00e3o fossem mais \u00fateis.<\/p>\n<h4>Eventing para o resgate<\/h4>\n<p>Uma simples fun\u00e7\u00e3o de evento JavaScript de seis (6) linhas (2 das quais s\u00e3o coment\u00e1rios) foi implementada e resolveu o problema com o m\u00ednimo de recursos.<\/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>Ao implementar a fun\u00e7\u00e3o acima com um \"Limite de alimenta\u00e7\u00e3o\" definido como \"Tudo\", todo o conjunto de documentos no bucket de origem foi digitalizado. Todos os documentos com um TTL diferente de zero (o que significa que eles n\u00e3o tinham expira\u00e7\u00e3o) foram ignorados.  Somente os documentos correspondentes com um TTL maior que zero s\u00e3o exclu\u00eddos.<\/p>\n<p>Depois que o bucket de origem foi limpo, a Eventing Function n\u00e3o foi implantada, pois era usada como uma ferramenta administrativa.<\/p>\n<p>Observe que poder\u00edamos substituir o teste de expira\u00e7\u00e3o !== 0 em nosso JavaScript para filtrar os dados para qualquer finalidade necess\u00e1ria.<\/p>\n<p>\u00c9 muito f\u00e1cil adivinhar o que estamos fazendo abaixo:<\/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>Na verdade, poder\u00edamos facilmente atualizar o que foi dito acima para executar um arquivamento em cascata e excluir n\u00e3o apenas o cliente, mas qualquer outra informa\u00e7\u00e3o relacionada, como pedidos, devolu\u00e7\u00f5es e endere\u00e7os de entrega. Consulte o exemplo <a href=\"https:\/\/docs.couchbase.com\/server\/6.5\/eventing\/eventing-examples-cascade-delete.html\">Cascade Delete<\/a> na documenta\u00e7\u00e3o de Eventing.<\/p>\n<h2>Remo\u00e7\u00e3o de dados confidenciais via Eventing:<\/h2>\n<h4>Um problema t\u00edpico do cliente<\/h4>\n<p>Uma empresa que executa o Couchbase no local em produ\u00e7\u00e3o precisava compartilhar informa\u00e7\u00f5es de perfil de clientes (150 milh\u00f5es e em crescimento).  Seu parceiro de neg\u00f3cios tamb\u00e9m est\u00e1 executando o Couchbase, mas em um provedor de nuvem, o AWS.<\/p>\n<p>Dado um registro de perfil t\u00edpico como o seguinte:<\/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>Eles n\u00e3o podiam simplesmente compartilhar todo o perfil, pois ele continha dados confidenciais sobre as prefer\u00eancias do usu\u00e1rio e os m\u00e9todos de pagamento.  Eles s\u00f3 precisavam compartilhar um subconjunto limitado, como o seguinte:<\/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>O cliente queria substituir a solu\u00e7\u00e3o SPARK de uso intermedi\u00e1rio, que exigia horas de falha para inicializar e fornecia apenas um processo em lote lento (horas para refletir as atualiza\u00e7\u00f5es) e sincronizar as informa\u00e7\u00f5es do perfil em tempo real.<\/p>\n<h4>Eventing para o resgate<\/h4>\n<p>Uma simples fun\u00e7\u00e3o de eventos de nove (9) linhas JavaScript (3 das quais s\u00e3o coment\u00e1rios) foi implementada e resolveu o problema com 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>Ao implementar a fun\u00e7\u00e3o acima com um \"Limite de alimenta\u00e7\u00e3o\" definido como \"Tudo\", todo o conjunto de documentos no bucket de origem foi digitalizado e todos os documentos do tipo: \"master_profile\" foram processados e apenas um subdocumento de cada perfil sem as informa\u00e7\u00f5es confidenciais foi copiado para o bucket de destino compartilhado.<\/p>\n<p>A Eventing Function \u00e9 sempre implantada, reagindo a todas as altera\u00e7\u00f5es (ou muta\u00e7\u00f5es) de perfil de usu\u00e1rio em tempo real e encaminhando cada muta\u00e7\u00e3o para o bucket de destino do AWS.<\/p>\n<p>Nesse caso de uso, uma sincroniza\u00e7\u00e3o final de balde para balde \u00e9 realizada por meio do Couchbase <a href=\"https:\/\/docs.couchbase.com\/server\/current\/learn\/clusters-and-availability\/xdcr-overview.html\">XCDR<\/a> em nenhum momento os dados confidenciais deixam o cluster local e nunca s\u00e3o transmitidos para o AWS.<\/p>\n<h3>Recursos<\/h3>\n<ul>\n<li><em>Download:\u00a0<\/em><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/?family=server&amp;product=couchbase-server-developer\">Download do Couchbase Server 6.5.1<\/a><\/li>\n<\/ul>\n<h3>Refer\u00eancias<\/h3>\n<ul>\n<li>Documenta\u00e7\u00e3o do 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 O que h\u00e1 de novo:<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 do Couchbase sobre eventos:<br \/>\n<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/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 v25.8 (Yoast SEO v25.8) - 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\/pt\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\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\/pt\/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\":\"pt-BR\",\"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\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c991579f88217edee79ffedb6fc914cc\",\"name\":\"Jon Strabala, Principal Product Manager, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\/pt\/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":"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.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/","og_locale":"pt_BR","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\/pt\/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":"pt-BR","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":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/couchbase-eventing-small-scripts-that-solve-big-problems-at-scale\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@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":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/c991579f88217edee79ffedb6fc914cc","name":"Jon Strabala, gerente principal de produtos da Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@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 \u00e9 gerente de produto principal, respons\u00e1vel pelo Couchbase Eventing Service. Antes de ingressar na Couchbase, ele passou mais de 20 anos criando produtos de software em v\u00e1rios dom\u00ednios, come\u00e7ando com EDA no setor aeroespacial e depois fazendo a transi\u00e7\u00e3o para a cria\u00e7\u00e3o de software corporativo com foco no que hoje \u00e9 chamado de \"IoT\" e \"dados em escala\". Jon trabalhou em v\u00e1rias pequenas empresas de consultoria de software at\u00e9 abrir e gerenciar sua pr\u00f3pria empresa. Ele tem ampla experi\u00eancia em NoSQL\/NewSQL, tanto na contribui\u00e7\u00e3o quanto na comercializa\u00e7\u00e3o de novas tecnologias, como bitmaps compactados e armazenamentos de colunas. Jon \u00e9 bacharel em engenharia el\u00e9trica e mestre em engenharia da computa\u00e7\u00e3o, ambos pela Universidade do Sul da Calif\u00f3rnia, e tem MBA pela Universidade da Calif\u00f3rnia em Irvine.","url":"https:\/\/www.couchbase.com\/blog\/pt\/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 \u00e9 gerente de produto principal, respons\u00e1vel pelo Couchbase Eventing Service. Antes de ingressar na Couchbase, ele passou mais de 20 anos criando produtos de software em v\u00e1rios dom\u00ednios, come\u00e7ando com EDA no setor aeroespacial e depois fazendo a transi\u00e7\u00e3o para a cria\u00e7\u00e3o de software corporativo com foco no que hoje \u00e9 chamado de \"IoT\" e \"dados em escala\". Jon trabalhou em v\u00e1rias pequenas empresas de consultoria de software at\u00e9 abrir e gerenciar sua pr\u00f3pria empresa. Ele tem ampla experi\u00eancia em NoSQL\/NewSQL, tanto na contribui\u00e7\u00e3o quanto na comercializa\u00e7\u00e3o de novas tecnologias, como bitmaps compactados e armazenamentos de colunas. Jon \u00e9 bacharel em engenharia el\u00e9trica e mestre em engenharia da computa\u00e7\u00e3o, ambos pela Universidade do Sul da Calif\u00f3rnia, e tem MBA pela Universidade da Calif\u00f3rnia em Irvine."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/8743","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/42711"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=8743"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/8743\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/8745"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=8743"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=8743"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=8743"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=8743"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}