Hay un montón de nuevas características que se han introducido en el recién disponible Couchbase Server 4.5. Query Workbench, APIs de sub-documentos y búsqueda de texto completo son sólo algunas de las grandes adiciones a una ya gran base de datos NoSQL.
Para este artículo vamos a centrarnos en algunas de las características avanzadas envueltas alrededor de un ya existente, pero fuertemente mejorado Couchbase Shell - CBQ.
¿Qué es el cliente de consultas Couchbase (CBQ)?
En caso de que sea la primera vez que te encuentras con el cliente de consultas Couchbase, también conocido como CBQ, es una gran utilidad de línea de comandos para ejecutar consultas contra Servidor Couchbase. Se introdujo por primera vez en Couchbase Server 4.0 con el lanzamiento de la tecnología N1QL de Couchbase. Si eres nuevo en Couchbase o NoSQL en general, CBQ es similar a herramientas como SQLPlus de Oracle, o la interfaz de línea de comandos de MySQL. Con el lanzamiento de Couchbase Server 4.5, CBQ ha evolucionado en lo que se puede describir mejor como un shell.
Para utilizar el Shell de Couchbase debes ejecutar una de las siguientes opciones dependiendo de tu sistema operativo. En un Mac, usarías el Terminal y ejecutarías:
1 2 3 |
./Aplicaciones/Couchbase Servidor.aplicación/Contenido/Recursos/couchbase-núcleo/papelera/cbq |
En Microsoft Windows se ejecutaría lo siguiente:
1 2 3 |
C:/Programa Archivos/Couchbase/Servidor/papelera/cbq.exe |
Por supuesto, en ambos casos necesitarás tener Couchbase Server 4.0 o superior instalado en tu ordenador. Sin embargo, en Couchbase Server 4.5, las cosas han cambiado, y cuando digo cambiado, me refiero a que han mejorado aún más.
Repasemos algunas de las cosas que se podían hacer antes de la versión 4.5, que introduce funciones CBQ avanzadas. Con cada solicitud CBQ se le devuelven ciertos datos, así como información métrica sobre la consulta que ha ejecutado. Por ejemplo, digamos que ejecutamos el siguiente comando simple:
1 2 3 |
SELECCIONE 1=1; |
El comando anterior nos dejará los siguientes resultados en la salida CBQ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
{ "requestID": "879a196e-8de4-400b-a6b6-278a66ad1e0b", "firma": { "$1": "booleano" }, "resultados": [ { "$1": verdadero } ], "status": "éxito", "métricas": { "tiempo transcurrido": "30.360043ms", "executionTime": "26.927386ms", "resultCount": 1, "resultSize": 34 } } |
Por supuesto nos dice que nuestro resultado es verdadero, pero también nos da información como cuánto tiempo tardó en ejecutarse así como otros. Deberías ignorar el largo tiempo de 30ms porque en mi entorno local tengo bajas especificaciones y mínimos índices creados.
Además de poder seleccionar datos, CBQ puede ejecutar consultas DML. Las funciones básicas de CBQ permiten insertar, actualizar, subir, borrar y recuperar datos.
Funciones Shell avanzadas
Lo más probable es que estés aquí porque quieres saber qué hace diferente a CBQ entre Couchbase Server 4.5 y el anterior Couchbase Server 4.1. Las características avanzadas se pueden dividir en unas pocas categorías generales. Lo que estás a punto de ver es sólo una muestra de lo que puedes conseguir. La documentación completa sobre el tema se puede encontrar en el Recursos para desarrolladores de Couchbase.
Gestión de conexiones
Con Couchbase 4.5 puedes conectarte a clusters de Couchbase con CBQ o puedes conectarte a nodos de consulta individuales. Esto es genial cuando se trata de solucionar problemas de rendimiento de tu base de datos.
Para conectarse a un clúster puede utilizar la forma predeterminada y ejecutar ./cbq
desde la línea de comandos, o puede introducir una etiqueta opcional como ésta:
1 2 3 |
./cbq -e host:8091 |
Fíjate en que he especificado el puerto 8091 para indicar un cluster. Puedes usar el puerto 8093 para especificar un servicio de consulta en particular. Si prefieres conectarte a un cluster o servicio sólo después de iniciar CBQ, puedes ejecutar lo siguiente:
1 2 3 |
CONECTAR host; |
Si va por ese camino, utilice DESCONECTAR;
para finalizar la conexión.
Gestión de la seguridad
Es muy común y típicamente recomendado que tus datos de Couchbase estén bloqueados mediante el uso de credenciales. No querrás que cualquiera acceda a tus datos.
Antes de Couchbase 4.5, especificar contraseñas para tu base de datos o buckets en CBQ no era una cosa. Ahora las cosas han cambiado. Ahora puedes especificar nombres de usuario y contraseñas a través de CBQ.
Digamos que desea conectarse a su clúster Couchbase utilizando las credenciales de administrador. Podrías pasar una etiqueta opcional como esta:
1 2 3 |
./cbq -u=admin -p=contraseña; |
Si prefieres no exponer tu contraseña en el shell, puedes omitir la etiqueta de contraseña y te pedirá una mientras se conecta.
Digamos que quieres conectarte a tu base de datos con más de un conjunto de credenciales. Puedes pasar una lista de credenciales como esta:
1 2 3 |
./cbq -c=cerveza-muestra:pwd1,viaje-muestra:pwd2 |
Al igual que con los comandos de conexión, puede que no desee especificar las credenciales en el momento de iniciar CBQ. Utilizando el comando SET
y UNSET
con CBQ en ejecución, puede especificar las credenciales. Por ejemplo, con CBQ en ejecución, ejecute lo siguiente:
1 2 3 |
SET -creds cerveza-muestra:b1, sesión:s1; |
Para borrar las credenciales, basta con llamar a la función UNSET
en su lugar.
Soporte de secuencias de comandos
Anteriormente, con CBQ estabas limitado a ejecutar consultas dentro de la herramienta y no de forma programada. En Couchbase Server 4.5, ahora puedes crear scripts para ejecutar contra CBQ. Tal vez tienes scripts de limpieza que quieres ejecutar a través de un cron, o tal vez alguna otra razón. Puedes hacer algo como esto:
1 2 3 4 5 |
$ echo "select * from `cerveza-muestra` limit 10;" | ./cbq $ cat archivo.txt | ./cbq $ ./cbq < archivo.txt |
Por supuesto, hay tres formas diferentes de hacerlo.
Es habitual querer almacenar los resultados de sus consultas en un archivo de salida. Puede que sus analistas recojan los datos, o puede que tenga otros scripts que comprueben que se han generado los datos adecuados. Para especificar un archivo de salida en el momento del lanzamiento, añada los siguientes parámetros:
1 2 3 |
$ echo "select * from `cerveza-muestra` limit 10;" | ./cbq -o nombre de archivo.txt |
Fíjese en el -o nombrearchivo.txt
en el fragmento anterior. Los resultados de esa consulta se guardarán en un archivo.
Gestión de consultas
Con Couchbase 4.5 puedes usar CBQ para monitorizar las operaciones de consultas individuales y nodos del servicio de consultas, así como interactuar con el propio servicio de consultas. Por ejemplo, digamos que experimentas una gran carga en tu cluster. Una de las cosas lógicas sería ver qué tipo de consultas se están ejecutando en ese momento. Para hacer esto con CBQ, puede ejecutar lo siguiente:
1 2 3 |
SELECCIONAR * DESDE sistema:solicitudes_activas; |
Ejecutando el comando anterior obtendría resultados similares a los siguientes:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
{ "requestID": "7796392a-df14-4687-a885-5db355ba22b9", "firma": { "*": "*" }, "resultados": [ { "solicitudes_activas": { "Tiempo transcurrido": "1.160625ms", "ExecutionTime": "1.131825ms", "PhaseCounts": { "PrimaryScan": 2 }, "PhaseOperators": { "Fetch": 1, "PrimaryScan": 1 }, "RequestId": "7796392a-df14-4687-a885-5db355ba22b9", "RequestTime": "2016-05-03 08:42:07.733283136 -0400 EDT", "Estado": "corriendo", "Declaración": "SELECT * FROM sistema:solicitudes_activas" } } ], "status": "éxito", "métricas": { "tiempo transcurrido": "1.25837ms", "executionTime": "1.229031ms", "resultCount": 1, "resultSize": 610 } } |
Por supuesto, en mi máquina local, la única consulta que se estaba ejecutando era la consulta para averiguar las solicitudes activas contra el clúster. En un entorno de producción será mucho mayor.
Ahora tal vez note que se ejecutan muchas consultas iguales en su búsqueda de solicitudes activas. Podría ser una buena idea hacer una sentencia preparada con ellas. Sin embargo, puede que ya sean sentencias preparadas. Puede comprobarlo ejecutando lo siguiente:
1 2 3 |
SELECCIONAR * DESDE sistema:prepara; |
La consulta anterior le proporcionará información sobre todas las sentencias preparadas conocidas y su estado en la caché de sentencias preparadas del motor de consultas.
¿Qué ocurre si ha realizado sentencias preparadas, pero de vez en cuando el rendimiento de su servidor sigue aumentando? Con las características de CBQ para la gestión de consultas puede examinar consultas lentas pero completadas. Puedes comprobar consultas pasadas ejecutando lo siguiente:
1 2 3 |
SELECCIONAR * DESDE sistema:solicitudes_realizadas; |
Recuerda que he mencionado la lentitud. Puedes determinar la lentitud basándote en un umbral que defines en el motor cbq. Por defecto, cualquier consulta que se ejecute más de 1 segundo entrará en esta categoría, pero quizás sólo te importen las consultas más largas. Este valor se puede cambiar.
Más información sobre la gestión de consultas aquí.
Tal vez le interese más ejecutar sentencias preparadas que supervisar las actividades de consulta que se están produciendo. Desde CBQ puede utilizar la función EJECUTAR
para ejecutar su declaración preparada. Algo como esto:
1 2 3 |
EJECUTAR nombre-de-preparado-stmt; |
Muchas de sus sentencias preparadas serán consultas parametrizadas. Después de todo, usted está siendo preventivo contra la inyección SQL. Para pasar parámetros con nombre puedes hacer lo siguiente:
1 2 3 4 |
SET -$r 9.5; SET -$fecha "1-1-2016"; |
No es la primera vez que ve SET
. Lo utilizamos para definir credenciales, pero esta vez anteponiendo a algo el prefijo -$
estamos diciendo que es un parámetro con nombre.
Si prefiere utilizar parámetros posicionales, puede llamar a SET
en una matriz de datos:
1 2 3 |
SET -args [ 9.5, "1-1-2016"]; |
Debería EJECUCIÓN
de tu consulta se descontrola y tienes que pararlo. Basta con pulsar control+c y se detendrá.
Gestión de sesiones
La gestión de sesiones no es muy diferente de lo que ya he descrito cuando se trata de consultar y añadir credenciales de usuario. Como parte de las características avanzadas de CBQ puedes gestionar diferentes sesiones de shell o establecer varias preferencias de usuario.
Anteriormente vio cómo SET
y UNSET
en una sesión, pero también puede utilizar PUSH
y POP
. En lugar de establecer un montón de parámetros de nivel superior, está creando una pila de parámetros para su sesión. Esto podría ser útil para las secuencias de comandos o algo más.
Supongamos que tienes muchas consultas locas que piensas utilizar continuamente con CBQ. En lugar de tener que recordar cada consulta, puede establecer un alias para ellas. Por ejemplo:
1 2 3 |
ALIAS mi_consulta SELECCIONAR * DESDE `por defecto`; |
Sí, la consulta anterior no es muy compleja, pero podría serlo. Si quisiera ejecutar esta consulta, podría ejecutar lo siguiente desde CBQ:
1 2 3 |
\mi_consulta; |
No es mucho, pero ser capaz de alias consultas es enorme cuando se piensa en bases de datos de la competencia. El alias de consultas es una característica única de Couchbase y puede ahorrarte mucho tiempo a la hora de hacer consultas.
Conclusión
Acabas de probar algunas de las nuevas características de CBQ que hicieron su aparición a partir de Couchbase Server 4.5. Puedes jugar con las características de gestión de conexiones, seguridad, scripting, gestión y monitorización de consultas y gestión de sesiones para mejorar tu productividad con Couchbase Server.
Para obtener una lista más completa de comandos y funciones, visite la página documentación oficial en el portal para desarrolladores.