Introducción
Este blog está dirigido a usuarios familiarizados con los conceptos básicos de Couchbase Server y Views. Los usuarios novatos deberían Empieza aquí para obtener una comprensión básica de Couchbase Server y luego continuar aquí para conocer Views.
Las vistas se añadieron en Couchbase Server hace casi nueve años para soportar el acceso a claves secundarias en los datos json almacenados. Nos han servido bien, pero ahora tenemos mejores alternativas, a saber Indexación secundaria global y Consulta N1QL, Búsqueda de texto completo y Analítica. En este blog trataremos de obtener una comprensión básica de Views, los casos de uso comunes que soportan y sus limitaciones. Más adelante, en un segundo blog, echaremos un vistazo a las mejores alternativas antes mencionadas.
¿Qué es una vista Couchbase?
En primer lugar, vamos a aprender qué es una vista Couchbase y cómo funciona. Una vista es básicamente una versión materializada de partes seleccionadas de un conjunto de datos. Su definición se almacena en un documento de diseño que comprende una función "Map" que opera sobre los datos Clave-Valor que luego se alimentan a una fase posterior (opcional) "Reduce" que resume aún más los datos. Ambas salidas se materializan en disco en el directorio "views" de cada nodo de datos del clúster.
¿Cómo funciona una vista?
Las vistas de Couchbase son finalmente consistentes con sus datos de origen. Cada vista se actualiza a intervalos frecuentes, por defecto cada 5 segundos o 5000 mutaciones, lo que ocurra primero. Son similares a las vistas materializadas de Oracle que son locales a las particiones de datos y se actualizan utilizando un conjunto de reglas en algunos intervalos predefinidos.
Las réplicas de vistas y la compactación son muy fáciles de configurar. Las réplicas pueden activarse fácilmente por bucket. La compactación puede configurarse con la misma facilidad junto con la política de compactación de los buckets.
Las vistas utilizan funciones map y reduce para precalcular y almacenar sus resultados, minimizando así la necesidad de realizar cálculos justo a tiempo. Las funciones de las vistas están escritas en JavaScript. Por lo tanto, se puede expresar una lógica bastante compleja en la definición de una vista sin tener que sufrir largas latencias en el momento de la consulta. Una función de mapa es la parte más importante de cualquier vista, ya que crea una correspondencia lógica entre el conjunto de datos de origen y el subconjunto que contiene la vista. Cada función de mapa recibe un argumento "doc" y un argumento "meta" que dan a la función acceso a cada elemento almacenado y a sus metadatos.
La forma básica de una función de mapa es la siguiente:
1 2 3 4 5 6 |
función(doc, meta) { si (doc.atributo){ emite(doc.atributo); } } |
Esta función devuelve filas que contienen claves y valores de doc.attribute.
Couchbase proporciona algunas funciones de reducción integradas, a saber, _count (proporciona un simple recuento de las filas que se obtienen mediante la función map), _sum (proporciona una suma de los valores obtenidos mediante la función map siempre que sean numéricos; admite la suma a nivel de grupo) y _stats (proporciona recuento, mínimo, máximo, suma y cuadrado de la suma de los valores obtenidos mediante la función map siempre que sean numéricos).
Es posible escribir funciones de reducción personalizadas, así como sobrescribir las funciones de reducción incorporadas.
Consulta de una vista
Las consultas de vista pueden basarse en una sola clave, en un conjunto de claves o en rangos de claves con un inicio y un final especificados. Una consulta de vista puede dirigirse a cualquier nodo de Datos, que la difunde al resto de nodos de Datos del clúster y recoge los resultados de los mismos, los coteja y responde a la consulta. Este enfoque se denomina "dispersar y reunir".
Las vistas ofrecen tres niveles de coherencia en el momento de la consulta mediante el uso de un parámetro denominado 'stale'. El valor 'update_after' es el predeterminado. Devuelve los resultados de la consulta de la vista y, a continuación, activa una actualización del índice. Ofrece respuestas rápidas, pero los resultados de la consulta pueden ser obsoletos. El valor 'ok' significa que los resultados de la consulta se devuelven sin activar una actualización del índice. Obviamente, ofrece respuestas rápidas pero tienen el potencial de ser obsoletas. El valor 'false' significa que el índice de la vista se actualiza antes de ejecutar la consulta, por lo que la respuesta puede retrasarse.
Casos de uso habituales de las vistas
Las vistas admiten fácilmente casos de uso comunes como:
- generar listas de datos sobre determinados tipos de objetos
- generar tablas y listas de información a partir de los datos almacenados
- extraer o filtrar información de la base de datos
- devolver agregaciones o reducciones precalculadas sobre colecciones de datos almacenados
- agrupaciones multinivel por agregaciones
- consulta de datos geoespaciales
- paginación
Ahora vamos a crear y consultar una vista para ver cómo un mapa y las funciones de reducción construidas trabajan juntos para darnos agregaciones estadísticas de la altitud geográfica de todos los aeropuertos en el conjunto de datos de la muestra de viajes. Esta captura de pantalla de la Consola del Administrador de Couchbase muestra cómo se puede crear una vista.
¡Impresionante!
Sin duda, las vistas son fáciles de crear y de utilizar. Sin embargo, tienen sus inconvenientes y limitaciones. Echemos un vistazo a cómo el ejemplo anterior se puede servir fácilmente mediante el uso de características modernas y mejores de Couchbase; Global Secondary Indexing y N1QL.
En primer lugar, cargue el bucket travel-sample y cree un índice secundario con la siguiente definición.
1 |
CREAR ÍNDICE geo_altitud_idx EN `viaje-muestra`(geo.alt); |
A continuación, ejecute la siguiente consulta N1QL.
1 |
SELECCIONE SUM(geo.alt) como suma, CONTAR (geo.alt) como cuente, MIN(geo.alt) como min, MAX(geo.alt) como mezcla, SUM(POTENCIA(geo.alt,2)) como sumsqr DESDE `viaje-muestra`; |
Esta consulta devuelve el siguiente conjunto de resultados.
1 2 3 4 5 6 7 |
{ "contar": 1968, "min": -54, "mezcla": 9078, "suma": 1712485, "sumsqr": 5303561573 } |
Así de fácil.
Limitaciones de las vistas
Aunque las vistas ofrecen una gran facilidad y flexibilidad a la hora de expresar la lógica de indexación y consulta, tienen sus puntos débiles y desventajas, como:
- No son fáciles de escalar porque están ligados a particiones de datos. Por lo tanto, no pueden beneficiarse del escalado multidimensional de Couchbase.
- No es posible lograr el aislamiento de la carga de trabajo con Views por la razón antes mencionada.
- No pueden ofrecer un rendimiento superior a unos pocos miles de QPS debido a su dependencia de la persistencia en disco y a la sobrecarga de la recolección dispersa.
- El almacenamiento de índices de vistas en disco junto con las particiones de datos aumenta la cantidad total de datos en el disco de cada nodo de datos. Esto se traduce en tiempos de reequilibrio más largos. Del mismo modo, el almacenamiento, la actualización y la compactación de los índices de vistas aumenta la utilización de IO de disco.
- No se reserva ninguna cuota de memoria para el almacenamiento en caché de los índices de vistas. Por lo tanto, no pueden ofrecer el mejor rendimiento.
- Las vistas no ofrecen una sólida comprobación de errores, por lo que es fácil cometer errores en sus definiciones. Por ejemplo, es fácil intentar analizar un atributo json que sólo existe en un subconjunto de documentos. La función map de una vista de este tipo registra los errores de análisis de los documentos en los que no existe ese atributo.
- Las actualizaciones de las vistas suelen tardar mucho tiempo porque están vinculadas al disco. La modificación de una definición de vista existente o la ejecución de una compilación completa en una vista de desarrollo hace que se vuelva a crear toda la vista. El problema se agrava cuando un único documento de diseño tiene varias vistas.
- Los buckets efímeros ofrecen baja latencia y lecturas y escrituras consistentes de alto rendimiento, pero no se pueden crear vistas en ellos porque estos buckets no tienen persistencia en disco.
- Las vistas son finalmente coherentes con respecto a los documentos almacenados subyacentes.
Conclusión
Las Vistas de Couchbase han tenido un buen recorrido, pero ahora tenemos mejores alternativas que ofrecen mucha mejor manejabilidad, escalabilidad, rendimiento y rendimiento. Dado el poder expresivo de las consultas N1QL, la facilidad de escalado ofrecida por el escalado multidimensional, un rendimiento mucho mayor y a lo largo entregado por la Indexación Secundaria Global y la Búsqueda de Texto Completo, es muy probable que las Vistas queden obsoletas pronto. Se recomienda a los usuarios que conozcan las nuevas alternativas y empiecen a planificar la migración. Se hablará más de estas alternativas en el próximo blog.