{"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\/pt\/pure-storage-and-couchbase\/","title":{"rendered":"Armazenamento de perfil de usu\u00e1rio Pure Storage, Couchbase e Node.js"},"content":{"rendered":"<p>Ultimamente, h\u00e1 muito burburinho em torno do armazenamento de classe empresarial. A Pure Storage, l\u00edder reconhecida no setor, recentemente nos deu a oportunidade de implantar o Couchbase em um de seus ambientes de laborat\u00f3rio.  O cluster de 8 n\u00f3s foi capaz de sustentar facilmente uma carga de trabalho de 1 milh\u00e3o de opera\u00e7\u00f5es\/segundo com 100% de grava\u00e7\u00e3o.  Uma carga de trabalho de 1.000.000 de grava\u00e7\u00f5es\/segundo foi gerada usando nossa ferramenta pillowfight executada em um dos n\u00f3s do cluster com os seguintes par\u00e2metros:<\/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>caixa<span style=\"color: #339933;\">\/<\/span>cbc<span style=\"color: #339933;\">&#8211;<\/span>briga de travesseiros <span style=\"color: #339933;\">&#8211;<\/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;\">Essa carga de grava\u00e7\u00e3o sustentada de 1 milh\u00e3o de grava\u00e7\u00f5es por segundo do cluster tem a seguinte apar\u00eancia:<\/span><\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/pure-storage-and-couchbase\/pure_storage1.png\"\/><\/p>\n<p>Essa carga de trabalho, embora impressionante, n\u00e3o exercitou nem um pouco a matriz de armazenamento.  De fato, foi dif\u00edcil localizar muita carga no Pure Dashboard.  O motivo disso \u00e9 que, com o pillowfight, utilizamos exclusivamente um documento de 64 bytes.  \u00c9 uma carga de trabalho perfeitamente razo\u00e1vel quando se considera um caso de uso da Internet das coisas com muitas chaves\/valores pequenos gravados em alta velocidade.   E quanto a um caso de uso de armazenamento de perfil de usu\u00e1rio?  Qual seria o desempenho de uma carga de trabalho de grava\u00e7\u00e3o 100% de alta velocidade nesse ambiente usando um aplicativo do mundo real e dados de perfil de usu\u00e1rio com estilo realista? \u00a0<\/p>\n<h2>Chicote de teste<\/h2>\n<p>Para esse aplicativo, \u00e9 necess\u00e1rio um gerador de carga e um conjunto de testes de r\u00e1pida implanta\u00e7\u00e3o, e o node.js \u00e9 a plataforma perfeita.   O c\u00f3digo-fonte est\u00e1 dispon\u00edvel em <a href=\"https:\/\/github.com\/couchbaselabs\/user-profile-generator\">github<\/a> .   Primeiro, \u00e9 necess\u00e1rio um objeto de camada de dados com um m\u00e9todo de cria\u00e7\u00e3o:<\/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> exigir<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> ponto final<span style=\"color: #339933;\">=<\/span><span style=\"color: #3366CC;\">&#8220;10.21.16.121:8091&#8221;<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n<span style=\"color: #003366; font-weight: bold;\">var<\/span> agrupamento <span style=\"color: #339933;\">=<\/span> <span style=\"color: #003366; font-weight: bold;\">novo<\/span> couchbase.<span style=\"color: #660066;\">Aglomerado<\/span><span style=\"color: #009900;\">(<\/span>ponto 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> agrupamento.<span style=\"color: #660066;\">openBucket<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #3366CC;\">\"usu\u00e1rio\"<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #003366; font-weight: bold;\">fun\u00e7\u00e3o<\/span> <span style=\"color: #009900;\">(<\/span>erro<span style=\"color: #009900;\">)<\/span> <span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 <span style=\"color: #000066; font-weight: bold;\">se<\/span> <span style=\"color: #009900;\">(<\/span>erro<span style=\"color: #009900;\">)<\/span> <span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 console.<span style=\"color: #660066;\">registro<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #3366CC;\">'=&gt;ERRO DE CONEX\u00c3O DO BANCO DE DADOS:'<\/span><span style=\"color: #339933;\">,<\/span> erro<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;\">fun\u00e7\u00e3o<\/span> criar<span style=\"color: #009900;\">(<\/span>chave<span style=\"color: #339933;\">,<\/span> <span style=\"color: #000066; font-weight: bold;\">item<\/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>chave<span style=\"color: #339933;\">,<\/span> <span style=\"color: #000066; font-weight: bold;\">item<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #003366; font-weight: bold;\">fun\u00e7\u00e3o<\/span><span style=\"color: #009900;\">(<\/span>erro<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;\">se<\/span><span style=\"color: #009900;\">(<\/span>erro<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;\">mais<\/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;\">Em seguida, \u00e9 necess\u00e1ria uma maneira de criar usu\u00e1rios.  A utiliza\u00e7\u00e3o da maravilhosa biblioteca \"faker.js\" para criar usu\u00e1rios simplifica essa tarefa.  Usar o faker para criar um usu\u00e1rio \u00e9 incrivelmente simples, e h\u00e1 fun\u00e7\u00f5es auxiliares que abstraem ainda mais essa funcionalidade.  Ao criar um simples loop for, os usu\u00e1rios s\u00e3o criados com faker e passados para a camada de dados descrita acima:<\/span><\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family:monospace;\"><span style=\"color: #003366; font-weight: bold;\">fun\u00e7\u00e3o<\/span> loadTextUserProfile<span style=\"color: #009900;\">(<\/span>limite<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>limite<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>falsificador.<span style=\"color: #660066;\">ajudantes<\/span>.<span style=\"color: #660066;\">Cart\u00e3o de usu\u00e1rio<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #009900;\">)<\/span><span style=\"color: #339933;\">;<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 conex\u00e3o.<span style=\"color: #660066;\">db<\/span>.<span style=\"color: #660066;\">criar<\/span><span style=\"color: #009900;\">(<\/span>u.<span style=\"color: #660066;\">e-mail<\/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;\">\u00c9 necess\u00e1rio um loop de controle para realizar a ingest\u00e3o no 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;\">fun\u00e7\u00e3o<\/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;\">fun\u00e7\u00e3o<\/span><span style=\"color: #009900;\">(<\/span>feito<span style=\"color: #009900;\">)<\/span><span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 console.<span style=\"color: #660066;\">registro<\/span><span style=\"color: #009900;\">(<\/span>feito<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;\">se<\/span> <span style=\"color: #009900;\">(<\/span>parseInt<span style=\"color: #009900;\">(<\/span>feito<span style=\"color: #339933;\">,<\/span> <span style=\"color: #CC0000;\">10<\/span><span style=\"color: #009900;\">)<\/span> <span style=\"color: #339933;\"><<\/span> limite<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 console.<span style=\"color: #660066;\">registro<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #3366CC;\">\"INGEST:Added:\"<\/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;\">mais<\/span> <span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 console.<span style=\"color: #660066;\">registro<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #3366CC;\">\"INGEST:Busy:\"<\/span><span style=\"color: #339933;\">,<\/span> feito<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> intervalo de teste<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;\">O loop de controle faz uso da l\u00f3gica de limita\u00e7\u00e3o, que \u00e9 um recurso interessante para qualquer tipo de teste de desempenho e an\u00e1lise de estresse.  Essa fun\u00e7\u00e3o chama o endpoint de repouso em um n\u00f3 do cluster e verifica quantas opera\u00e7\u00f5es por segundo o cluster est\u00e1 processando no momento:<\/span><\/p>\n<div class=\"geshifilter\">\n<div class=\"javascript geshifilter-javascript\" style=\"font-family:monospace;\"><span style=\"color: #003366; font-weight: bold;\">fun\u00e7\u00e3o<\/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;\">obter<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #3366CC;\">\"https:\/\/\"<\/span> <span style=\"color: #339933;\">+<\/span> ponto 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;\">fun\u00e7\u00e3o<\/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> dados<span style=\"color: #339933;\">=<\/span><span style=\"color: #3366CC;\">&#8220;&#8221;<\/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;\">em<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #3366CC;\">\"dados<\/span><span style=\"color: #339933;\">,<\/span> <span style=\"color: #003366; font-weight: bold;\">fun\u00e7\u00e3o<\/span> <span style=\"color: #009900;\">(<\/span>peda\u00e7o<span style=\"color: #009900;\">)<\/span> <span style=\"color: #009900;\">{<\/span><br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 dados <span style=\"color: #339933;\">+=<\/span> peda\u00e7o<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;\">em<\/span><span style=\"color: #009900;\">(<\/span><span style=\"color: #3366CC;\">\"fim<\/span><span style=\"color: #339933;\">,<\/span><span style=\"color: #003366; font-weight: bold;\">fun\u00e7\u00e3o<\/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> analisado<span style=\"color: #339933;\">=<\/span>JSON.<span style=\"color: #660066;\">analisar<\/span><span style=\"color: #009900;\">(<\/span>dados<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>analisado.<span style=\"color: #660066;\">Estat\u00edsticas b\u00e1sicas<\/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>Assim como no caso de uso da Internet das coisas, os resultados de desempenho do armazenamento de perfis de usu\u00e1rios foram impressionantes.  Em um curto per\u00edodo de tempo, conseguimos gerar cerca de 500 milh\u00f5es de usu\u00e1rios, com uma carga de trabalho cont\u00ednua de 400.000 grava\u00e7\u00f5es por segundo. \u00a0<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/pure-storage-and-couchbase\/pure_storage2.png\"\/><\/p>\n<p>Apenas para manter as coisas interessantes, usamos o despejo total e ajustamos a mem\u00f3ria para ser aproximadamente 10% do tamanho final do conjunto de dados. \u00a0\u00a0<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/pure-storage-and-couchbase\/pure_400ksummary.png\"\/><\/p>\n<p>O sistema Pure funcionou perfeitamente.  Atingimos os limites de processamento da CPU muito antes de o sistema de armazenamento ficar sem espa\u00e7o livre:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/pure-storage-and-couchbase\/pure_dash.png\"\/><\/p>\n<p>\nAinda mais impressionante do que o desempenho da carga de trabalho em si, \u00e9 o espa\u00e7o ocupado pelo armazenamento.    Esse \u00e9 um dos aspectos mais dif\u00edceis do armazenamento em um sistema distribu\u00eddo.  A tecnologia de desduplica\u00e7\u00e3o da Pure \u00e9 excepcional.<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/pure-storage-and-couchbase\/pure_dedup.png\"\/><\/p>\n<p>Usando uma granularidade de 512 bytes, uma precis\u00e3o quatro vezes mais fina do que a dos sistemas concorrentes, a Pure \u00e9 capaz de desduplicar com efici\u00eancia uma carga de trabalho realmente desafiadora.   Em nosso ambiente de teste que gera usu\u00e1rios com faker, os dados s\u00e3o aleat\u00f3rios e distribu\u00eddos uniformemente.  Em uma carga de trabalho do mundo real, espera-se que a desduplica\u00e7\u00e3o seja ainda melhor.   Com o conjunto de dados de usu\u00e1rios aleat\u00f3rios, observamos uma desduplica\u00e7\u00e3o consistente de 1,6 para 1, com 1 r\u00e9plica do Couchbase ativada.  Esperamos fazer mais benchmarking com a tecnologia da Pure no futuro e estamos animados com o desempenho do Couchbase usando seu 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>","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"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\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\/pt\/pure-storage-and-couchbase\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\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\/pt\/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\":\"pt-BR\",\"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\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/pure-storage-and-couchbase\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\":\"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\/64b5d1e5969768c5d63c11c696951ed3\",\"name\":\"Todd Greenstein\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/abfbe093983052aa28595343c19888ce\",\"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\/pt\/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\/pt\/pure-storage-and-couchbase\/","og_locale":"pt_BR","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\/pt\/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":"pt-BR","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":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/pure-storage-and-couchbase\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@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":"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\/64b5d1e5969768c5d63c11c696951ed3","name":"Todd Greenstein","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/abfbe093983052aa28595343c19888ce","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\/pt\/author\/todd-greenstein\/"}]}},"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","author_category":"","last_name":"Greenstein","first_name":"Todd","job_title":"","user_url":"","description":"Todd Greenstein \u00e9 arquiteto de solu\u00e7\u00f5es na Couchbase. Todd \u00e9 especializado em design de API, arquitetura, modelagem de dados, desenvolvimento em nodejs e golang."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1851","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\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=1851"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1851\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=1851"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=1851"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=1851"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=1851"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}