
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 server-list -c localhost:8091 -u Administrator -p password |
Salida
|
1 |
ns_1@127.0.0.1 127.0.0.1:8091 healthy active |
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 collect-logs-start --all-nodes |
Salida
|
1 |
SUCCESS: Log collection started |
A continuación, comprueba el estado.
|
1 |
$ couchbase-cli collect-logs-status |
Salida
|
1 2 3 4 5 |
Status: completed Details: Node: ns_1@127.0.0.1 Status: collected path : /Users/hod/Library/Application Support/Couchbase/var/lib/couchbase/tmp/collectinfo-2016-12-06T213207-ns_1@127.0.0.1.zip |
Y deja de talar.
|
1 |
$ couchbase-cli collect-logs-stop |
Salida
|
1 |
SUCCESS: collect logs successfully stopped |
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 input credentials. In order to connect to a server with authentication, please provide credentials. Connected to : https://localhost:8091/. Type Ctrl-D or QUIT to exit. Path to history file for the shell : /Users/hod/.cbq_history 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> CREATE PRIMARY INDEX on `beer-sample`; |
Salida
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "requestID": "e708d3aa-cfa4-4322-9c8c-a6b6524ba99b", "signature": null, "results": [ ], "status": "success", "metrics": { "elapsedTime": "579.828473ms", "executionTime": "578.844657ms", "resultCount": 0, "resultSize": 0 } } |
Consultas en curso
He aquí un ejemplo de consulta bastante simple.
|
1 |
cbq> SELECT DISTINCT category, style FROM `beer-sample` WHERE type = "beer" AND style LIKE "%Imperial%" ORDER BY category, style; |
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", "signature": { "category": "json", "style": "json" }, "results": [ { "category": "North American Ale", "style": "American-Style Imperial Stout" }, { "category": "North American Ale", "style": "Imperial or Double India Pale Ale" }, { "category": "North American Ale", "style": "Imperial or Double Red Ale" } ], "status": "success", "metrics": { "elapsedTime": "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 /[bucket-name]/_design/[ddoc-name]/_view/[view-name] |
Para nuestra muestra de cerveza, podemos obtener toda la información sobre la fábrica y la cerveza de esta manera.
|
1 |
$ curl 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,"rows":[ {"id":"21st_amendment_brewery_cafe","key":["21st_amendment_brewery_cafe"],"value":null}, {"id":"21st_amendment_brewery_cafe-21a_ipa","key":["21st_amendment_brewery_cafe","21st_amendment_brewery_cafe-21a_ipa"],"value":null}, {"id":"21st_amendment_brewery_cafe-563_stout","key":["21st_amendment_brewery_cafe","21st_amendment_brewery_cafe-563_stout"],"value":null}, |
Puede ver la información clave. Podemos utilizarla para limitar los resultados. He aquí un ejemplo utilizando una sola clave.
|
1 |
$ curl -g https://localhost:8092/beer-sample/_design/beer/_view/brewery_beers?key='["yuksom_breweries"]' |
Y el resultado.
|
1 2 3 4 |
{"total_rows":7303,"rows":[ {"id":"yuksom_breweries","key":["yuksom_breweries"],"value":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 |
$ curl -g -u Administrator:password 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,"rows":[ {"id":"yuksom_breweries","key":["yuksom_breweries"],"value":null}, {"id":"wild_duck_brewing","key":["wild_duck_brewing"],"value":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 |
$ curl 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 % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 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", "signature": { "*": "*" }, "results": [ { "beer-sample": { "address": [ "563 Second Street" ], "city": "San Francisco", "code": "94107", "country": "United States", "description": "The 21st Amendment Brewery offers a variety of award winning house made brews and American grilled cuisine in a comfortable loft like setting. Join us before and after Giants baseball games in our outdoor beer garden. A great location for functions and parties in our semi-private Brewers Loft. See you soon at the 21A!", "geo": { "accuracy": "ROOFTOP", "lat": 37.7825, "lon": -122.393 }, "name": "21st Amendment Brewery Cafe", "phone": "1-415-369-0900", "state": "California", "type": "brewery", "updated": "2010-10-24 13:54:07", "website": "https://www.21st-amendment.com/" } }, { "beer-sample": { ... |
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 [...]