{"id":1919,"date":"2015-04-23T14:27:09","date_gmt":"2015-04-23T14:27:08","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1919"},"modified":"2015-04-23T14:27:09","modified_gmt":"2015-04-23T14:27:08","slug":"ruby-and-n1ql-first-taste","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/ruby-and-n1ql-first-taste\/","title":{"rendered":"Ruby y SQL para documentos (antes N1QL): Una primera toma de contacto"},"content":{"rendered":"<p>Las caracter\u00edsticas de N1QL est\u00e1n llegando a m\u00e1s y m\u00e1s SDKs- ahora incluyendo Ruby. Me gustar\u00eda dar una r\u00e1pida introducci\u00f3n de c\u00f3mo funcionan las consultas estructuradas en Ruby. Por el momento la librer\u00eda no provee un ODM o alguna otra abstracci\u00f3n de alto nivel encima de ella, pero casi todo es posible de otra manera.<\/p>\n<p>Se ha a\u00f1adido soporte experimental para N1QL en <a href=\"https:\/\/rubygems.org\/gems\/couchbase\/versions\/1.3.12\">reciente versi\u00f3n menor 1.3.12<\/a>\u00a0aunque es posible que la API cambie en la versi\u00f3n final. En los siguientes ejemplos le mostrar\u00e9 c\u00f3mo trabajar con ella utilizando <a href=\"https:\/\/github.com\/couchbase\/couchbase-examples\/blob\/master\/travel-sample.zip\">nuevo conjunto de datos sobre viajes<\/a>que se encuentra en el <a href=\"\/blog\/es\/introducing-developer-preview-for-couchbase-server-4.0\/\">4.0 avance para desarrolladores<\/a>. En este blog, estoy asumiendo aqu\u00ed que usted ha instalado la versi\u00f3n m\u00e1s reciente del cliente ruby (si no es as\u00ed, por favor ejecute \"<code>gem install -v 1.3.12<\/code>\") y tener un Couchbase Server local con el servicio de consulta activado.<\/p>\n<p>En primer lugar, vamos a establecer una conexi\u00f3n con el cubo:<\/p>\n<pre>\ncb = Couchbase.connect(bucket: &#39;travel-sample&#39;)<\/pre>\n<p>El punto de entrada para las consultas N1QL es <code>Couchbase::Bucket#query<\/code> que acepta una cadena en N1QL y devuelve un hash con <code>:rows<\/code> y <code>:meta<\/code> donde se entrega la respuesta del servidor. Si hay un problema, la biblioteca levantar\u00e1 <code>Couchbase::Error::Consulta<\/code> con metadatos adjuntos para analizar el error.<\/p>\n<p>Por ejemplo, vamos a crear un \u00edndice primario para todo el conjunto de datos:<\/p>\n<pre>\ncb.query(\"CREATE PRIMARY INDEX on `travel-sample`\")<\/pre>\n<p>Con el \u00edndice primario definido podemos obtener los documentos por sus claves:<\/p>\n<pre>\ncb.query(&#39;SELECT * FROM `travel-sample` USE KEYS [\"airline_24\"]&#39;)\n# => {:rows=>\n#      [{\"travel-sample\"=>\n#         {\"callsign\"=>\"AMERICAN\",\n#          \"country\"=>\"United States\",\n#          \"iata\"=>\"AA\",\n#          \"icao\"=>\"AAL\",\n#          \"id\"=>24,\n#          \"name\"=>\"American Airlines\",\n#          \"type\"=>\"airline\"}}],\n#     :meta=>\n#      {\"requestID\"=>\"7cc10c30-ecb7-4e65-b582-fe9852e85d5b\",\n#       \"signature\"=>{\"*\"=>\"*\"},\n#       \"results\"=>[],\n#       \"status\"=>\"success\",\n#       \"metrics\"=>\n#        {\"elapsedTime\"=>\"8.308061ms\",\n#         \"executionTime\"=>\"8.206911ms\",\n#         \"resultCount\"=>1,\n#         \"resultSize\"=>306}}}<\/pre>\n<p>Para simplificar los ejemplos, podemos utilizar la siguiente funci\u00f3n para despojar <code>:meta<\/code> y extraer s\u00f3lo los valores.<\/p>\n<pre>\ndef strip(doc)\n  doc[:rows]\nend<\/pre>\n<p>Vamos a responder a algunas preguntas sobre este cubo de muestra. Como recordar\u00e1s, los datos de cerveza de muestra anteriores conten\u00edan unos 7.000 documentos:<\/p>\n<pre>\nstrip cb.query(&#39;SELECT COUNT(*) AS total FROM `travel-sample`&#39;)\n# => [{\"total\"=>31621}]<\/pre>\n<p>Es una gran caja de arena para nuestros experimentos. \u00bfQu\u00e9 tipo de documentos contiene?<\/p>\n<pre>\nstrip cb.query(&#39;SELECT type, COUNT(*) AS total FROM `travel-sample` GROUP BY type&#39;)\n# => [{\"total\"=>1969, \"type\"=>\"airport\"},\n#     {\"total\"=>5389, \"type\"=>\"landmark\"},\n#     {\"total\"=>187, \"type\"=>\"airline\"},\n#     {\"total\"=>24076, \"type\"=>\"route\"}]\n<\/pre>\n<p>Como tarea para casa, puedes explorar m\u00e1s a fondo la estructura de la base de datos de ejemplo.  De momento, respondamos a algunas preguntas m\u00e1s pr\u00e1cticas. \u00bfQu\u00e9 rutas est\u00e1n disponibles para alguien en Los \u00c1ngeles que quiere ver la Torre Eiffel en Par\u00eds? Una aplicaci\u00f3n sencilla podr\u00eda ser la siguiente (suponiendo que sepa lo que significan LAX y CDG).<\/p>\n<pre>\nrequire &#39;date&#39;\n\nroutes = strip cb.query(&#39;\n  SELECT airline.name, route.equipment, route.schedule\n    FROM `travel-sample` route\n    JOIN `travel-sample` airline ON keys route.airlineid\n    WHERE route.sourceairport = \"LAX\" AND route.destinationairport = \"CDG\"\n&#39;)\n\nroutes.each do |route|\n  puts(\"--------------------------\")\n  puts(\"#{route[&#39;name&#39;]} (#{route[&#39;equipment&#39;]})\")\n  puts(\"--------------------------\")\n  route[&#39;schedule&#39;].each do |flight|\n    day = Date::ABBR_DAYNAMES[flight[&#39;day&#39;]]\n    puts(\"#{flight[&#39;flight&#39;]}: #{flight[&#39;utc&#39;]}, #{day}\")\n  end\nend\n<\/pre>\n<p>Si ejecutas este c\u00f3digo, obtendr\u00e1s una tabla horaria con un buen formato de todas las rutas para ver la famosa torre, como se muestra a continuaci\u00f3n.\u00a0<\/p>\n<pre>\n--------------------------\nDelta Air Lines (388 772)\n--------------------------\nDL024: 03:23:00, Sun\nDL856: 04:38:00, Sun\nDL124: 06:01:00, Sun\nDL249: 06:00:00, Sun\nDL142: 10:00:00, Mon\nDL757: 10:44:00, Tue\n...\n--------------------------\nAir Tahiti Nui (343)\n--------------------------\nTN070: 06:03:00, Sun\nTN040: 08:39:00, Mon\nTN832: 11:42:00, Tue\nTN752: 08:32:00, Tue\nTN519: 23:33:00, Tue\nTN278: 05:27:00, Tue\nTN325: 18:07:00, Wed\n...\n<\/pre>\n<p>Esto es todo por el momento, por favor, d\u00e9janos tus comentarios sobre la nueva consulta.  En particular, dinos qu\u00e9 tipo de soporte para Ruby te gustar\u00eda ver.<\/p>","protected":false},"excerpt":{"rendered":"<p>N1QL features are coming to more and more SDKs&#8211; now including Ruby. I&#39;d like to give a quick intro of how\u00a0structured queries in ruby work. At the moment library does not provide an\u00a0ODM or some other high-level abstraction atop of [&hellip;]<\/p>","protected":false},"author":25,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"ppma_author":[8995],"class_list":["post-1919","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ruby and SQL for Documents (formerly N1QL): A First Taste - The Couchbase Blog<\/title>\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\/ruby-and-n1ql-first-taste\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ruby and SQL for Documents (formerly N1QL): A First Taste\" \/>\n<meta property=\"og:description\" content=\"N1QL features are coming to more and more SDKs&#8211; now including Ruby. I&#039;d like to give a quick intro of how\u00a0structured queries in ruby work. At the moment library does not provide an\u00a0ODM or some other high-level abstraction atop of [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/ruby-and-n1ql-first-taste\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-04-23T14:27:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Sergey Avseyev, SDK Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@avsej\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sergey Avseyev, SDK Engineer, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/\"},\"author\":{\"name\":\"Sergey Avseyev, SDK Engineer, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/e9181374f225c90084ec3ba86bdcfa2e\"},\"headline\":\"Ruby and SQL for Documents (formerly N1QL): A First Taste\",\"datePublished\":\"2015-04-23T14:27:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/\"},\"wordCount\":392,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/\",\"name\":\"Ruby and SQL for Documents (formerly N1QL): A First Taste - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-04-23T14:27:08+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ruby and SQL for Documents (formerly N1QL): A First Taste\"}]},{\"@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\/e9181374f225c90084ec3ba86bdcfa2e\",\"name\":\"Sergey Avseyev, SDK Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/796ab283bd56fe3716a102ebe16daff6\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/288a892d231cf8c4e57ed0643e4681b4654a141361f6ec3c5b79ccd4d885e038?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/288a892d231cf8c4e57ed0643e4681b4654a141361f6ec3c5b79ccd4d885e038?s=96&d=mm&r=g\",\"caption\":\"Sergey Avseyev, SDK Engineer, Couchbase\"},\"description\":\"Sergey Avseyev is a SDK Engineer at Couchbase. Sergey Avseyev is responsible for development of Kafka connector, and underlying library, which implements DCP, Couchbase replication protocol. Also maintaining PHP SDK for Couchbase.\",\"sameAs\":[\"https:\/\/x.com\/avsej\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/es\/author\/sergey-avseyev\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ruby and SQL for Documents (formerly N1QL): A First Taste - The Couchbase Blog","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\/ruby-and-n1ql-first-taste\/","og_locale":"es_MX","og_type":"article","og_title":"Ruby and SQL for Documents (formerly N1QL): A First Taste","og_description":"N1QL features are coming to more and more SDKs&#8211; now including Ruby. I&#39;d like to give a quick intro of how\u00a0structured queries in ruby work. At the moment library does not provide an\u00a0ODM or some other high-level abstraction atop of [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/ruby-and-n1ql-first-taste\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-04-23T14:27:08+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Sergey Avseyev, SDK Engineer, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@avsej","twitter_misc":{"Written by":"Sergey Avseyev, SDK Engineer, Couchbase","Est. reading time":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/"},"author":{"name":"Sergey Avseyev, SDK Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/e9181374f225c90084ec3ba86bdcfa2e"},"headline":"Ruby and SQL for Documents (formerly N1QL): A First Taste","datePublished":"2015-04-23T14:27:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/"},"wordCount":392,"commentCount":1,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Uncategorized"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/","url":"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/","name":"Ruby and SQL for Documents (formerly N1QL): A First Taste - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-04-23T14:27:08+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/ruby-and-n1ql-first-taste\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ruby and SQL for Documents (formerly N1QL): A First Taste"}]},{"@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\/e9181374f225c90084ec3ba86bdcfa2e","name":"Sergey Avseyev, Ingeniero SDK, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/796ab283bd56fe3716a102ebe16daff6","url":"https:\/\/secure.gravatar.com\/avatar\/288a892d231cf8c4e57ed0643e4681b4654a141361f6ec3c5b79ccd4d885e038?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/288a892d231cf8c4e57ed0643e4681b4654a141361f6ec3c5b79ccd4d885e038?s=96&d=mm&r=g","caption":"Sergey Avseyev, SDK Engineer, Couchbase"},"description":"Sergey Avseyev es Ingeniero SDK en Couchbase. Sergey Avseyev es responsable del desarrollo del conector Kafka, y la biblioteca subyacente, que implementa DCP, el protocolo de replicaci\u00f3n de Couchbase. Tambi\u00e9n mantiene PHP SDK para Couchbase.","sameAs":["https:\/\/x.com\/avsej"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/sergey-avseyev\/"}]}},"authors":[{"term_id":8995,"user_id":25,"is_guest":0,"slug":"sergey-avseyev","display_name":"Sergey Avseyev, SDK Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/288a892d231cf8c4e57ed0643e4681b4654a141361f6ec3c5b79ccd4d885e038?s=96&d=mm&r=g","author_category":"","last_name":"Avseyev, SDK Engineer, Couchbase","first_name":"Sergey","job_title":"","user_url":"","description":"Sergey Avseyev es Ingeniero SDK en Couchbase. Sergey Avseyev es responsable del desarrollo del conector Kafka, y la biblioteca subyacente, que implementa DCP, el protocolo de replicaci\u00f3n de Couchbase. Tambi\u00e9n mantiene PHP SDK para Couchbase."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1919","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\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=1919"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1919\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=1919"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=1919"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=1919"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=1919"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}