El lenguaje de consulta estructurado (SQL) se diseñó originalmente como un lenguaje de consulta intuitivo para almacenes de datos relacionales. NoSQL, relativamente incipiente en comparación, aún requiere compatibilidad con SQL, ya que muchas herramientas y aplicaciones de BI lo entienden. Couchbase soporta su propio lenguaje de consulta, N1QLque amplía SQL para consultar documentos JSON almacenados en Servidor Couchbase. Los drivers ODBC y JDBC de Simba Couchbase permiten a los usuarios "tener su pastel y comérselo también" permitiendo a los usuarios aprovechar tanto SQL como N1QL. Una de las formas de conseguirlo es con el controlador Ejecución colaborativa de consultas (CQE) que ofrece SimbaEngine X. Este artículo explica cómo los controladores Simba Couchbase utilizan CQE, aprovechando las similitudes entre SQL y N1QL, para garantizar un rendimiento óptimo.

Operación JOIN

N1QL admite Búsqueda de unionesque se pueden traducir a grandes rasgos en JOINs análogos en SQL. Aquí explicaremos cómo los drivers Simba Couchbase aprovechan la característica CQE para pasar las operaciones JOIN a Couchbase Server.

Considere el conjunto de datos de muestra de cerveza con documentos de cerveza y cervecería. Con los controladores Simba Couchbase, estos documentos se pueden asignar a dos tablas diferentes (cerveza y cervecería) y los usuarios pueden ejecutar consultas JOIN en estas dos tablas.

Digamos que si un usuario desea averiguar todas las cervezas que se fabrican en el estado de California, emitiría una sentencia SQL como la siguiente:

Para generar el resultado de esta consulta SQL tendría que hacer lo siguiente:

  • Recuperar todos los documentos de cerveza de Couchbase Server al cliente
  • Recuperar todos los documentos de cervecera de Couchbase Server al cliente
  • Ejecutar la unión
  • Filtra los resultados cuyo estado sea California.

 

Esto no es muy eficiente, ya que puede suponer una gran carga para el cliente si las tablas de unión son muy grandes. Además, las operaciones JOIN y WHERE están soportadas en N1QL. Transferir la carga al servidor mejoraría el rendimiento.
Los drivers Simba Couchbase, hacen exactamente eso. Con CQE, los drivers de Simba Couchbase traducen el SQL dado a N1QL análogo, que puede ser pasado a Couchbase Server para su ejecución. La sentencia SQL anterior puede traducirse a N1QL de la siguiente manera:

 

Bajo el capó, los controladores Simba Couchbase utilizan Simba SQL Engine para el análisis sintáctico, la preparación y la ejecución de consultas. Antes de la ejecución de la consulta, los controladores crean una representación de árbol de expresiones algebraicas (AE-Tree). La sentencia SQL adopta esta forma justo antes de que Simba SQL Engine la transforme en un plan de ejecución y la ejecute. Antes de la ejecución, el controlador puede revisar el plan y ver si puede ejecutar alguna parte del mismo. Esto se denomina paso de paso hacia abajo.

Justo antes de la etapa de pass-down (como se describe en el Optimización del AETree artículo), el árbol AE tiene el siguiente aspecto:

 

Y después del pass-down, el AETree tiene este aspecto:

 

Como puedes ver, el AE-Tree sólo contiene un nodo que representa la tabla unida, lo que significa que todo lo demás, incluyendo la unión y el filtrado, se pasa a Couchbase Server. Menos datos enviados a través del cable desde Couchbase Server al controlador y menos operaciones realizadas del lado del cliente = ¡mejor rendimiento!

Operación UNNEST

N1QL soporta la cláusula UNNEST, que conceptualmente realiza una unión de un array anidado con su objeto padre.

En los drivers Simba Couchbase, cualquier array anidado se mapea a una tabla virtual y los usuarios pueden JOIN la tabla padre con la tabla virtual. Esto utiliza de nuevo la capacidad CQE de SimbaEngine X y aprovecha la cláusula N1QL UNNEST.

Por ejemplo, todos los documentos de cervecería del conjunto de datos de muestras de cerveza contienen matrices anidadas llamadas brewery_address. En los drivers Simba Couchbase estos documentos se mapean a una tabla brewery y una tabla virtual brewery_address. Digamos que si un usuario desea obtener todos los nombres de las cervecerías tras unir brewery y brewery_address, emitiría una sentencia SQL como la siguiente:

Los controladores Simba Couchbase traducen la sentencia SQL anterior a N1QL de la siguiente manera:

 

Antes del pass-down, el árbol AE tiene el siguiente aspecto:

 

Después del pass-down, el árbol AE tiene el siguiente aspecto:

Como puedes ver, el AE-Tree sólo contiene un nodo que representa la tabla unida, lo que significa que todo lo demás se pasa a Couchbase Server para su ejecución. De nuevo, cuantas más operaciones se realicen en el servidor, y menos datos vuelvan al controlador, mayor será el rendimiento de la consulta.

Estos dos ejemplos destacan cómo los drivers Simba Couchbase utilizan todo el potencial de Couchbase Server, pasando las operaciones N1QL soportadas al servidor para su ejecución. Para cualquier característica SQL que no esté soportada por N1QL, los drivers ejecutan las operaciones (del lado del cliente). De esta forma, los controladores garantizan una amplia compatibilidad con SQL y N1QL, así como un alto rendimiento.

Ahora es su turno

Descargue una evaluación gratuita de Controladores ODBC/JDBC de Couchbase ¡y pruébelos con el nuevo Couchbase Server 4.5!

Autor

Publicado por Nowrin Anwar Joyita

Actualmente, Nowrin Anwar Joyita trabaja como Desarrollador de Software en Bit Quill Technologies. Antes de unirse a Bit Quill Technologies, Nowrin pasó alrededor de 2 años en Simba Technologies como Informática. Ha trabajado en múltiples drivers ODBC (C++) y JDBC (Java) en Simba, concretamente en los drivers ODBC y JDBC de Athena, los drivers ODBC y JDBC de Couchbase, el driver ODBC de MongoDB, el driver JDBC de Presto y el driver ODBC de Drill.

Dejar una respuesta