
Introducción
Este será el tercer post de una serie sobre la Couchbase Móvil pila. Puede encontrar el primer y segundo post aquí y aquírespectivamente. Cubren la instalación de Servidor Couchbase y algunas partes interesantes de Consola web de Couchbase. En este post hablaremos sobre cómo trabajar con Couchbase Server desde la línea de comandos.
Fondo
Para sentirse cómodo con toda la pila, es genial instalar y ejecutar todo en su máquina de desarrollo. En esta serie de entradas, voy a caminar a través de los pasos para empezar con cada componente. También mostraré cómo explorar un poco más por el camino.
Sólo haré una configuración mínima. Esto no pretende explicar lo que necesitas para un entorno de producción. Asumo que estás familiarizado con algunos conceptos básicos de NoSQL, tienes alguna comprensión de Couchbase, y sabes cómo construir aplicaciones en algo como Java, Android o iOS. Si quieres leer más sobre bases de datos NoSQL o Couchbase, puedes encontrar un montón de recursos en la web Couchbase sitio.
Couchbase es de código abierto. Todo lo que usaré aquí es gratis para probar. Mira al final del post para más recursos si necesitas ayuda.
Línea de comandos
Couchbase Server tiene un buen número de herramientas de línea de comandos. También tiene una extensa API REST. Echemos un vistazo a algunos puntos interesantes.
Utilidades de línea de comandos
En un Mac, normalmente puedes encontrar las herramientas de línea de comandos en /Applications/Couchbase Server.app/Contents/Resources/couchbase-core/bin.
Puede encontrar las ubicaciones de los comandos para Linux y Windows aquí: https://developer.couchbase.com/documentation/server/current/cli/cli-intro.html
couchbase-cli: la herramienta de gestión de clústeres por línea de comandos
Esta herramienta puede funcionar en nodos individuales o en clusters enteros. Admite comandos para todo, desde la manipulación de buckets hasta las réplicas entre centros de datos. He aquí algunos ejemplos.
Lista de servidores
El siguiente comando devolverá una breve lista de los servidores de un clúster.
|
1 |
$ couchbase-cli servidor-lista -c localhost:8091 -u Administrador -p contraseña |
Salida
|
1 |
ns_1@127.0.0.1 127.0.0.1:8091 saludable activo |
Como era de esperar, esto muestra que tenemos un servidor activo ejecutándose localmente.
(Nota: por brevedad, en adelante omitiré las opciones de cluster, nombre de usuario y contraseña. Sin embargo, las necesitarás para los comandos reales).
Recogida de registros
Podemos activar el registro. Hay opciones para cargar automáticamente los datos para el soporte.
|
1 |
$ couchbase-cli recoja-Registros-iniciar --todos-nodos |
Salida
|
1 |
ÉXITO: Registro colección iniciado |
A continuación, comprueba el estado.
|
1 |
$ couchbase-cli recoja-Registros-estado |
Salida
|
1 2 3 4 5 |
Estado: completado Detalles: Nodo: ns_1@127.0.0.1 Estado: recogida ruta : /Usuarios/hod/Biblioteca/Aplicación Ayuda/Couchbase/var/lib/couchbase/tmp/collectinfo-2016-12-06T213207-ns_1@127.0.0.1.zip |
Y deja de talar.
|
1 |
$ couchbase-cli recoja-Registros-stop |
Salida
|
1 |
ÉXITO: recoja Registros con éxito parado |
Los archivos de registro son extensos. La muestra aquí contenía muchos archivos y más de un megabyte de información. Es todo texto que puedes mirar. Si alguna vez necesitas soporte para una instalación de CB Server, es bueno saber cómo obtener estos datos.
cbq: Shell de línea de comandos para N1QL
La otra herramienta que veremos es cbq, el intérprete de comandos interactivo para ejecutar consultas N1QL.
En este caso, el comando se ejecutará en bucle pidiéndonos información. Empieza ejecutándolo sin opciones.
|
1 |
$ cbq |
Inmediatamente debería ver un par de avisos y el símbolo del sistema.
|
1 2 3 4 5 |
No entrada credenciales. En pedir a conecte a a servidor con autenticación, por favor proporcionar credenciales. Conectado a : https://localhost:8091/. Teclee Ctrl-D o QUIT para salir. Ruta a historia archivo para el concha : /Usuarios/hod/.cbq_historia cbq> |
Crear un índice primario
Para realizar consultas, necesitarás al menos un índice primario. Algunas versiones de los datos de la muestra de cerveza vienen con uno, otras no.
|
1 |
cbq> CREAR PRIMARIO ÍNDICE en `cerveza-muestra`; |
Salida
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "requestID": "e708d3aa-cfa4-4322-9c8c-a6b6524ba99b", "firma": null, "resultados": [ ], "status": "éxito", "métricas": { "tiempo transcurrido": "579.828473ms", "executionTime": "578.844657ms", "resultCount": 0, "resultSize": 0 } } |
Consultas en curso
He aquí un ejemplo de consulta bastante simple.
|
1 |
cbq> SELECCIONE DISTINTO categoría, estilo DESDE `cerveza-muestra` DONDE tipo = "cerveza" Y estilo COMO "%Imperial%" PEDIR POR categoría, estilo; |
Salida
|
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 |
{ "requestID": "2d4b3052-d42f-4081-bff1-1a06576dec92", "firma": { "categoría": "json", "estilo": "json" }, "resultados": [ { "categoría": "Cerveza norteamericana", "estilo": "American-Style Imperial Stout" }, { "categoría": "Cerveza norteamericana", "estilo": "Imperial o Doble India Pale Ale" }, { "categoría": "Cerveza norteamericana", "estilo": "Imperial o Double Red Ale" } ], "status": "éxito", "métricas": { "tiempo transcurrido": "259.555065ms", "executionTime": "259.496458ms", "resultCount": 3, "resultSize": 331, "sortCount": 3 } } |
Hemos extraído todas las cervezas que tienen "Imperial" como parte de su descripción de estilo.
Fíjese en las marcas traseras alrededor de la muestra de cerveza. Son necesarias debido al guión del nombre.
N1QL debería resultarte familiar si conoces SQL. N1QL es un superconjunto de SQL. Los datos JSON a menudo no son planos como los datos relacionales. N1QL tiene extensiones para hacer cosas como desenrollar matrices. Puedes leer más sobre N1QL aquí.
Para comprender N1QL en mayor profundidad, recomiendo probar este estupendo tutorial interactivo.
Puedes encontrar un útil post de Nic Raboy sobre características más avanzadas de cbq aquí.
API REST
Couchbase Server dispone de un amplio conjunto de Puntos finales REST. La mayoría tienen que ver con la gestión de las implantaciones.
Mostraré ejemplos usando curl. Hay una herramienta muy buena que recomiendo como reemplazo de curl, httpie. Es un poco más fácil de usar y crea una salida coloreada. No lo usaré aquí ya que curl es más común.
Me parecen interesantes otros puntos finales para ver lo que producen, pero para nuestros fines voy a centrarme en las consultas.
Ver consultas
En un post anterior sobre la Consola web de Couchbasehemos echado un vistazo a las vistas. Las vistas crean un índice estático que puedes utilizar para recuperar información. Puedes controlar la respuesta con una serie de opciones. Gran parte del valor de las vistas proviene de cómo se definen las funciones map/reduce, pero estas opciones mejoran aún más el uso de las vistas para consultar datos. El filtrado por clave es especialmente útil. Veámoslo.
Se accede a las vistas mediante URI de la forma
|
1 |
GET /[cubo-nombre]/_diseño/[ddoc-nombre]/Ver/[ver-nombre] |
Para nuestra muestra de cerveza, podemos obtener toda la información sobre la fábrica y la cerveza de esta manera.
|
1 |
$ rizo https://localhost:8092/beer-sample/_design/beer/_view/brewery_beers |
El resultado es una gran cantidad de información. He aquí una breve muestra de la salida.
|
1 2 3 4 |
{"total_rows":7303,"filas":[ {"id":"21st_amendment_brewery_cafe","llave":["21st_amendment_brewery_cafe"],"valor":null}, {"id":"21st_amendment_brewery_cafe-21a_ipa","llave":["21st_amendment_brewery_cafe","21st_amendment_brewery_cafe-21a_ipa"],"valor":null}, {"id":"21st_amendment_brewery_cafe-563_stout","llave":["21st_amendment_brewery_cafe","21st_amendment_brewery_cafe-563_stout"],"valor":null}, |
Puede ver la información clave. Podemos utilizarla para limitar los resultados. He aquí un ejemplo utilizando una sola clave.
|
1 |
$ rizo -g https://localhost:8092/beer-sample/_design/beer/_view/brewery_beers?key='["yuksom_breweries"]' |
Y el resultado.
|
1 2 3 4 |
{"total_rows":7303,"filas":[ {"id":"yuksom_breweries","llave":["yuksom_breweries"],"valor":null} ] } |
Fíjate que he añadido la opción -g. Curl por defecto permite ciertos tipos de coincidencia de patrones (globbing). Esto funciona utilizando los caracteres especiales {} y []. Los necesitamos para especificar la clave en JSON. La forma más fácil es desactivar globbing. No olvide también las comillas simples alrededor del parámetro.
Ese ejemplo filtraba por una clave. Aquí hay uno que muestra cómo obtener resultados que coincidan con más de una a la vez.
|
1 |
$ rizo -g -u Administrador:contraseña https://localhost:8092/beer-sample/_design/beer/_view/brewery_beers?keys='[["yuksom_breweries"],["wild_duck_brewing"]]' |
Observa que la salida no está ordenada.
|
1 2 3 4 5 |
{"total_rows":7303,"filas":[ {"id":"yuksom_breweries","llave":["yuksom_breweries"],"valor":null}, {"id":"pato_salvaje_cervecero","llave":["pato_salvaje_cervecero"],"valor":null} ] } |
Más allá del uso en la depuración (o simplemente entender lo que está pasando con) puntos de vista, he visto algunas cosas interesantes escritas sólo con secuencias de comandos de shell y este tipo de consulta.
Consultas N1QL
Resulta que también se pueden ejecutar consultas N1QL desde la línea de comandos. He aquí un ejemplo sencillo que extrae todo del cubo de muestras de cerveza.
|
1 |
$ rizo https://localhost:8093/query/service?statement='SELECT%20*%20FROM%20`beer-sample`' |
La salida incluye algunas estadísticas y los documentos completos. (Las estadísticas se envían a stderr en un Mac).
|
1 2 3 |
% Total % Recibido % Xferd Media Velocidad Tiempo Tiempo Tiempo Actual Dload Cargar Total Gastado Izquierda Velocidad 100 16240 0 16240 0 0 299k 0 --:--:-- --:--:-- --:--:-- 299k |
|
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 |
{ "requestID": "936d7b6a-1dea-4625-a6b2-1be91967187e", "firma": { "*": "*" }, "resultados": [ { "muestra de cerveza": { "dirección": [ "563 Second Street" ], "ciudad": "San Francisco", "código": "94107", "país": "Estados Unidos", "descripción": "The 21st Amendment Brewery" ofrece una variedad de galardonadas cervezas caseras y cocina americana a la parrilla en un confortable ambiente tipo loft. Únase a nosotros antes y después de los partidos de béisbol de los Giants en nuestra cervecería al aire libre. Un lugar ideal para eventos y fiestas en nuestro loft semiprivado. Nos vemos pronto en el 21A"., "geo": { "exactitud": "TECHO", "lat": 37.7825, "lon": -122.393 }, "nombre": "21st Amendment Brewery Cafe", "teléfono": "1-415-369-0900", "estado": "California", "tipo": "cervecería", "actualizado": "2010-10-24 13:54:07", "sitio web": "https://www.21st-amendment.com/" } }, { "muestra de cerveza": { ... |
The N1QL command must have certain characters encoded to work properly. In this case, you can probably guess that %20 is the encoding for a single space. You can read more about that on this Stack Overflow post.
Próximos pasos
Hemos dedicado bastante tiempo a Couchbase Server. A continuación nos adentraremos en el mundo móvil con una inmersión en Pasarela de sincronización. Seguiré más o menos el mismo formato. En el caso de Sync Gateway, sin embargo, veremos que hay mucho más que hacer utilizando las API REST. Esto incluirá algunos trucos para ayudar a diagnosticar problemas comunes. Después veremos Couchbase Lite, y terminaremos viendo cómo se mueven los datos de extremo a extremo a través de la pila completa. Permanece atento.
[buttongroup][button style="btn-link btn-lg" icon="fa-arrow-left" align="left" iconcolor="#dd3333″ type="link" target="false" title="Anterior: Consola web de Couchbase" link="https://www.couchbase.com/blog/confortable-couchbase-mobile-couchbase-web-console/" linkrel=""][button style="btn-link btn-lg" icon="fa fa-arrow-right" align="left" iconcolor="#dd3333″ type="link" target="false" title="Siguiente: Instalación de Sync Gateway" link="https://www.couchbase.com/blog/getting-comfortable-couchbase-mobile-installing-sync-gateway/" linkrel=""][/buttongroup]
Posdata
Consulte más recursos en nuestra portal para desarrolladores y síganos en Twitter @CouchbaseDev.
Puede enviar preguntas a nuestro foros. Y participamos activamente en Stack Overflow.
Puede seguirme personalmente en @HodGreeley
[...] Anterior: Instalación de Couchbase Server Siguiente: Couchbase Server a través de la línea de comandos [...]
[Anterior: Couchbase Server a través de la línea de comandos Siguiente: Sync Gateway a través de la línea de comandos [...]