{"id":1835,"date":"2014-12-16T17:37:33","date_gmt":"2014-12-16T17:37:32","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1835"},"modified":"2017-04-19T13:59:17","modified_gmt":"2017-04-19T20:59:17","slug":"why-membase-uses-erlang","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/why-membase-uses-erlang\/","title":{"rendered":"Por qu\u00e9 Membase utiliza Erlang"},"content":{"rendered":"<p>Cada vez con menos frecuencia (porque Erlang es cada vez m\u00e1s popular), me preguntan por qu\u00e9 Membase eligi\u00f3 utilizar <a href=\"https:\/\/www.erlang.org\/\">Erlang<\/a> para nuestro componente de gesti\u00f3n de clusters y supervisi\u00f3n de procesos. Alternativas comunes que la gente sugiere son Java, C++, <a href=\"https:\/\/python.org\">Python<\/a>, <a href=\"https:\/\/ruby-lang.org\">Ruby<\/a>y, m\u00e1s recientemente, <a href=\"https:\/\/nodejs.org\/\">node.js<\/a> y <a href=\"https:\/\/clojure.org\/\">Clojure<\/a> (que ser\u00eda mi primera opci\u00f3n si Erlang estuviera fuera de mis l\u00edmites).<\/p>\n<p>Sin duda, utilizar Erlang tiene muchas desventajas. En primer lugar, es otro entorno de ejecuci\u00f3n que construir, empaquetar y soportar - dependemos del sistema Python en Linux y OS X y usamos <a href=\"https:\/\/www.py2exe.org\/\">py2exe<\/a> para construir ejecutables para Windows, pero en realidad construimos y empaquetamos Erlang. Con Java, podr\u00edamos depender potencialmente de que el sistema ya tenga Java instalado - un poco m\u00e1s dif\u00edcil en Linux pero m\u00e1s f\u00e1cil en Windows. Adem\u00e1s, eventualmente necesitaremos un runtime Java para poder ejecutar m\u00f3dulos Java NodeCode.<\/p>\n<p>Adem\u00e1s, no hay tantos programadores que conozcan Erlang como Java o C++, o de hecho cualquiera de las posibles alternativas que he mencionado. Su sintaxis y sem\u00e1ntica son inusuales dado su <a href=\"https:\/\/en.wikipedia.org\/wiki\/Prolog\">Prolog<\/a> y el hecho de que se trata de un lenguaje pragm\u00e1tico que lleva utiliz\u00e1ndose y evolucionando desde 1986. Esto no ha resultado ser un problema para el equipo de ingenieros de Membase: cuatro de nosotros podemos trabajar en los componentes Erlang, y el c\u00f3digo Erlang es lo suficientemente peque\u00f1o como para que cualquiera de nosotros pueda mantenerlo f\u00e1cilmente. Sin embargo, definitivamente pone el list\u00f3n m\u00e1s alto tanto para nuestros propios desarrolladores como para los colaboradores de la comunidad para poder contribuir al subsistema de gesti\u00f3n de cl\u00fasteres si a\u00fan no conocen Erlang.<\/p>\n<p>Merece la pena. Erlang (Erlang\/OTP en realidad, que es a lo que la mayor\u00eda de la gente se refiere cuando dice \"Erlang tiene X\") hace desde el principio un mont\u00f3n de cosas que habr\u00edamos tenido que construir desde cero o intentar juntar bibliotecas existentes para hacerlas. Su <a href=\"https:\/\/learnyousomeerlang.com\/types-or-lack-thereof\">sistema de tipos din\u00e1mico<\/a> y <a href=\"https:\/\/erlang.org\/doc\/reference_manual\/expressions.html#pattern\">concordancia de patrones<\/a> (ala <a href=\"https:\/\/www.haskell.org\/\">Haskell<\/a> y ML) hacen que el c\u00f3digo Erlang tienda a ser a\u00fan m\u00e1s conciso que Python y Ruby, dos lenguajes conocidos por su capacidad de hacer mucho en pocas l\u00edneas de c\u00f3digo.<\/p>\n<p>Para nosotros, la mayor ventaja de utilizar Erlang es su compatibilidad integrada con <a href=\"https:\/\/ulf.wiger.net\/weblog\/2008\/02\/06\/what-is-erlang-style-concurrency\/\">concurrencia<\/a>. Erlang modela las tareas concurrentes como \"<a href=\"https:\/\/www.erlang.org\/doc\/reference_manual\/processes.html\">procesa<\/a>\" que s\u00f3lo pueden comunicarse entre s\u00ed mediante el paso de mensajes (\u00a1que utiliza la concordancia de patrones!), en lo que se conoce como el sistema <a href=\"https:\/\/en.wikipedia.org\/wiki\/Actor_model\">modelo de actor<\/a> de concurrencia. Esto por s\u00ed solo hace que toda una clase de errores relacionados con la concurrencia sean completamente imposibles. Aunque <a href=\"https:\/\/james-iry.blogspot.com\/2009\/04\/erlang-style-actors-are-all-about_16.html\">no evita completamente el bloqueo<\/a>resulta bastante dif\u00edcil pasar por alto un posible escenario de bloqueo cuando se escribe c\u00f3digo de esta manera. Si bien es cierto que <a href=\"https:\/\/stackoverflow.com\/questions\/22187\/erlang-style-concurrency-for-other-languages\">posible<\/a> para implementar el modelo de actor en la mayor\u00eda, si no en todos, de los entornos alternativos que he mencionado, y de hecho tales implementaciones existen, o bien est\u00e1n incompletas o sufren un desajuste de impedancia con las bibliotecas existentes que esperan que utilices hilos.<\/p>\n<p>Los procesos Erlang, adem\u00e1s de estar aislados unos de otros, son muy ligeros. Se pueden ejecutar f\u00e1cilmente un cuarto de mill\u00f3n de ellos en una \u00fanica m\u00e1quina virtual Erlang. El coste de generarlos es tambi\u00e9n bastante bajo, lo que hace innecesarios hacks tontos para reutilizarlos. Dado que se ejecutan en el mismo espacio de memoria y s\u00f3lo est\u00e1n aislados por software, el paso de mensajes entre ellos es extremadamente r\u00e1pido y, aunque la mayor\u00eda de las veces implica copiar los datos del mensaje, los mensajes suelen ser peque\u00f1os y esto permite que los procesos Erlang se recolecten de forma independiente.<\/p>\n<p>OTP organiza los procesos en un \"\u00e1rbol de supervisi\u00f3n\" en el que los procesos supervisores controlan a los procesos hijos, que tambi\u00e9n pueden ser supervisores, y los reinician, y potencialmente a cualquier proceso dependiente, en caso de que se bloqueen. Junto con el aislamiento de procesos, esto hace que las aplicaciones Erlang sean extremadamente tolerantes a fallos: cualquier proceso Erlang dentro de nuestro subsistema de gesti\u00f3n de cl\u00fasteres (que no sea el supervisor ra\u00edz) puede bloquearse sin que Membase se caiga. De hecho, hacemos muy buen uso de esto: cuando ocurren cosas inesperadas en cualquiera de nuestros procesos, generalmente dejamos que se bloqueen y se reinicien, devolvi\u00e9ndolos a un buen estado conocido. Por ejemplo, el proceso que gestiona la conexi\u00f3n administrativa al proceso local de memcached simplemente se bloquear\u00e1 si la conexi\u00f3n se agota o devuelve cualquier error que no se espera. Esto hace que el manejo de errores sea exactamente igual que el arranque, lo que deja menos lugares para que se escondan los bugs y facilita las pruebas.<\/p>\n<p>Para facilitar la estructuraci\u00f3n de una aplicaci\u00f3n compleja como un conjunto de procesos que interact\u00faan, Erlang\/OTP proporciona un conjunto est\u00e1ndar de \"<a href=\"https:\/\/www.erlang.org\/doc\/design_principles\/des_princ.html#id60487\">comportamientos<\/a>\"que pueden aplicar los m\u00f3dulos. El m\u00e1s com\u00fan de ellos es <a href=\"https:\/\/www.erlang.org\/doc\/man\/gen_server.html\">gen_servidor<\/a>el comportamiento gen\u00e9rico del servidor, que implementa un servidor b\u00e1sico con callbacks para las peticiones. <a href=\"https:\/\/www.erlang.org\/doc\/design_principles\/fsm.html\">Gen_fsm<\/a> implementa una m\u00e1quina de estados finitos, y <a href=\"https:\/\/www.erlang.org\/doc\/design_principles\/events.html\">gen_event<\/a> es para implementar manejadores de eventos y gestores de eventos.<\/p>\n<p>Los mensajes en Erlang se pueden enviar tan f\u00e1cilmente a un proceso que reside en otro nodo como a procesos en el mismo nodo; esto es completamente transparente para el programador. Erlang\/OTP tiene un mont\u00f3n de m\u00f3dulos que ayudan con el procesamiento distribuido. Por ejemplo, el m\u00f3dulo \"global\" proporciona un registro com\u00fan de nombres globales y bloqueos, similar al gestor de bloqueos Chubby de Google. Las \"aplicaciones distribuidas\" de OTP proporcionan una forma de asegurar que un determinado conjunto de procesos s\u00f3lo se inicie en un nodo. Mnesia es un DBMS distribuido con fuertes garant\u00edas de consistencia que utilizamos para almacenar estad\u00edsticas.<\/p>\n<p>Erlang ofrece un excelente soporte para la depuraci\u00f3n y la aplicaci\u00f3n de parches en sistemas activos. Despu\u00e9s de todo, se invent\u00f3 para construir sistemas con cinco nueves de tiempo de actividad. Si conoce la cookie criptogr\u00e1fica que los nodos utilizan para autenticarse entre s\u00ed, es trivial adjuntar otro nodo Erlang al cl\u00faster y ejecutar comandos arbitrarios en cualquier otro nodo, incluyendo \"recargar este m\u00f3dulo\". Este tipo de capacidad es muy valiosa cuando se necesita para corregir o trabajar en torno a un error y no se puede tomar abajo de un cl\u00faster o incluso un solo nodo para reemplazar el c\u00f3digo. Tambi\u00e9n es muy valiosa para las pruebas o cualquier situaci\u00f3n en la que nosotros (o un cliente) queremos hacer cambios en el estado del cl\u00faster que a\u00fan no se han implementado en la API REST.<\/p>\n<p>Al fin y al cabo, la verdadera cuesti\u00f3n no es si nos habr\u00eda sido posible implementar nuestra gesti\u00f3n de cl\u00fasteres en otro lenguaje; es realmente una cuesti\u00f3n de esfuerzo y mantenibilidad del resultado. Con cualquier otro entorno, habr\u00edamos tenido que reimplementar al menos parte de lo que Erlang\/OTP proporciona, mientras que nosotros realmente no nos hemos encontrado reimplementando caracter\u00edsticas proporcionadas por ning\u00fan otro entorno.<\/p>","protected":false},"excerpt":{"rendered":"<p>Less and less often (because Erlang is becoming more popular), I\u2019m asked why Membase chose to use Erlang for our cluster management and process supervision component. Common alternatives people suggest are Java, C++, Python, Ruby, and, more recently, node.js and [&hellip;]<\/p>\n","protected":false},"author":12,"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":[8985],"class_list":["post-1835","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Why Membase Uses Erlang - 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\/why-membase-uses-erlang\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Why Membase Uses Erlang\" \/>\n<meta property=\"og:description\" content=\"Less and less often (because Erlang is becoming more popular), I\u2019m asked why Membase chose to use Erlang for our cluster management and process supervision component. Common alternatives people suggest are Java, C++, Python, Ruby, and, more recently, node.js and [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/why-membase-uses-erlang\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-12-16T17:37:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-04-19T20:59:17+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=\"Sean Lynch\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sean Lynch\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/why-membase-uses-erlang\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/why-membase-uses-erlang\\\/\"},\"author\":{\"name\":\"Sean Lynch\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/74f9c611ecff848513c56c0140eb31cd\"},\"headline\":\"Why Membase Uses Erlang\",\"datePublished\":\"2014-12-16T17:37:32+00:00\",\"dateModified\":\"2017-04-19T20:59:17+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/why-membase-uses-erlang\\\/\"},\"wordCount\":1096,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/why-membase-uses-erlang\\\/#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\\\/why-membase-uses-erlang\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/why-membase-uses-erlang\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/why-membase-uses-erlang\\\/\",\"name\":\"Why Membase Uses Erlang - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/why-membase-uses-erlang\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/why-membase-uses-erlang\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2014-12-16T17:37:32+00:00\",\"dateModified\":\"2017-04-19T20:59:17+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/why-membase-uses-erlang\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/why-membase-uses-erlang\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/why-membase-uses-erlang\\\/#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\\\/why-membase-uses-erlang\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Why Membase Uses Erlang\"}]},{\"@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\\\/74f9c611ecff848513c56c0140eb31cd\",\"name\":\"Sean Lynch\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/123867b09e058a0cb2e2feee0f87f8bf263115c19fb7f6260f1cdb39ecc45f4d?s=96&d=mm&r=gabc8717cc349562a1fac7cd7e3e5e73c\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/123867b09e058a0cb2e2feee0f87f8bf263115c19fb7f6260f1cdb39ecc45f4d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/123867b09e058a0cb2e2feee0f87f8bf263115c19fb7f6260f1cdb39ecc45f4d?s=96&d=mm&r=g\",\"caption\":\"Sean Lynch\"},\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/author\\\/sean-lynch\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Why Membase Uses Erlang - 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\/why-membase-uses-erlang\/","og_locale":"es_MX","og_type":"article","og_title":"Why Membase Uses Erlang","og_description":"Less and less often (because Erlang is becoming more popular), I\u2019m asked why Membase chose to use Erlang for our cluster management and process supervision component. Common alternatives people suggest are Java, C++, Python, Ruby, and, more recently, node.js and [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/why-membase-uses-erlang\/","og_site_name":"The Couchbase Blog","article_published_time":"2014-12-16T17:37:32+00:00","article_modified_time":"2017-04-19T20:59:17+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":"Sean Lynch","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Sean Lynch","Est. reading time":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/why-membase-uses-erlang\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/why-membase-uses-erlang\/"},"author":{"name":"Sean Lynch","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/74f9c611ecff848513c56c0140eb31cd"},"headline":"Why Membase Uses Erlang","datePublished":"2014-12-16T17:37:32+00:00","dateModified":"2017-04-19T20:59:17+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/why-membase-uses-erlang\/"},"wordCount":1096,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/why-membase-uses-erlang\/#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\/why-membase-uses-erlang\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/why-membase-uses-erlang\/","url":"https:\/\/www.couchbase.com\/blog\/why-membase-uses-erlang\/","name":"Why Membase Uses Erlang - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/why-membase-uses-erlang\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/why-membase-uses-erlang\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2014-12-16T17:37:32+00:00","dateModified":"2017-04-19T20:59:17+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/why-membase-uses-erlang\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/why-membase-uses-erlang\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/why-membase-uses-erlang\/#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\/why-membase-uses-erlang\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Why Membase Uses Erlang"}]},{"@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\/74f9c611ecff848513c56c0140eb31cd","name":"Sean Lynch","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/123867b09e058a0cb2e2feee0f87f8bf263115c19fb7f6260f1cdb39ecc45f4d?s=96&d=mm&r=gabc8717cc349562a1fac7cd7e3e5e73c","url":"https:\/\/secure.gravatar.com\/avatar\/123867b09e058a0cb2e2feee0f87f8bf263115c19fb7f6260f1cdb39ecc45f4d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/123867b09e058a0cb2e2feee0f87f8bf263115c19fb7f6260f1cdb39ecc45f4d?s=96&d=mm&r=g","caption":"Sean Lynch"},"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/sean-lynch\/"}]}},"acf":[],"authors":[{"term_id":8985,"user_id":12,"is_guest":0,"slug":"sean-lynch","display_name":"Sean Lynch","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/123867b09e058a0cb2e2feee0f87f8bf263115c19fb7f6260f1cdb39ecc45f4d?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1835","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\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=1835"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1835\/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=1835"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=1835"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=1835"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=1835"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}