{"id":1851,"date":"2014-12-24T00:19:18","date_gmt":"2014-12-24T00:19:18","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1851"},"modified":"2014-12-24T00:19:18","modified_gmt":"2014-12-24T00:19:18","slug":"pure-storage-and-couchbase","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/pure-storage-and-couchbase\/","title":{"rendered":"Pure Storage, Couchbase y Node.js Almac\u00e9n de perfiles de usuario"},"content":{"rendered":"<p>\u00daltimamente se habla mucho del almacenamiento de clase empresarial. Pure Storage, l\u00edder reconocido en el sector, nos dio recientemente la oportunidad de desplegar Couchbase en uno de sus entornos de laboratorio.  El cl\u00faster de 8 nodos fue capaz de soportar f\u00e1cilmente una carga de trabajo de 1 mill\u00f3n de operaciones\/segundo de escritura 100%.  Se gener\u00f3 una carga de trabajo de 1.000.000 de escrituras\/segundo utilizando nuestra herramienta pillowfight ejecutada desde uno de los nodos del cl\u00faster con los siguientes par\u00e1metros:<\/p>\n<div class=\"geshifilter\">\n<div class=\"c geshifilter-c\" style=\"font-family:monospace;\"><span style=\"color: #339933;\">\/<\/span>usr<span style=\"color: #339933;\">\/<\/span>papelera<span style=\"color: #339933;\">\/<\/span>cbc<span style=\"color: #339933;\">\u2013<\/span>pelea de almohadas <span style=\"color: #339933;\">\u2013<\/span>U couchbase<span style=\"color: #339933;\">:<\/span><span style=\"color: #666666; font-style: italic;\">\/\/10.21.16.121\/default -m 64 -M 64 -c -1 -I 300000000 -r 100 -t 18 -B 2500<\/span><\/div>\n<\/div>\n<p><span style=\"font-family: inherit; font-size: 1em; line-height: 1.4375em;\">Esta carga de escritura sostenida de 1 mill\u00f3n de escrituras por segundo del cl\u00faster tiene el siguiente aspecto:<\/span><\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/pure-storage-and-couchbase\/pure_storage1.png\"\/><\/p>\n<p>Esta carga de trabajo, aunque impresionante, no ejercit\u00f3 la matriz de almacenamiento en lo m\u00e1s m\u00ednimo.  De hecho, era dif\u00edcil incluso localizar mucha carga en absoluto en el Pure Dashboard.  La raz\u00f3n de esto, es que con pillowfight utilizamos un documento de 64 bytes exclusivamente.  Es una carga de trabajo perfectamente razonable cuando se considera un caso de uso de internet de las cosas con un mont\u00f3n de peque\u00f1as claves\/valores escritos a alta velocidad.   \u00bfY en el caso de un almac\u00e9n de perfiles de usuario?  \u00bfC\u00f3mo se comportar\u00eda una carga de trabajo de escritura de alta velocidad 100% en este entorno utilizando una aplicaci\u00f3n del mundo real y datos de perfil de usuario con un estilo realista? \u00a0<\/p>\n<h2>Arn\u00e9s de prueba<\/h2>\n<p>Para esta aplicaci\u00f3n se requiere un arn\u00e9s de pruebas y un generador de carga de r\u00e1pido despliegue y node.js es la plataforma perfecta.   El c\u00f3digo fuente est\u00e1 disponible en <a href=\"https:\/\/github.com\/couchbaselabs\/user-profile-generator\">github<\/a> .   Primero se necesita un objeto de capa de datos con un m\u00e9todo de creaci\u00f3n:<\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family:monospace;\"><span style=\"color: #003366; font-weight: bold;\">var<\/span> couchbase <span style=\"color: #339933;\">=<\/span> requiere<span style=\"color: #009900;\">(<\/span><span style=\"color: #3366CC;\">couchbase<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n<span style=\"color: #003366; font-weight: bold;\">var<\/span> punto final<span style=\"color: #339933;\">=<\/span><span style=\"color: #3366CC;\">\u201c10.21.16.121:8091\u201d<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n<span style=\"color: #003366; font-weight: bold;\">var<\/span> grupo <span style=\"color: #339933;\">=<\/span> <span style=\"color: #003366; font-weight: bold;\">nuevo<\/span> couchbase.<span style=\"color: #660066;\">Grupo<\/span><span style=\"color: #009900;\">(<\/span>punto final<span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><\/p>\n<p><span style=\"color: #003366; font-weight: bold;\">var<\/span> db <span style=\"color: #339933;\">=<\/span> racimo.<span style=\"color: #660066;\">openBucket<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #3366CC;\">\"usuario\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #003366; font-weight: bold;\">funci\u00f3n<\/span> <span style=\"color: #009900;\">(<\/span>err<span style=\"color: #009900;\">)<\/span> <span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 <span style=\"color: #000066; font-weight: bold;\">si<\/span> <span style=\"color: #009900;\">(<\/span>err<span style=\"color: #009900;\">)<\/span> <span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 consola.<span style=\"color: #660066;\">registro<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #3366CC;\">=&gt;ERROR CONEXI\u00d3N DB:'<\/span><span style=\"color: #339933;\">,<\/span> err<span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n\u00a0 \u00a0 <span style=\"color: #009900;\">}<\/span><br \/>\n<span style=\"color: #009900;\">}<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><\/p>\n<p><span style=\"color: #003366; font-weight: bold;\">funci\u00f3n<\/span> crear<span style=\"color: #009900;\">(<\/span>clave<span style=\"color: #339933;\">,<\/span> <span style=\"color: #000066; font-weight: bold;\">art\u00edculo<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 db.<span style=\"color: #660066;\">upsert<\/span><span style=\"color: #009900;\">(<\/span>clave<span style=\"color: #339933;\">,<\/span> <span style=\"color: #000066; font-weight: bold;\">art\u00edculo<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #003366; font-weight: bold;\">funci\u00f3n<\/span><span style=\"color: #009900;\">(<\/span>err<span style=\"color: #339933;\">,<\/span> resultado<span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #000066; font-weight: bold;\">si<\/span><span style=\"color: #009900;\">(<\/span>err<span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #009900;\">}<\/span><span style=\"color: #000066; font-weight: bold;\">si no<\/span> <span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #009900;\">}<\/span><br \/>\n\u00a0 \u00a0 <span style=\"color: #009900;\">}<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n<span style=\"color: #009900;\">}<\/span><\/div>\n<\/div>\n<p><span style=\"font-family: inherit; font-size: 1em; line-height: 1.4375em;\">A continuaci\u00f3n, se necesita una forma de crear usuarios.  Utilizar la maravillosa librer\u00eda \"faker.js\" para crear usuarios simplifica esta tarea.  Usar faker para crear un usuario es incre\u00edblemente simple, y hay funciones de ayuda que abstraen esta funcionalidad a\u00fan m\u00e1s.  Creando un simple bucle for los usuarios son creados con faker y pasados a la capa de datos descrita anteriormente:<\/span><\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family:monospace;\"><span style=\"color: #003366; font-weight: bold;\">funci\u00f3n<\/span> loadTextUserProfile<span style=\"color: #009900;\">(<\/span>l\u00edmite<span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 <span style=\"color: #000066; font-weight: bold;\">para<\/span><span style=\"color: #009900;\">(<\/span>i<span style=\"color: #339933;\">=<\/span><span style=\"color: #CC0000;\">0<\/span><span style=\"color: #339933;\">;<\/span>i<span style=\"color: #339933;\"><<\/span>l\u00edmite<span style=\"color: #339933;\">;<\/span>i<span style=\"color: #339933;\">++<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #003366; font-weight: bold;\">var<\/span> u<span style=\"color: #339933;\">=<\/span>farsante.<span style=\"color: #660066;\">ayudantes<\/span>.<span style=\"color: #660066;\">userCard<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 conexi\u00f3n.<span style=\"color: #660066;\">db<\/span>.<span style=\"color: #660066;\">crear<\/span><span style=\"color: #009900;\">(<\/span>u.<span style=\"color: #660066;\">correo electr\u00f3nico<\/span><span style=\"color: #339933;\">,<\/span>u<span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n\u00a0 \u00a0 <span style=\"color: #009900;\">}<\/span><br \/>\n<span style=\"color: #009900;\">}<\/span><\/div>\n<\/div>\n<p><span style=\"font-family: inherit; font-size: 1em; line-height: 1.4375em;\">Se requiere un bucle de control para realizar la ingesta en Couchbase:<\/span><\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family:monospace;\">setInterval<span style=\"color: #009900;\">(<\/span><span style=\"color: #003366; font-weight: bold;\">funci\u00f3n<\/span> <span style=\"color: #009900;\">(<\/span><span style=\"color: #009900;\">)<\/span> <span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 checkOps<span style=\"color: #009900;\">(<\/span><span style=\"color: #003366; font-weight: bold;\">funci\u00f3n<\/span><span style=\"color: #009900;\">(<\/span>hecho<span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 consola.<span style=\"color: #660066;\">registro<\/span><span style=\"color: #009900;\">(<\/span>hecho<span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #000066; font-weight: bold;\">si<\/span> <span style=\"color: #009900;\">(<\/span>parseInt<span style=\"color: #009900;\">(<\/span>hecho<span style=\"color: #339933;\">,<\/span> <span style=\"color: #CC0000;\">10<\/span><span style=\"color: #009900;\">)<\/span> <span style=\"color: #339933;\"><<\/span> umbral<span style=\"color: #009900;\">)<\/span> <span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 loadTextUserProfile<span style=\"color: #009900;\">(<\/span>testBatch<span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 consola.<span style=\"color: #660066;\">registro<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #3366CC;\">\"INGEST:A\u00f1adido:\"<\/span><span style=\"color: #339933;\">,<\/span>testBatch<span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #009900;\">}<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #000066; font-weight: bold;\">si no<\/span> <span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 consola.<span style=\"color: #660066;\">registro<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #3366CC;\">\"INGEST:Ocupado:\"<\/span><span style=\"color: #339933;\">,<\/span> hecho<span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #009900;\">}<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #009900;\">}<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n\u00a0 \u00a0 <span style=\"color: #009900;\">}<\/span><span style=\"color: #339933;\">,<\/span> testInterval<br \/>\n<span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><\/div>\n<\/div>\n<p><span style=\"font-family: inherit; font-size: 1em; line-height: 1.4375em;\">El bucle de control hace uso de la l\u00f3gica de estrangulamiento, que es una buena caracter\u00edstica para cualquier tipo de prueba de rendimiento y an\u00e1lisis de estr\u00e9s.  Esta funci\u00f3n llama al punto final de reposo en un nodo del cl\u00faster y comprueba cu\u00e1ntas operaciones por segundo est\u00e1 procesando actualmente el cl\u00faster:<\/span><\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family:monospace;\"><span style=\"color: #003366; font-weight: bold;\">funci\u00f3n<\/span> checkOps<span style=\"color: #009900;\">(<\/span>opsV<span style=\"color: #009900;\">)<\/span> <span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 http.<span style=\"color: #660066;\">consiga<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #3366CC;\">\"https:\/\/\"<\/span> <span style=\"color: #339933;\">+<\/span> punto final <span style=\"color: #339933;\">+<\/span> <span style=\"color: #3366CC;\">\"\/pools\/default\/buckets\/user\"<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #003366; font-weight: bold;\">funci\u00f3n<\/span> <span style=\"color: #009900;\">(<\/span>res<span style=\"color: #009900;\">)<\/span> <span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #003366; font-weight: bold;\">var<\/span> datos<span style=\"color: #339933;\">=<\/span><span style=\"color: #3366CC;\">\u201c\u201d<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 res.<span style=\"color: #660066;\">setEncoding<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #3366CC;\">utf8<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 res.<span style=\"color: #660066;\">en<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #3366CC;\">datos<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #003366; font-weight: bold;\">funci\u00f3n<\/span> <span style=\"color: #009900;\">(<\/span>trozo<span style=\"color: #009900;\">)<\/span> <span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 datos <span style=\"color: #339933;\">+=<\/span> trozo<span style=\"color: #339933;\">;<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #009900;\">}<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 res.<span style=\"color: #660066;\">en<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #3366CC;\">Fin<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #003366; font-weight: bold;\">funci\u00f3n<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #003366; font-weight: bold;\">var<\/span> analizado<span style=\"color: #339933;\">=<\/span>JSON.<span style=\"color: #660066;\">analizar<\/span><span style=\"color: #009900;\">(<\/span>datos<span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 opsV<span style=\"color: #009900;\">(<\/span>analizado.<span style=\"color: #660066;\">basicStats<\/span>.<span style=\"color: #660066;\">opsPerSec<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #009900;\">}<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 <span style=\"color: #009900;\">}<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n<span style=\"color: #009900;\">}<\/span><\/div>\n<\/div>\n<h2><span style=\"font-family: inherit; font-size: 1em; line-height: 1.4375em;\">Resultados<\/span><\/h2>\n<p>Al igual que en el caso de uso del Internet de las cosas, los resultados de rendimiento del almac\u00e9n de perfiles de usuario fueron impresionantes.  En poco tiempo fuimos capaces de generar cerca de 500 millones de usuarios, con una carga de trabajo sostenida de 400.000 escrituras por segundo. \u00a0<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/pure-storage-and-couchbase\/pure_storage2.png\"\/><\/p>\n<p>Para mantener el inter\u00e9s, utilizamos el desalojo completo y ajustamos la memoria para que fuera aproximadamente 10% del tama\u00f1o final del conjunto de datos. \u00a0\u00a0<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/pure-storage-and-couchbase\/pure_400ksummary.png\"\/><\/p>\n<p>El sistema Pure funcion\u00f3 a la perfecci\u00f3n.  Alcanzamos los l\u00edmites de procesamiento de la CPU mucho antes de que el sistema de almacenamiento se quedara sin margen:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/pure-storage-and-couchbase\/pure_dash.png\"\/><\/p>\n<p>\nA\u00fan m\u00e1s impresionante que el propio rendimiento de la carga de trabajo es la huella de almacenamiento.    Este es uno de los aspectos m\u00e1s dif\u00edciles del almacenamiento en un sistema distribuido.  La tecnolog\u00eda de desduplicaci\u00f3n de Pure es excepcional.<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/pure-storage-and-couchbase\/pure_dedup.png\"\/><\/p>\n<p>Al utilizar una granularidad de 512 bytes, una precisi\u00f3n 4 veces m\u00e1s fina que la de los sistemas de la competencia, Pure es capaz de desduplicar eficazmente una carga de trabajo realmente dif\u00edcil.   En nuestro entorno de pruebas, que genera usuarios falsos, los datos son aleatorios y est\u00e1n distribuidos uniformemente.  En una carga de trabajo del mundo real, cabr\u00eda esperar que la desduplicaci\u00f3n fuera a\u00fan mejor.   Con el conjunto de datos de usuarios aleatorios vimos una desduplicaci\u00f3n consistente de 1,6 a 1, con 1 r\u00e9plica de Couchbase habilitada.  Esperamos realizar m\u00e1s pruebas comparativas con la tecnolog\u00eda de Pure en el futuro, y estamos entusiasmados con el rendimiento de Couchbase utilizando su sistema. \u00a0\u00a0<\/p>","protected":false},"excerpt":{"rendered":"<p>There is a lot of buzz around enterprise class storage, lately. Pure Storage, a recognized leader in the space, recently gave us the opportunity to deploy Couchbase in one of their lab environments. \u00a0The 8 node cluster was easily able [&hellip;]<\/p>\n","protected":false},"author":20,"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":[9019],"class_list":["post-1851","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>Pure Storage, Couchbase, and Node.js User Profile Store - 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\/pure-storage-and-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Pure Storage, Couchbase, and Node.js User Profile Store\" \/>\n<meta property=\"og:description\" content=\"There is a lot of buzz around enterprise class storage, lately. Pure Storage, a recognized leader in the space, recently gave us the opportunity to deploy Couchbase in one of their lab environments. \u00a0The 8 node cluster was easily able [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/pure-storage-and-couchbase\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-12-24T00:19:18+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=\"Todd Greenstein\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@todd_greenstein\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Todd Greenstein\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/pure-storage-and-couchbase\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/pure-storage-and-couchbase\\\/\"},\"author\":{\"name\":\"Todd Greenstein\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/64b5d1e5969768c5d63c11c696951ed3\"},\"headline\":\"Pure Storage, Couchbase, and Node.js User Profile Store\",\"datePublished\":\"2014-12-24T00:19:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/pure-storage-and-couchbase\\\/\"},\"wordCount\":349,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/pure-storage-and-couchbase\\\/#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\\\/pure-storage-and-couchbase\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/pure-storage-and-couchbase\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/pure-storage-and-couchbase\\\/\",\"name\":\"Pure Storage, Couchbase, and Node.js User Profile Store - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/pure-storage-and-couchbase\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/pure-storage-and-couchbase\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2014-12-24T00:19:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/pure-storage-and-couchbase\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/pure-storage-and-couchbase\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/pure-storage-and-couchbase\\\/#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\\\/pure-storage-and-couchbase\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Pure Storage, Couchbase, and Node.js User Profile Store\"}]},{\"@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\\\/64b5d1e5969768c5d63c11c696951ed3\",\"name\":\"Todd Greenstein\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=gabfbe093983052aa28595343c19888ce\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=g\",\"caption\":\"Todd Greenstein\"},\"description\":\"Todd Greenstein is a Solution Architect at Couchbase. Todd is specialize in API design, architecture, data modeling, nodejs and golang development.\",\"sameAs\":[\"https:\\\/\\\/x.com\\\/todd_greenstein\"],\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/es\\\/author\\\/todd-greenstein\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Pure Storage, Couchbase, and Node.js User Profile Store - 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\/pure-storage-and-couchbase\/","og_locale":"es_MX","og_type":"article","og_title":"Pure Storage, Couchbase, and Node.js User Profile Store","og_description":"There is a lot of buzz around enterprise class storage, lately. Pure Storage, a recognized leader in the space, recently gave us the opportunity to deploy Couchbase in one of their lab environments. \u00a0The 8 node cluster was easily able [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/es\/pure-storage-and-couchbase\/","og_site_name":"The Couchbase Blog","article_published_time":"2014-12-24T00:19:18+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":"Todd Greenstein","twitter_card":"summary_large_image","twitter_creator":"@todd_greenstein","twitter_misc":{"Written by":"Todd Greenstein","Est. reading time":"2 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/pure-storage-and-couchbase\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/pure-storage-and-couchbase\/"},"author":{"name":"Todd Greenstein","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/64b5d1e5969768c5d63c11c696951ed3"},"headline":"Pure Storage, Couchbase, and Node.js User Profile Store","datePublished":"2014-12-24T00:19:18+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/pure-storage-and-couchbase\/"},"wordCount":349,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/pure-storage-and-couchbase\/#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\/pure-storage-and-couchbase\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/pure-storage-and-couchbase\/","url":"https:\/\/www.couchbase.com\/blog\/pure-storage-and-couchbase\/","name":"Pure Storage, Couchbase, and Node.js User Profile Store - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/pure-storage-and-couchbase\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/pure-storage-and-couchbase\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2014-12-24T00:19:18+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/pure-storage-and-couchbase\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/pure-storage-and-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/pure-storage-and-couchbase\/#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\/pure-storage-and-couchbase\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Pure Storage, Couchbase, and Node.js User Profile Store"}]},{"@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\/64b5d1e5969768c5d63c11c696951ed3","name":"Todd Greenstein","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=gabfbe093983052aa28595343c19888ce","url":"https:\/\/secure.gravatar.com\/avatar\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?s=96&d=mm&r=g","caption":"Todd Greenstein"},"description":"Todd Greenstein is a Solution Architect at Couchbase. Todd is specialize in API design, architecture, data modeling, nodejs and golang development.","sameAs":["https:\/\/x.com\/todd_greenstein"],"url":"https:\/\/www.couchbase.com\/blog\/es\/author\/todd-greenstein\/"}]}},"acf":[],"authors":[{"term_id":9019,"user_id":20,"is_guest":0,"slug":"todd-greenstein","display_name":"Todd Greenstein","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/f230045f7f6e636cf01abbd35f1cbf66a1206fbe149a0d4f0bbdd992c646257d?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\/1851","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\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=1851"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/1851\/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=1851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=1851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=1851"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=1851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}