Nota: Esta nota de recomendación se ha redactado en colaboración con Till Westmann y Mike Carey, que dirigen el departamento de I+D de análisis de Couchbase.
[La segunda parte de este artículo de Even Pease está en: https://www.couchbase.com/blog/part-2-n1ql-to-query-or-to-analyze/]
Tanto el servicio de consultas como el de análisis de Couchbase soportan N1QL (SQL para JSON). Una pregunta habitual es: "¿Qué servicio debe ejecutar mi consulta?". La respuesta rápida es: "Depende de su carga de trabajo". Este blog explica esta respuesta.
Una transacción es cuando compras café y pastel en el supermercado. El análisis es cuando la tienda de comestibles examina todos los datos de ventas para ver qué día de la semana, qué mes del año se vende más café y/o pasteles, y así poder planificar el inventario, las ventas y los precios.
Todas las empresas hacen estas tres cosas en un ciclo o espiral [El Objetivo].
- Ejecutar el proceso empresarial para suministrar productos o servicios a los clientes.
- Analizar la empresa para determinar qué hay que cambiar y a qué.
- Haz que se produzca el cambio.
En la empresa actual, cada paso requiere aplicaciones que lo realicen.

El Servicio de Consultas es utilizado por las aplicaciones necesarias para el funcionamiento de la empresa; está diseñado para un gran número de consultas concurrentes, cada una de las cuales realiza una pequeña cantidad de trabajo. En el mundo de los RDBMS, esta carga de trabajo se denomina carga de trabajo OLTP.
Las aplicaciones o herramientas utilizadas para el análisis tienen diferentes características de carga de trabajo. Éstas suelen utilizar el Servicio de Análisis; está diseñado para un menor número de consultas concurrentes que analizan un mayor número de documentos. En el mundo de los RDBMS, esta carga de trabajo se denomina carga de trabajo OLAP.
Profundicemos en los detalles de estos dos servicios.
| Servicio de consulta | Servicio de análisis |
| Tutoriales | |
| https://query-tutorial.couchbase.com/tutorial/#1 | https://sqlplusplus-tutorial.couchbase.com/tutorial/#1 |
| Comparación a alto nivel | |
| Se utiliza para la manipulación de datos dentro de la lógica de la aplicación | Se utiliza para informes, análisis (históricos, interactivos), cuadros de mando |
| Consultas breves
- SQL relativamente sencillo - Normalmente se trata de pequeñas cantidades de datos |
Operaciones más largas
- SQL complejo con análisis - Suelen implicar grandes cantidades de datos |
| Ejecutar SELECT, INSERT, UPDATE, DELETE, MERGE para aplicaciones operativas | Ejecutar SELECT para el análisis |
| Actualizaciones aleatorias
- Actualizar pocos documentos por consulta |
No hay actualizaciones
- Cambios introducidos desde el Servicio de Datos |
| Latencia de un milisegundo a un segundo,
alto rendimiento (10-1000 qps), el objetivo de rendimiento es consultas/segundo |
Tiempo de respuesta de segundos a minutos,
<1-10 consultas por segundo, el objetivo de rendimiento es segundos/consulta |
| Gran número de índices | Menos índices |
| Consultas escritas por el desarrollador; las consultas generadas son bien conocidas | Consultas ad hoc; informes complejos, cuadros de mando, carga de trabajo de BI |
| Las consultas se ejecutan en un único nodo de consulta utilizando la infraestructura de datos e índices distribuidos. | Las consultas se ejecutan en todos los nodos de análisis utilizando su infraestructura distribuida de cálculo, índices y datos. |
| Comparación técnica: Arquitectura | |
| Las consultas se ejecutan en modo SMP, el rendimiento es escalable añadiendo nuevos nodos de consulta. | Las consultas se ejecutan en modo MPP, pueden manejar datos más grandes o reducir los tiempos de ejecución de las consultas añadiendo nuevos nodos de análisis. |
| Comparación técnica: Optimizer | |
| Unión de bucles anidados por defecto
Hash join mediante sugerencia de consulta |
Hash join paralelo por defecto,
Unión de bucles anidados (índice) o unión de difusión mediante sugerencia de consulta |
| Comparación técnica: Índices | |
| Índices secundarios globales | Índices secundarios locales (ubicados junto a las particiones de datos) |
| Utiliza índices optimizados para memoria; índices secundarios estándar (Plasma) | Índices secundarios basados en árboles combinados con estructura logarítmica (LSM) |
| Soporte para escaneos de índices cubiertos y no cubiertos | Exploraciones de índices no cubiertas |
| Puede utilizar el índice de texto completo para las consultas (6.5) | |
| Comparación técnica: Ejecución | |
| La mayoría de las consultas se preparan una vez y se ejecutan muchas veces | Consultas ad hoc y exploratorias |
| Los SDK utilizan el modelo preparar-ejecutar basado en una bandera ad hoc | Los SDK ofrecen consultas ad hoc y parametrizadas |
| La mayoría de las operaciones se realizan en memoria; sólo cuando una exploración de índices devuelve datos de gran tamaño se escriben en el disco de relleno | Operaciones de memoria limitada en datos de gran tamaño (superior a la memoria del clúster) con un desbordamiento gradual según sea necesario. |
| Paralelismo de consultas en un único nodo | Operadores de unión, ordenación, agregación y agregación agrupada multinodo en paralelo con partición |
| Espera un único dispositivo de almacenamiento (posiblemente RAID) | Uso sin RAID de varios dispositivos de almacenamiento |
| Aislamiento del rendimiento mediante índices de cobertura que admiten operaciones de escaneado, agrupación y agregación en nodos Index Service. | Aislamiento del rendimiento para todas las consultas mediante la sombra de los datos en los nodos del Servicio de Análisis. |
| Documentación técnica | |
| https://docs.couchbase.com/server/6.0/n1ql/n1ql-language-reference/index.html | https://docs.couchbase.com/server/6.0/analytics/introduction.html |
| Información técnica | |
| https://www.couchbase.com/products/n1ql | https://www.couchbase.com/sqlplusplus |
| Libros técnicos | |
| https://www.couchbase.com/blog/a-guide-to-n1ql-features-in-couchbase-5-5-special-edition/ | https://resources.couchbase.com/sql_tutorial
https://www.amazon.com/SQL-Users-Tutorial-Don-Chamberlin/dp/0692184503/ |
- [El OBJETIVO] El Objetivo: El proceso de mejora continua. https://www.amazon.com/Goal-Process-Ongoing-Improvement/dp/0884271951/ref=sr_1_1?keywords=the+goal&qid=1547969233&sr=8-1
- Sistemas de compromiso para los puestos de trabajo de los clientes: https://marketing.cioreview.com/cxoinsight/systems-of-engagement-for-customer-jobs-nid-24677-cid-51.html
- Parte 2 de este artículo de Even Pease: https://www.couchbase.com/blog/part-2-n1ql-to-query-or-to-analyze/