Nota: Este artículo utiliza el Lenguaje de Definición de Datos de Couchbase Analytics a partir de la versión 5.5. Para actualizaciones e información sobre cambios de última hora en versiones más recientes, consulta Cambios en el servicio Couchbase Analytics.
La aplicación creada para la conferencia Couchbase Connect Silicon Valley el pasado otoño incorpora consultas dinámicas N1QL, móviles sin conexión, sensores IoT, consultas ad hoc con análisis, replicación entre centros de datos, conmutación por error, coincidencia de texto difuso y un montón de funciones más.
Puede ver la demostración de la keynote aquíConozca la arquitectura de alto nivel aquíy vea un tutorial completo sobre cómo configurar la demostración aquí.
En este post, voy a ir a través de todos los pasos para configurar y ejecutar la demo. Lo haremos a través de la línea de comandos. (Algunos pasos requieren el cURL herramienta).
Incluyo enlaces directos a vídeos que repasan material similar.
Clonar repositorio y establecer directorio de trabajo
Encontrará el código de la demostración en GitHub. Clone el repositorio y cambie los directorios al nivel superior.
1 2 |
git clonar https://github.com/couchbaselabs/connect-fall-2017-demo.git cd conecte-otoño-2017-demo |
Configuración de Couchbase Server
El proyecto de demostración depende de las nuevas capacidades previstas para Couchbase 5.5. En el momento de escribir este artículo, la versión 5.5 está en fase beta. Descarga e instala Couchbase 5.5 para tu plataforma aquí. Poner en marcha un nodo.
Preparación
Lo siguiente supone que está ejecutando en localhost
. Puede ajustarse a un host remoto según sea necesario. Los ejecutables del comando están incluidos en tu instalación de Couchbase. Puede que quieras añadir el directorio tools a tu ruta de comandos. Por ejemplo, en un Mac, puedes hacer algo como esto.
1 |
exportar SENDERO="$PATH:/ruta/para/instalar/Couchbase Server.app/Contents/Resources/couchbase-core/bin" |
Inicializar el nodo
Para inicializar el primer nodo, necesitamos tres pasos.
- Configuración básica del usuario administrativo, servicios a ejecutar y asignaciones de memoria.
- Creación del cubo principal de la aplicación
- Añadir un usuario independiente para el control de acceso basado en roles.
Ejecute los siguientes comandos para realizar estos pasos.
1 2 3 4 5 6 7 8 9 10 11 12 |
# Memoria básica y configuración de servicio couchbase-cli grupo-init --grupo couchbase://127.0.0.1 --cluster-name cluster \ --grupo-nombre de usuario Administrador --grupo-contraseña contraseña \ --servicios datos,índice,consulta,fts,análisis,concurso --grupo-ramsize 256 --grupo-análisis-ramsize 1024 \ --grupo-índice-ramsize 256 --grupo-fts-ramsize 256 --índice-almacenamiento-ajuste por defecto # Creación del cubo principal couchbase-cli cubo-crear --grupo couchbase://127.0.0.1 -u Administrador -p contraseña \ --cubo salud --cubo-tipo couchbase --cubo-ramsize 100 # Control de acceso basado en funciones couchbase-cli usuario-gestionar --grupo couchbase://127.0.0.1 -u Administrador -p contraseña \ --configure --rbac-nombre de usuario admin --rbac-contraseña contraseña \ --rbac-nombre "J. R. Admin" --papeles "Admin" --auth-dominio local |
La mayoría de los parámetros de estos comandos deberían ser fáciles de entender.
Los nodos de Couchbase Server pueden dedicarse a ejecutar un subconjunto de todos los servicios disponibles, parte de lo que se conoce como Escala multidimensional. Aquí, estamos configurando el nodo con todos los servicios que necesita la aplicación.
Las asignaciones de RAM están configuradas en sus valores mínimos. Estos valores no son los que se suelen utilizar en producción, pero son suficientes para los datos que se incluyen aquí.
Tenga en cuenta que la especificación del clúster utiliza una URL personalizada, couchbase://127.0.0.1
. Hay otras formas de especificarlo, pero esta es la más fácil. Esto le dice a los comandos que se conecten a Couchbase Server en la máquina local.
Tras ejecutar estos comandos, el nodo tardará unos instantes en calentarse. Dale una breve pausa antes de proceder con los siguientes pasos.
Vídeo relacionado:
Datos
Generamos datos sintéticos realistas de pacientes utilizando el Synthea (Copyright © 2018 The MITRE Corporation). Synthea es de código abierto y de uso gratuito. La demo completa en Connect 2017 utilizó cientos de millones de registros. En el repositorio de fuentes de la demo se ha incluido un conjunto de datos más adecuado para ejecutarlo en una sola máquina. Para cargarlo, ejecute lo siguiente.
1 2 3 4 5 |
# Cargar datos de muestra para archivo en datos/*.json do cbimport json -c couchbase://127.0.0.1:8091 -d file://${file} -g '%id%' -f lines -b health -u admin -p password hecho |
Las opciones indican cbimport
para esperar un registro por línea y autogenerar la clave del documento a partir del campo id de cada registro.
Vídeo relacionado:
Servicio de concursos
En Servicio de eventos Couchbase es una de las nuevas funciones que se añaden en la versión 5.5. Permite supervisar los cambios en la base de datos y ejecutar funciones JavaScript en respuesta.
En esta aplicación lo utilizamos para monitorizar los datos entrantes de los pacientes. Esto nos permite enviar los datos a la aplicación web, en lugar de depender del sondeo. Para ello se utiliza la función Capacidades de cURL integrado en N1QL.
Para ello, necesitamos configurar una función JavaScript que vigile los cambios en la base de datos. Actualmente el Servicio de Eventos necesita también su propio cubo de metadatos. Configure esta parte con los siguientes comandos.
1 2 3 4 5 |
Creación de cubos de metadatos del servicio de eventos # couchbase-cli cubo-crear --grupo couchbase://127.0.0.1 -u Administrador -p contraseña \ --cubo concurso --cubo-tipo couchbase --cubo-ramsize 100 # Función del Servicio de Eventos rizo -X POST -u admin:contraseña -d "@scripts/config/eventing" http://127.0.0.1:8096/api/v1/functions/monitor |
Aquí está el JavaScript real.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
función OnUpdate(doc, meta) { si (doc.resourceType != Observación) devolver; deje referencia = doc.tema.referencia; deje url = "http://localhost:8080/events/" + referencia.substr(9); deje datos = JSON.stringify({ "referencia": doc.tema.referencia, "código": doc.código.codificación[0].código, "recordedAt": doc.publicado, "valor": doc.valorCantidad.valor }); deje rizo = SELECCIONE CURL($url, { "solicitud": "POST", "cabecera": [ "Content-Type: application/json", "accept: application/json" ], "datos": $datos }); rizo.execQuery(); } función OnDelete(meta) {} |
Esta función sólo procesa documentos de "Observación". Extrae algunos elementos que queremos mostrar en la consola web. A continuación, utiliza un cURL
para enviar esos datos a un punto final REST en el servidor web.
Vídeo relacionado:
Índices de consulta
La aplicación se basa en una serie de N1QL consultas. Éstas se ejecutarían si se define un índice primario, pero serían lentas. En su lugar, añada tres Índices secundarios globales.
Los datos utilizados en la aplicación siguen el FHIR especificación. Los registros incluyen un resourceType
campo. Por ejemplo, "Observación", "Condición" y "Profesional" son todos tipos de recursos. El primer índice optimiza las consultas de este campo.
En el cuadro de mandos se muestran gráficos de temperaturas. Se registran como documentos de "Observación". El segundo índice extrae la información principal que nos interesa mostrar. (De este modo, las búsquedas y la recuperación de los datos pertinentes son rápidas, ya que todo lo que necesitamos está almacenado en el índice.
El último índice se construye a partir de los registros de "Localización". Esto nos permite conectar a los pacientes con su hospital más cercano.
1 2 3 4 |
# Índices para optimizar las consultas cbq -u admin -p contraseña -q --script="CREATE INDEX \`resource-idx\` ON health(resourceType, id);" cbq -u admin -p contraseña -q --script="CREATE INDEX \`observation-idx\` ON health(subject.reference, issued DESC, valueQuantity.\`value\`)" cbq -u admin -p contraseña -q --script="CREATE INDEX \`location-idx\` ON health(type.coding[0].code) WHERE resourceType = 'Location';" |
Vídeo relacionado:
Analítica
La aplicación puede examinar algunos datos del historial del caso. Este tipo de análisis libre se adapta mejor al nuevo Servicio de análisis Couchbase (actualmente en preestreno).
El servicio de análisis importa automáticamente los datos de los buckets de las bases de datos operativas a sus propios buckets especiales. A continuación, usted define lo que se conoce como conjuntos de datos sombra. Por último, debe emitir una instrucción para conectar la analítica a sus datos operativos. Después, las consultas se realizan mediante SQL++, un superconjunto de SQL similar a N1QL. Puede obtener más información en este tutorial.
Toda la configuración se realiza mediante la emisión de comandos a través del motor de consulta de análisis. Configura las piezas necesarias para la demo con el siguiente comando.
1 2 3 4 5 |
Configuración del servicio de análisis # cat guiones/config/análisis | mientras que leer consulta do rizo -u admin:contraseña --datos-urlencode "statement=${query}" http://127.0.0.1:8095/analytics/service hecho |
Aquí están los comandos reales que se ejecutan.
1 2 3 4 5 |
CREAR CUBO ha CON {"nombre":"salud"} CREAR SOMBRA DATASET paciente EN ha DONDE resourceType = "Paciente" CREAR SOMBRA DATASET condición EN ha DONDE resourceType = "Condición" CREAR SOMBRA DATASET encuentro EN ha DONDE resourceType = "Encuentro" CONECTAR CUBO ha |
Podrías hacer esto igual de bien desde la interfaz de consulta en la consola web de Couchbase Server, usando las líneas exactamente como se muestra arriba.
Vídeo relacionado:
Búsqueda de texto completo
Couchbase Server Full-Text Search permite la búsqueda de texto completo basada tanto en los campos indexados como en los términos de búsqueda introducidos. Proporciona una gran capacidad de búsqueda en texto libre. En esta aplicación, lo utilizamos para extraer registros basados precisamente en eso: entradas en documentos FHIR reservados para notas no estructuradas.
Configure los índices necesarios del siguiente modo.
1 2 |
# Índice de búsqueda de texto completo rizo -u admin:contraseña -T "scripts/config/fts-index.json" http://127.0.0.1:8094/api/index/diagnosis |
El índice es demasiado complicado para analizarlo aquí en su totalidad. Me limitaré a mencionar algunos puntos principales.
Y lo que es más importante, estamos haciendo un análisis lingüístico del nota
de un documento "Observación", y el campo motivo
de un documento "Encuentro". Se trata de los campos en los que un profesional sanitario puede introducir texto de forma libre.
Otras entradas están ahí para extraer datos simplemente para mostrarlos o para utilizarlos en faceting. Las facetas permiten al usuario restringir y refinar las búsquedas. Es una forma muy eficaz de profundizar en los datos de forma estructurada.
Para más detalles, en un próximo artículo analizaremos el índice y el código FTS.
Vídeo relacionado:
Restricciones de acceso a cURL
N1QL las consultas pueden incluir cURL
-. Las utilizamos para enviar actualizaciones a la aplicación web y para obtener datos de geomapping a través de Google.
Dado que estas llamadas se originan en un nodo de servicio de consulta, tienen importantes implicaciones de seguridad. Por lo tanto, por defecto, está desactivada.
Necesitamos autorizar llamadas al endpoint de Google y a una api en el servidor web. Hazlo con el siguiente comando.
1 2 |
Lista blanca de sitios # cURL rizo -X POST -u admin:contraseña -d "@scripts/config/curl" http://127.0.0.1:8091/settings/querySettings/curlWhitelist |
Vídeo relacionado:
Pasarela de sincronización
Pasarela de sincronización proporciona el pegamento entre Couchbase Server y la aplicación móvil. También proporciona parte de la lógica de negocio. En este caso, simplemente necesitamos conectarnos a Coucbase Server, configurar la autenticación básica y crear un canal para nuestro usuario principal.
Ejecute Sync Gateway directamente como se indica a continuación.
1 |
/ruta/a/couchbase-sincronizar-pasarela/papelera/sync_gateway sincronizar-pasarela/cc-2017-sg-config.json |
No estamos utilizando una importación de documentos filtrados aquí, por lo que esto puede tomar un poco de tiempo la primera vez para crear todos los metadatos necesarios.
Vídeo relacionado:
Cliente y servidor web
Instale Node.js. El servidor requiere la versión 7 o superior. Se recomienda utilizar nvm para gestionar las versiones de Node si tiene una instalación existente. (La guía de instalación de nvm se encuentra en aquí.)
Configurar el Cliente Web
El código del cliente web está en web/cliente
. En src/config
en el código del cliente, actualice serverURI
en el index.js
para que apunte a su servidor web. Este es el host del servidor web se está ejecutando. Esto puede ser diferente de donde se ejecuta Couchbase. Por defecto utiliza localhost
Así que si planeas ejecutar todo en una sola máquina, puedes dejarlo como está.
Construir el cliente
Cambie los directorios a web/cliente
. Instale los paquetes Node.
1 |
npm instale |
Se puede ejecutar en uno de los dos modos, desarrollo o producción. Desarrollo permite una depuración más fácil, y soporta la recarga en caliente, pero es más complicado de configurar. Este modo requiere la ejecución de servidores separados, uno que sirve las páginas de cliente y el otro para exponer la API que necesitamos.
Aquí sólo voy a describir la ejecución en modo de producción. Para el cliente, esto sólo significa ejecutar una compilación.
1 |
npm ejecute construya |
Cuando termine, esto copiará los archivos finales del cliente a un subdirectorio del directorio del servidor. El servidor Node extraerá el contenido de la aplicación desde allí.
Configuración y ejecución del servidor web
Cambie los directorios a web/servidor
. Instale los paquetes Node.
1 |
npm instale |
El servidor tiene algunos parámetros que necesitan ser configurados. He incluido un paquete que los extraerá de las variables de entorno o de un archivo llamado .env en el directorio del servidor. Los parámetros se dividen en dos grupos, los necesarios para Notificaciones push de Urban Airshipy los necesarios para conectarse a Couchbase.
Los parámetros son
- Clave de la aplicación Urban Airship
- Un secreto maestro de Urban Airship
- La URL del cluster de Couchbase Server
- El nombre de usuario y la contraseña de un usuario del clúster CB Server con los privilegios adecuados.
- Una URL para conectarse a un nodo de Couchbase Server Analytics Service.
Este conjunto de comandos del shell Bash creará una plantilla para usted.
1 2 3 4 5 6 7 8 9 |
cat > .env <<EOF UA_CLAVE_APLICACIÓN='<your app key>' UA_APPLICATION_MASTER_SECRET='' CLÚSTER=couchbase://localhost CLUSTER_USER='admin' CONTRASEÑA_CLÚSTER=contraseña CLUSTER_CBAS=localhost:8095 PUERTO=8080 EOF |
Alternativamente, puedes establecer variables de entorno. Por ejemplo, puede omitir los parámetros del dirigible urbano y configurarlos así.
1 2 |
exportar UA_CLAVE_APLICACIÓN=<su aplicación clave> exportar UA_APPLICATION_MASTER_SECRET=<su aplicación maestro secreto> |
Si no quieres utilizar la función de notificaciones push de Urban Airship, configura las teclas UA a algo arbitrario.
Ya puedes ejecutar el servidor.
1 |
npm iniciar |
Abra un navegador y vaya a localhost:8080
. Debería ver la consola web.
Vídeo relacionado:
Aplicación móvil Android
Abrir móvil/android/CBCHealth
en Android Studio para crear la aplicación.
La aplicación móvil para Android utiliza Urban Airship para las notificaciones push. Si quieres incluir esta función, debes rellenar la configuración de Urban Airship con tus propias claves. Consulte mobile/android/CBCHealth/app/src/main/assets/airshipconfig.properties.sample
.
Si no desea incluir notificaciones push, elimine la siguiente línea de la aplicación AndroidManifest.xml
archivo.
1 2 3 |
<meta-datos android:nombre="com.urbanairship.autopilot" android:valor="com.couchbase.mobile.notifications.Autopilot" /> |
Por defecto, esto construye una versión de la aplicación para su uso con el emulador de Android. Hay un diálogo de entrada suave para introducir lecturas de temperatura.
Si quieres utilizar el parche real con un dispositivo real, tienes que hacer dos cambios.
- En
mobile/android/CBCHealth/app/build.gradle
cambiardef parámetros = ".EMULADOR"
adef parámetros = ".DEFAULT"
(Véasemobile/android/CBCHealth/app/src/main/java/com/couchbase/mobile/app/launch/Parameters.java
para las definiciones de estas entradas) - En
mobile/android/CBCHealth/app/src/main/resources/META-INF/services/com.couchbase.mobile.collectors.Collector
cambiarcom.couchbase.mobile.collectors.temperature.ManualEntry
acom.couchbase.mobile.colectores.temperatura.RF430_TMPSNS_EVM
Vídeo relacionado:
Conclusión
Hay mucho que hacer aquí. El propósito de este post es principalmente ponerte en marcha con una aplicación completa que puedes usar para probar varios aspectos de Couchbase.
Próximamente profundizaremos en el código y la configuración.
Posdata
Couchbase es de código abierto y probar gratis.
Empezar con código de ejemplo, consultas de ejemplo, tutoriales y mucho más.
Encuentre otros recursos en nuestra portal para desarrolladores.
Síguenos en Twitter @CouchbaseDev.
Puede enviar preguntas a nuestro foros.
Participamos activamente en Stack Overflow.
Envíame tus preguntas, comentarios, temas que te gustaría ver, etc. a Twitter. @HodGreeley
.