{"id":5848,"date":"2018-10-06T13:32:50","date_gmt":"2018-10-06T20:32:50","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=5848"},"modified":"2025-06-13T20:19:56","modified_gmt":"2025-06-14T03:19:56","slug":"ycsb-json-implementation-for-couchbase-and-mongodb","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/ycsb-json-implementation-for-couchbase-and-mongodb\/","title":{"rendered":"YCSB-JSON: implementa\u00e7\u00e3o para Couchbase e MongoDB"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">O YCSB \u00e9 uma excelente ferramenta de benchmarking criada para ser facilmente ampliada por qualquer driver que ofere\u00e7a suporte e implemente opera\u00e7\u00f5es b\u00e1sicas como: inser\u00e7\u00e3o, leitura, atualiza\u00e7\u00e3o, exclus\u00e3o e varredura.\u00a0<\/span><span style=\"font-weight: 400;\">Os dados sint\u00e9ticos simples introduzidos pelo YCSB se encaixam perfeitamente nesse paradigma. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Mas quando se trata de trabalhar com bancos de dados JSON, como o Couchbase e o MongoDB, o YCSB \u00e9 \u00fatil porque as consultas se tornaram muito mais sofisticadas: consulta de matrizes e objetos aninhados, execu\u00e7\u00e3o de jun\u00e7\u00f5es e agrega\u00e7\u00f5es.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A extens\u00e3o YCSB-JSON, por um lado, deve ser capaz de utilizar todas as opera\u00e7\u00f5es JSON poss\u00edveis suportadas por um banco de dados.<br \/>\n<\/span><span style=\"font-weight: 400;\">Por outro lado, a implementa\u00e7\u00e3o dessa abordagem deve ser gen\u00e9rica o suficiente para ser facilmente estendida do YCSB e do MongoDB, Couchbase ou\u00a0<em>qualquer<\/em> outro driver de banco de dados, independentemente do n\u00edvel de consulta JSON que ele suporta.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A conex\u00e3o YCSB-JSON foi projetada para emular melhor os cen\u00e1rios realistas do usu\u00e1rio final. Ela foi projetada para trabalhar com quaisquer dados JSON, sejam conjuntos de dados reais, pseudo-realistas ou totalmente sint\u00e9ticos. E um dos requisitos para a ferramenta \u00e9 que n\u00e3o haja nenhum valor codificado em predicados de consulta. Os usu\u00e1rios s\u00f3 podem controlar a cardinalidade dos dados durante o processo de gera\u00e7\u00e3o do conjunto de dados.\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-5864 aligncenter\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/10\/YCSB-JSON-Implementation-300x232.png\" alt=\"\" width=\"656\" height=\"507\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/YCSB-JSON-Implementation-300x232.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/YCSB-JSON-Implementation-768x594.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/YCSB-JSON-Implementation-20x15.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/YCSB-JSON-Implementation.png 830w\" sizes=\"auto, (max-width: 656px) 100vw, 656px\" \/><\/p>\n<p class=\"\" style=\"text-align: center;\">\u00a0Figura 1. Vis\u00e3o geral da implementa\u00e7\u00e3o do YCSB-JSON<\/p>\n<h4><b>Modelo de dados<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">O modelo de dados que escolhemos para esse benchmark est\u00e1 bem descrito neste artigo: <\/span><a href=\"https:\/\/dzone.com\/articles\/ycsb-json-benchmarking-json-databases-by-extending\"><span style=\"font-weight: 400;\">https:\/\/dzone.com\/articles\/ycsb-json-benchmarking-json-databases-by-extending<\/span><\/a><br \/>\n<span style=\"font-weight: 400;\">O conjunto de dados \u00e9 gerado usando uma ferramenta fakeit e carregado em um banco de dados (Couchbase, MongoDB) por scripts externos. <\/span><span style=\"font-weight: 400;\">Enquanto o modelo \u00e9 definido e os valores fixos s\u00e3o gerados aleatoriamente, esses dados s\u00e3o gerados aleatoriamente, mas n\u00e3o s\u00e3o sint\u00e9ticos.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h4><b>Gerenciamento de dados <\/b><\/h4>\n<p><span style=\"font-weight: 400;\">Para cada opera\u00e7\u00e3o na carga de trabalho, as consultas s\u00e3o fixas, mas os valores de limite para cada predicado parametrizado n\u00e3o s\u00e3o determin\u00edsticos. Portanto, foi escolhido o seguinte fluxo de gerenciamento de dados:<br \/>\n<\/span><\/p>\n<ol>\n<li><span style=\"font-weight: 400;\">Gerar documentos por fakeit.\u00a0<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Carregue os dados gerados em um banco de dados por meio de qualquer script externo.<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Executar a fase de carregamento. Durante essa fase, o YCSB ler\u00e1 um subconjunto aleat\u00f3rio dos documentos gerados e armazenar\u00e1 todos os seus valores em seu cache interno.<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Durante a fase de execu\u00e7\u00e3o, o YCSB usar\u00e1 os valores de seu cache ao vincular e executar consultas no banco de dados.<\/span><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h4><b>Gerador de Predicados<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">O YCSB usa geradores ao operar com dados. O conector apresenta seu pr\u00f3prio gerador mapeado para um modelo de dados espec\u00edfico. O mapeamento e o modelo existem somente no espa\u00e7o de nomes do gerador. A sa\u00edda do gerador \u00e9 um conjunto de predicados gen\u00e9ricos (pares campo-valor) para consultas espec\u00edficas. Isso permite que os usu\u00e1rios modifiquem os modelos e ampliem a ferramenta com outras consultas sem modificar o restante do c\u00f3digo principal.<\/span><\/p>\n<h5><span style=\"font-weight: 400;\">Gerador de predicados: <a href=\"https:\/\/github.com\/couchbaselabs\/YCSB\/blob\/soe\/core\/src\/main\/java\/com\/yahoo\/ycsb\/generator\/soe\/Generator.java\">Gerador.java\u00a0<\/a><\/span><\/h5>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Exemplo #1:\u00a0 <strong>Consulta de pagina\u00e7\u00e3o<\/strong><\/span><\/p>\n<p><span style=\"font-weight: 400;\">Uma das opera\u00e7\u00f5es YCSB-JSON, a consulta de pagina\u00e7\u00e3o, pode ser representada pela seguinte instru\u00e7\u00e3o:<br \/>\n<\/span><\/p>\n<p><em><span style=\"font-weight: 400;\">SELECT * FROM  WHERE address.zip =  OFFSET  LIMIT<\/span><\/em><\/p>\n<p><span style=\"font-weight: 400;\">O predicado da consulta \u00e9 um campo dentro de um objeto. Ao usar o Couchbase N1QL, o campo pode ser acessado simplesmente como \"address.zip\". Mas outros bancos de dados podem n\u00e3o ser t\u00e3o flex\u00edveis, de modo que o gerador YCSB-JSON cria dois predicados: o predicado pai (endere\u00e7o) e o predicado filho\/aninhado (zip).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">E o predicado filho tem um valor escolhido aleatoriamente na lista de valores de amostra para esse campo espec\u00edfico.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A fun\u00e7\u00e3o abaixo gera o <a href=\"https:\/\/github.com\/couchbaselabs\/YCSB\/blob\/soe\/core\/src\/main\/java\/com\/yahoo\/ycsb\/workloads\/soe\/SoeQueryPredicate.java\">Objeto SoeQueryPredicate<\/a><br \/>\n<\/span><span style=\"font-weight: 400;\">Onde <code>nome<\/code> \u00e9 \"<\/span><span style=\"font-weight: 400;\">endere\u00e7o<\/span><span style=\"font-weight: 400;\">\"<br \/>\n<\/span><span style=\"font-weight: 400;\">E <code>predicado aninhado<\/code> \u00e9 outro objeto SoeQueryPredicate com o nome \"<\/span><span style=\"font-weight: 400;\">z\u00edper<\/span><span style=\"font-weight: 400;\">\" e valor <\/span><span style=\"font-weight: 400;\">\u00a0:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5851\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-10-02-at-10.09.25-AM-300x89.png\" alt=\"\" width=\"991\" height=\"294\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.09.25-AM-300x89.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.09.25-AM-768x227.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.09.25-AM-20x6.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.09.25-AM.png 858w\" sizes=\"auto, (max-width: 991px) 100vw, 991px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Exemplo #2 \u00a0<strong>Consulta de relat\u00f3rio<\/strong><\/span><\/p>\n<p><span style=\"font-weight: 400;\">Os predicados para consultas mais complexas s\u00e3o gerados da mesma forma. A \u00fanica diferen\u00e7a \u00e9 que, quando a consulta introduz v\u00e1rios predicados, a sequ\u00eancia de predicados (matriz de predicados) est\u00e1 sendo gerada em vez de um \u00fanico predicado. Aqui est\u00e1 a consulta Relat\u00f3rio:<\/span><\/p>\n<p><em><span style=\"font-weight: 400;\">SELECT o2.month, c2.address.zip, SUM(o2.sale_price) <\/span><\/em><em><span style=\"font-weight: 400;\">FROM  c2<br \/>\nINNER JOIN orders o2 ON KEYS c2.order_list<br \/>\n<\/span><span style=\"font-weight: 400;\">WHERE c2.address.zip = \"value\" AND o2.month = \"value\"<br \/>\n<\/span><span style=\"font-weight: 400;\">GROUP BY o2.month, c2.address.zip ORDER BY SUM(o2.sale_price)<\/span><\/em><\/p>\n<p><span style=\"font-weight: 400;\">A fun\u00e7\u00e3o abaixo gera a sequ\u00eancia de:<br \/>\n<\/span><span style=\"font-weight: 400;\">predicado \"Month\" (m\u00eas), predicado \"address\" (endere\u00e7o) com predicado \"zip\" (CEP) aninhado, predicado \"sale_price\" (pre\u00e7o de venda) etc:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5852\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-10-02-at-10.13.34-AM-300x217.png\" alt=\"\" width=\"942\" height=\"681\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.13.34-AM-300x217.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.13.34-AM-1024x741.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.13.34-AM-768x555.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.13.34-AM-20x14.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.13.34-AM.png 1113w\" sizes=\"auto, (max-width: 942px) 100vw, 942px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Outros geradores de consultas podem ser encontrados aqui:<br \/>\n<\/span><a href=\"https:\/\/github.com\/couchbaselabs\/YCSB\/blob\/soe\/core\/src\/main\/java\/com\/yahoo\/ycsb\/generator\/soe\/Generator.java\"><span style=\"font-weight: 400;\">https:\/\/github.com\/couchbaselabs\/YCSB\/blob\/soe\/core\/src\/main\/java\/com\/yahoo\/ycsb\/generator\/soe\/Generator.java<\/span><\/a><\/p>\n<p>&nbsp;<\/p>\n<h4><b>Novas opera\u00e7\u00f5es<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">O c\u00f3digo precisa ser atualizado com novas opera\u00e7\u00f5es. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Assinaturas na classe DB:\u00a0<\/span><br \/>\n<a href=\"https:\/\/github.com\/couchbaselabs\/YCSB\/blob\/soe\/core\/src\/main\/java\/com\/yahoo\/ycsb\/DB.java#L140\"><span style=\"font-weight: 400;\">https:\/\/github.com\/couchbaselabs\/YCSB\/blob\/soe\/core\/src\/main\/java\/com\/yahoo\/ycsb\/DB.java#L140<\/span><\/a>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5853\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-10-02-at-10.16.42-AM-260x300.png\" alt=\"\" width=\"1013\" height=\"1169\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.16.42-AM-260x300.png 260w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.16.42-AM-768x885.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.16.42-AM-300x346.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.16.42-AM-17x20.png 17w\" sizes=\"auto, (max-width: 1013px) 100vw, 1013px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Implementa\u00e7\u00f5es no DBWrapper:\u00a0<\/span><br \/>\n<a href=\"https:\/\/github.com\/couchbaselabs\/YCSB\/blob\/soe\/core\/src\/main\/java\/com\/yahoo\/ycsb\/DBWrapper.java#L346\"><span style=\"font-weight: 400;\">https:\/\/github.com\/couchbaselabs\/YCSB\/blob\/soe\/core\/src\/main\/java\/com\/yahoo\/ycsb\/DBWrapper.java#L346<\/span><\/a>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5854\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-10-02-at-10.19.53-AM-257x300.png\" alt=\"\" width=\"707\" height=\"825\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.19.53-AM-257x300.png 257w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.19.53-AM-879x1024.png 879w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.19.53-AM-768x895.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.19.53-AM-300x350.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.19.53-AM-17x20.png 17w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.19.53-AM.png 1040w\" sizes=\"auto, (max-width: 707px) 100vw, 707px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Amplia\u00e7\u00e3o do CoreWorkload com novas opera\u00e7\u00f5es: <a href=\"https:\/\/github.com\/couchbaselabs\/YCSB\/blob\/soe\/core\/src\/main\/java\/com\/yahoo\/ycsb\/workloads\/soe\/SoeWorkload.java\">SoeWorkload.java<\/a><\/span><\/p>\n<p>&nbsp;<\/p>\n<h4><b>Implementa\u00e7\u00e3o de opera\u00e7\u00f5es YCSB-JSON para<\/b><strong>\u00a0Couchbase e MongoDB<\/strong><\/h4>\n<p><span style=\"font-weight: 400;\">A fun\u00e7\u00e3o de driver de banco de dados de uma opera\u00e7\u00e3o YCSB-JSON recebe um par\u00e2metro adicional que \u00e9 um objeto gerador. Ele est\u00e1 sendo passado pela classe Workload e tem uma sequ\u00eancia de predicados espec\u00edfica pr\u00e9-constru\u00edda.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Como a estrutura e as sequ\u00eancias de predicados s\u00e3o bem definidas pelo gerador, um driver de BD pode acessar nomes e valores diretamente e construir a consulta usando sua linguagem de consulta nativa ou outros m\u00e9todos de acesso. Abaixo est\u00e3o exemplos de implementa\u00e7\u00e3o de consultas de p\u00e1gina e relat\u00f3rio.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><strong>Consulta de p\u00e1gina,<\/strong>\u00a0gerando instru\u00e7\u00f5es de consulta para o Couchbase:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5855\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-10-02-at-10.24.14-AM-300x68.png\" alt=\"\" width=\"966\" height=\"219\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.24.14-AM-300x68.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.24.14-AM-768x175.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.24.14-AM-20x5.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.24.14-AM.png 1016w\" sizes=\"auto, (max-width: 966px) 100vw, 966px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">para o MongoDB:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5856\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-10-02-at-10.25.14-AM-300x128.png\" alt=\"\" width=\"888\" height=\"379\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.25.14-AM-300x128.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.25.14-AM-1024x438.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.25.14-AM-768x328.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.25.14-AM-20x9.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.25.14-AM.png 1114w\" sizes=\"auto, (max-width: 888px) 100vw, 888px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">\f<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><strong>Consulta de relat\u00f3rio<\/strong>, Couchbase:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5858\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-10-02-at-10.28.10-AM-300x126.png\" alt=\"\" width=\"1105\" height=\"464\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.28.10-AM-300x126.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.28.10-AM-1024x429.png 1024w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.28.10-AM-768x322.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.28.10-AM-20x8.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.28.10-AM.png 1144w\" sizes=\"auto, (max-width: 1105px) 100vw, 1105px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">MongoDB:<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-5857\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2018\/10\/Screen-Shot-2018-10-02-at-10.29.47-AM-291x300.png\" alt=\"\" width=\"994\" height=\"1025\" srcset=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.29.47-AM-291x300.png 291w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.29.47-AM-994x1024.png 994w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.29.47-AM-768x791.png 768w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.29.47-AM-300x309.png 300w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.29.47-AM-20x20.png 20w, https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/Screen-Shot-2018-10-02-at-10.29.47-AM.png 1171w\" sizes=\"auto, (max-width: 994px) 100vw, 994px\" \/><\/p>\n<p><span style=\"font-weight: 400;\">Todas as implementa\u00e7\u00f5es do Couchbase:\u00a0<a href=\"https:\/\/github.com\/couchbaselabs\/YCSB\/blob\/soe\/couchbase2\/src\/main\/java\/com\/yahoo\/ycsb\/db\/couchbase2\/Couchbase2Client.java\">Couchbase2Client.java<\/a><\/span><\/p>\n<p><span style=\"font-weight: 400;\">Todas as implementa\u00e7\u00f5es do MongoDB:\u00a0<a href=\"https:\/\/github.com\/couchbaselabs\/YCSB\/blob\/soe\/mongodb\/src\/main\/java\/com\/yahoo\/ycsb\/db\/MongoDbClient.java\">MongoDbClient.java<\/a><\/span><\/p>\n<h4><\/h4>\n<h4><strong>Refer\u00eancias<\/strong><\/h4>\n<p>Parte 1 do artigo:<br \/>\n<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/ycsb-json-benchmarking-json-databases-by-extending-ycsb\/\">\u00a0https:\/\/www.couchbase.com\/blog\/ycsb-json-benchmarking-json-databases-by-extending-ycsb\/<\/a><\/p>\n<p>Implementa\u00e7\u00e3o do YCSB-JSON:<br \/>\n<a href=\"https:\/\/github.com\/couchbaselabs\/YCSB\/tree\/soe\">https:\/\/github.com\/couchbaselabs\/YCSB\/tree\/soe<\/a><\/p>\n<p>FakeIt:<br \/>\n<a href=\"https:\/\/github.com\/bentonam\/fakeit\">\u00a0https:\/\/github.com\/bentonam\/fakeit<\/a><\/p>\n<h4><\/h4>\n<h4><b>Pr\u00f3ximas etapas<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">Implementar um gerador do tipo fakeit para simplificar a gera\u00e7\u00e3o de dados e predicados de consulta.<\/span><\/p>","protected":false},"excerpt":{"rendered":"<p>YCSB is a great benchmarking tool built to be easily extended by any driver which supports and implements basic operations like: insert, read, update, delete and scan.\u00a0Plain synthetic data introduced by YCSB fits this paradigm perfectly. But when it comes [&hellip;]<\/p>","protected":false},"author":23019,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1821,1816,1819,9417,1812,2201],"tags":[2279,1572,1261,1309,1725,2278],"ppma_author":[9074],"class_list":["post-5848","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-couchbase-architecture","category-couchbase-server","category-data-modeling","category-performance","category-n1ql-query","category-tools-sdks","tag-benchmark","tag-database","tag-json","tag-mongodb","tag-nosql-database","tag-ycsb"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>YCSB-JSON: Implementation for Couchbase and MongoDB<\/title>\n<meta name=\"description\" content=\"For JSON databases such as Couchbase and MongoDB, YCSB is helpful for executing more sophisticated queries. Learn how to use YCSB-JSON today.\" \/>\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\/ycsb-json-implementation-for-couchbase-and-mongodb\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"YCSB-JSON: Implementation for Couchbase and MongoDB\" \/>\n<meta property=\"og:description\" content=\"For JSON databases such as Couchbase and MongoDB, YCSB is helpful for executing more sophisticated queries. Learn how to use YCSB-JSON today.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/ycsb-json-implementation-for-couchbase-and-mongodb\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-10-06T20:32:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:19:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/YCSB-JSON-Implementation.png\" \/>\n\t<meta property=\"og:image:width\" content=\"830\" \/>\n\t<meta property=\"og:image:height\" content=\"642\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Alex Gyryk\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alex Gyryk\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/\"},\"author\":{\"name\":\"Alex Gyryk\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/cf7700be3c6aa11a0e343b4e772d370f\"},\"headline\":\"YCSB-JSON: Implementation for Couchbase and MongoDB\",\"datePublished\":\"2018-10-06T20:32:50+00:00\",\"dateModified\":\"2025-06-14T03:19:56+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/\"},\"wordCount\":879,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"benchmark\",\"database\",\"JSON\",\"mongodb\",\"NoSQL Database\",\"ycsb\"],\"articleSection\":[\"Application Design\",\"Couchbase Architecture\",\"Couchbase Server\",\"Data Modeling\",\"High Performance\",\"SQL++ \/ N1QL Query\",\"Tools &amp; SDKs\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/\",\"name\":\"YCSB-JSON: Implementation for Couchbase and MongoDB\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2018-10-06T20:32:50+00:00\",\"dateModified\":\"2025-06-14T03:19:56+00:00\",\"description\":\"For JSON databases such as Couchbase and MongoDB, YCSB is helpful for executing more sophisticated queries. Learn how to use YCSB-JSON today.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/#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\/ycsb-json-implementation-for-couchbase-and-mongodb\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"YCSB-JSON: Implementation for Couchbase and MongoDB\"}]},{\"@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\/cf7700be3c6aa11a0e343b4e772d370f\",\"name\":\"Alex Gyryk\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9626fc579c5bf8bdb5fa4d15149f816a\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/baaaa3ba944997d5062b1e71633c1645559a8a91739c8509f659c16283fddc0e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/baaaa3ba944997d5062b1e71633c1645559a8a91739c8509f659c16283fddc0e?s=96&d=mm&r=g\",\"caption\":\"Alex Gyryk\"},\"description\":\"Alex Gyryk is a Principal Software Engineer, Performance at Couchbase. Prior to joining Couchbase, he spent a few years in Forte Group as Senior Performance Analyst.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/oleksandr-gyrykcouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"YCSB-JSON: implementa\u00e7\u00e3o para Couchbase e MongoDB","description":"Para bancos de dados JSON, como Couchbase e MongoDB, o YCSB \u00e9 \u00fatil para a execu\u00e7\u00e3o de consultas mais sofisticadas. Saiba como usar o YCSB-JSON hoje mesmo.","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\/ycsb-json-implementation-for-couchbase-and-mongodb\/","og_locale":"pt_BR","og_type":"article","og_title":"YCSB-JSON: Implementation for Couchbase and MongoDB","og_description":"For JSON databases such as Couchbase and MongoDB, YCSB is helpful for executing more sophisticated queries. Learn how to use YCSB-JSON today.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/ycsb-json-implementation-for-couchbase-and-mongodb\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-10-06T20:32:50+00:00","article_modified_time":"2025-06-14T03:19:56+00:00","og_image":[{"width":830,"height":642,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/YCSB-JSON-Implementation.png","type":"image\/png"}],"author":"Alex Gyryk","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Alex Gyryk","Est. reading time":"4 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/"},"author":{"name":"Alex Gyryk","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/cf7700be3c6aa11a0e343b4e772d370f"},"headline":"YCSB-JSON: Implementation for Couchbase and MongoDB","datePublished":"2018-10-06T20:32:50+00:00","dateModified":"2025-06-14T03:19:56+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/"},"wordCount":879,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["benchmark","database","JSON","mongodb","NoSQL Database","ycsb"],"articleSection":["Application Design","Couchbase Architecture","Couchbase Server","Data Modeling","High Performance","SQL++ \/ N1QL Query","Tools &amp; SDKs"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/","url":"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/","name":"YCSB-JSON: implementa\u00e7\u00e3o para Couchbase e MongoDB","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2018-10-06T20:32:50+00:00","dateModified":"2025-06-14T03:19:56+00:00","description":"Para bancos de dados JSON, como Couchbase e MongoDB, o YCSB \u00e9 \u00fatil para a execu\u00e7\u00e3o de consultas mais sofisticadas. Saiba como usar o YCSB-JSON hoje mesmo.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/#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\/ycsb-json-implementation-for-couchbase-and-mongodb\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"YCSB-JSON: Implementation for Couchbase and MongoDB"}]},{"@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\/cf7700be3c6aa11a0e343b4e772d370f","name":"Alex Gyryk","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/9626fc579c5bf8bdb5fa4d15149f816a","url":"https:\/\/secure.gravatar.com\/avatar\/baaaa3ba944997d5062b1e71633c1645559a8a91739c8509f659c16283fddc0e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/baaaa3ba944997d5062b1e71633c1645559a8a91739c8509f659c16283fddc0e?s=96&d=mm&r=g","caption":"Alex Gyryk"},"description":"Alex Gyryk \u00e9 engenheiro de software principal de desempenho na Couchbase. Antes de ingressar na Couchbase, ele passou alguns anos no Forte Group como Analista de Desempenho S\u00eanior.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/oleksandr-gyrykcouchbase-com\/"}]}},"authors":[{"term_id":9074,"user_id":23019,"is_guest":0,"slug":"oleksandr-gyrykcouchbase-com","display_name":"Alex Gyryk","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/baaaa3ba944997d5062b1e71633c1645559a8a91739c8509f659c16283fddc0e?s=96&d=mm&r=g","author_category":"","last_name":"Gyryk","first_name":"Alex","job_title":"","user_url":"","description":"Alex Gyryk \u00e9 engenheiro de software principal de desempenho na Couchbase. Antes de ingressar na Couchbase, ele passou alguns anos no Forte Group como Analista de Desempenho S\u00eanior."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/5848","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\/23019"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=5848"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/5848\/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=5848"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=5848"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=5848"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=5848"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}