{"id":5848,"date":"2018-10-06T13:32:50","date_gmt":"2018-10-06T20:32:50","guid":{"rendered":"http:\/\/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\/es\/ycsb-json-implementation-for-couchbase-and-mongodb\/","title":{"rendered":"YCSB-JSON: Implementaci\u00f3n para Couchbase y MongoDB"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">YCSB es una gran herramienta de benchmarking construida para ser f\u00e1cilmente extendida por cualquier driver que soporte e implemente operaciones b\u00e1sicas como: insertar, leer, actualizar, borrar y escanear.\u00a0<\/span><span style=\"font-weight: 400;\">Los datos sint\u00e9ticos simples introducidos por YCSB se ajustan perfectamente a este paradigma. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Pero cuando se trata de trabajar con bases de datos JSON como Couchbase y MongoDB, YCSB es \u00fatil porque las consultas se vuelven mucho m\u00e1s sofisticadas: consulta de matrices y objetos anidados, ejecuci\u00f3n de uniones y agregaciones.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Por un lado, la extensi\u00f3n YCSB-JSON deber\u00eda ser capaz de utilizar todas las operaciones JSON posibles soportadas por una base de datos.<br \/>\n<\/span><span style=\"font-weight: 400;\">Por otra parte, la aplicaci\u00f3n de este enfoque debe ser lo suficientemente gen\u00e9rico como para ser f\u00e1cilmente extendido de YCSB y MongoDB, Couchbase, o\u00a0<em>cualquier<\/em> otro controlador de base de datos, independientemente del nivel de consulta JSON que admita.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">La conexi\u00f3n YCSB-JSON est\u00e1 dise\u00f1ada para emular mejor los escenarios realistas del usuario final. Est\u00e1 dise\u00f1ada para funcionar con cualquier dato JSON, ya sean conjuntos de datos reales, pseudorrealistas o totalmente sint\u00e9ticos. Y uno de los requisitos de la herramienta es que no haya valores codificados en los predicados de consulta. Los usuarios s\u00f3lo pueden controlar la cardinalidad de los datos durante el proceso de generaci\u00f3n del conjunto de datos.\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;\">\u00a0Fig. 1. Un vistazo a la implementaci\u00f3n de YCSB-JSON<\/p>\n<h4><b>Modelo de datos<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">El modelo de datos que elegimos para esta comparativa est\u00e1 bien descrito en este art\u00edculo: <\/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;\">El conjunto de datos se genera utilizando una herramienta fakeit y se carga en una base de datos (Couchbase, MongoDB) mediante scripts externos. <\/span><span style=\"font-weight: 400;\">Mientras que el modelo est\u00e1 definido y los valores fijos se generan aleatoriamente, estos datos se generan aleatoriamente pero no son sint\u00e9ticos.<\/span><\/p>\n<p>&nbsp;<\/p>\n<h4><b>Gesti\u00f3n de datos <\/b><\/h4>\n<p><span style=\"font-weight: 400;\">Para cada operaci\u00f3n de la carga de trabajo, las consultas son fijas, pero los valores l\u00edmite de cada predicado parametrizado son no deterministas. Por lo tanto, se eligi\u00f3 el siguiente flujo de gesti\u00f3n de datos:<br \/>\n<\/span><\/p>\n<ol>\n<li><span style=\"font-weight: 400;\">Generar documentos por fakeit.\u00a0<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Carga los datos generados en una base de datos mediante cualquier script externo.<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Ejecuta la fase de carga. Durante esta fase el YCSB leer\u00e1 un subconjunto aleatorio de los documentos generados, almacenar\u00e1 todos sus valores en su cach\u00e9 interna.<\/span><\/li>\n<li><span style=\"font-weight: 400;\">Durante la fase de ejecuci\u00f3n, el YCSB utilizar\u00e1 los valores de su cach\u00e9 mientras vincula y ejecuta consultas contra la base de datos.<\/span><\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<h4><b>Generador de predicados<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">El YCSB utiliza generadores cuando opera con datos. El conector introduce su propio generador mapeado a un modelo de datos particular. La asignaci\u00f3n y el modelo s\u00f3lo existen dentro del espacio de nombres del generador. La salida del generador es un conjunto de predicados gen\u00e9ricos (pares campo-valor) para consultas concretas. Esto permite a los usuarios modificar los modelos y ampliar la herramienta con otras consultas sin modificar el resto del c\u00f3digo central.<\/span><\/p>\n<h5><span style=\"font-weight: 400;\">Generador de predicados: <a href=\"https:\/\/github.com\/couchbaselabs\/YCSB\/blob\/soe\/core\/src\/main\/java\/com\/yahoo\/ycsb\/generator\/soe\/Generator.java\">Generador.java\u00a0<\/a><\/span><\/h5>\n<p>&nbsp;<\/p>\n<p><span style=\"font-weight: 400;\">Ejemplo #1:\u00a0 <strong>Consulta de paginaci\u00f3n<\/strong><\/span><\/p>\n<p><span style=\"font-weight: 400;\">Una de las operaciones YCSB-JSON, la consulta de paginaci\u00f3n, puede representarse mediante la siguiente sentencia:<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;\">El predicado de la consulta es un campo dentro de un objeto. Cuando se usa Couchbase N1QL el campo puede ser simplemente accedido como \"direccion.zip\". Pero otras bases de datos pueden no ser tan flexibles por lo que el generador YCSB-JSON crea 2 predicados: el predicado padre (direcci\u00f3n) y el predicado hijo\/anidado (zip).<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Y el predicado hijo tiene un valor elegido aleatoriamente de la lista de valores de muestra para este campo en particular.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">La siguiente funci\u00f3n genera el <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;\">D\u00f3nde <code>nombre<\/code> es \"<\/span><span style=\"font-weight: 400;\">direcci\u00f3n<\/span><span style=\"font-weight: 400;\">\"<br \/>\n<\/span><span style=\"font-weight: 400;\">Y <code>predicado anidado<\/code> es otro objeto SoeQueryPredicate con el nombre \"<\/span><span style=\"font-weight: 400;\">zip<\/span><span style=\"font-weight: 400;\">\"y 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;\">Ejemplo #2 \u00a0<strong>Consulta del informe<\/strong><\/span><\/p>\n<p><span style=\"font-weight: 400;\">Los predicados para consultas m\u00e1s complejas se generan de la misma manera. La \u00fanica diferencia es que cuando la consulta introduce varios predicados, la secuencia de predicados (matriz de predicados) se genera en lugar de un \u00fanico predicado. A continuaci\u00f3n se muestra la consulta Informe:<\/span><\/p>\n<p><em><span style=\"font-weight: 400;\">SELECT o2.mes, c2.direcci\u00f3n.zip, SUMA(o2.precio_venta) <\/span><\/em><em><span style=\"font-weight: 400;\">FROM  c2<br \/>\nINNER JOIN pedidos o2 ON KEYS c2.lista_pedidos<br \/>\n<\/span><span style=\"font-weight: 400;\">WHERE c2.direcci\u00f3n.zip = \"valor\" AND o2.mes = \"valor\"<br \/>\n<\/span><span style=\"font-weight: 400;\">GROUP BY o2.mes, c2.direcci\u00f3n.zip ORDER BY SUM(o2.precio_venta)<\/span><\/em><\/p>\n<p><span style=\"font-weight: 400;\">Funci\u00f3n a continuaci\u00f3n genera secuencia de:<br \/>\n<\/span><span style=\"font-weight: 400;\">Predicado \"mes\", predicado \"direcci\u00f3n\" con predicado anidado \"zip\", predicado \"precio_venta\", 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;\">Aqu\u00ed encontrar\u00e1 otros generadores de consultas:<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>Nuevas operaciones<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">Es necesario actualizar el c\u00f3digo con nuevas operaciones. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Firmas en clase 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;\">Implementaciones en 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;\">Ampliaci\u00f3n de CoreWorkload con nuevas operaciones: <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>Implementaci\u00f3n de operaciones YCSB-JSON para<\/b><strong>\u00a0Couchbase y MongoDB<\/strong><\/h4>\n<p><span style=\"font-weight: 400;\">La funci\u00f3n DB driver de una operaci\u00f3n YCSB-JSON toma un par\u00e1metro adicional que es un objeto generador. Es pasado por la clase Workload y tiene una secuencia de predicado particular pre-construida.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dado que la estructura y las secuencias de los predicados est\u00e1n bien definidas por el generador, un controlador de BD puede acceder directamente a los nombres y valores y construir la consulta utilizando su lenguaje de consulta nativo u otros m\u00e9todos de acceso. A continuaci\u00f3n se muestran ejemplos de implementaci\u00f3n de consultas de P\u00e1gina e Informe.<\/span><\/p>\n<p><span style=\"font-weight: 400;\"><strong>Consulta de p\u00e1gina,<\/strong>\u00a0generando una sentencia de consulta para 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 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 del informe<\/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 las implementaciones de 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 las implementaciones de 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>Referencias<\/strong><\/h4>\n<p>Art\u00edculo parte 1:<br \/>\n<a href=\"https:\/\/www.couchbase.com\/blog\/es\/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>Implementaci\u00f3n de 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\u00f3ximos pasos<\/b><\/h4>\n<p><span style=\"font-weight: 400;\">Implementar un generador tipo fakeit para simplificar la generaci\u00f3n de datos y 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.8 (Yoast SEO v26.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\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\/es\/ycsb-json-implementation-for-couchbase-and-mongodb\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\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\/es\/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\":\"es\",\"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\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"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\/cf7700be3c6aa11a0e343b4e772d370f\",\"name\":\"Alex Gyryk\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\/es\/author\/oleksandr-gyrykcouchbase-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"YCSB-JSON: Implementaci\u00f3n para Couchbase y MongoDB","description":"Para bases de datos JSON como Couchbase y MongoDB, YCSB es \u00fatil para ejecutar consultas m\u00e1s sofisticadas. Aprenda a utilizar YCSB-JSON hoy mismo.","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\/ycsb-json-implementation-for-couchbase-and-mongodb\/","og_locale":"es_MX","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\/es\/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":"es","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: Implementaci\u00f3n para Couchbase y 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 bases de datos JSON como Couchbase y MongoDB, YCSB es \u00fatil para ejecutar consultas m\u00e1s sofisticadas. Aprenda a utilizar YCSB-JSON hoy mismo.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/ycsb-json-implementation-for-couchbase-and-mongodb\/"]}]},{"@type":"ImageObject","inLanguage":"es","@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":"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\/cf7700be3c6aa11a0e343b4e772d370f","name":"Alex Gyryk","image":{"@type":"ImageObject","inLanguage":"es","@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 es Ingeniero de Software Principal, Rendimiento en Couchbase. Antes de unirse a Couchbase, pas\u00f3 unos a\u00f1os en Forte Group como Analista Senior de Rendimiento.","url":"https:\/\/www.couchbase.com\/blog\/es\/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","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/5848","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\/23019"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=5848"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/5848\/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=5848"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=5848"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=5848"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=5848"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}