Eventos

Migración de Cubos a Colecciones y Ámbitos mediante Eventos: Parte 1

Migración de Cubos a Colecciones y Ámbitos mediante Eventos: Parte 1

En primer lugar quiero destacar un excelente blog escrito por Shivani Gupta, Cómo migrar a ámbitos y colecciones en Couchbase 7.0que cubre en gran detalle otros métodos para migrar documentos basados en buckets a Scopes y Collections en Couchbase. Te animo a leer también sobre los múltiples métodos no-Eventing que Shivani toca.

Tanto si eres nuevo en Couchbase o veterinario experimentado, es probable que haya oído hablar de los Scopes y Collections. Si estás listo para probarlos, este artículo te ayuda a hacerlo realidad.

Los ámbitos y las colecciones son una nueva función introducida en Servidor Couchbase 7.0 que te permite organizar lógicamente los datos dentro de Couchbase. Para saber más, lea esta introducción a Ámbitos y colecciones.

Deberías aprovechar Scopes y Collections si quieres mapear tu RDBMS heredado a una base de datos de documentos o si estás intentando consolidar cientos de microservicios y/o tenants en un único Couchbase (lo que se traduce en un coste total de propiedad mucho menor).


Uso de eventos para la migración de ámbitos y colecciones

En este artículo, voy a discutir la mecánica de otro método de alto rendimiento para migrar de una versión anterior de Couchbase a Scopes y Collections en Couchbase 7.0.

Sólo necesitas el Servicio de Datos (o KV) y Eventing para migrar de buckets a colecciones. En un gran cluster de Couchbase bien afinado, puedes migrar más de 1 millón de documentos por segundo. Sí, sin N1QL, y sin necesidad de índices.

En el siguiente post (Parte 2), proporcionaré una metodología sencilla totalmente automatizada para realizar grandes migraciones con docenas de  (o incluso cientos) de tipos de datos mediante un simple Perl guión.

Requisitos previos: Aprendizaje del concurso completo

En este artículo, vamos a utilizar la última versión de Couchbase (7.0.2), pero las versiones anteriores 7.0 funcionan bien también.

Si no estás familiarizado con Couchbase o el servicio de Eventing, por favor revisa los siguientes recursos, incluyendo al menos un ejemplo de Eventing:

Función Eventing: ConvertBucketToCollections

Eventing le permite escribir lógica de negocio pura. El servicio Eventing se encarga de toda la infraestructura necesaria para gestionar y escalar su función (horizontal y verticalmente) a través de múltiples nodos de una manera performante y fiable.

Todas las funciones de Eventing tienen dos puntos de entrada - OnUpdate(doc, meta) y OnDelete(meta, opciones). Tenga en cuenta que en este ejemplo no nos preocupa este último punto de entrada.

Cuando un documento cambia o muta (inserción, inserción ascendente, sustitución, etc.), se pasa una copia del documento y algunos metadatos sobre el documento a un pequeño punto de entrada de JavaScript OnUpdate(doc, meta).

Las Funciones de Eventos pueden desplegarse con dos Límites de Despliegue diferentes, "A partir de ahora" o "Todo". Este último permite acceder a cada documento actual en un Bucket en Couchbase 6.6 o un Keyspace (Bucket/Scope/Collection) en Couchbase 7.0.

El scriptlet ConvertBucketToCollections de la documentación principal de Eventing muestra cómo utilizar Eventing para llevar datos de un bucket de origen a un bucket de destino y dividir los datos en colecciones.

Paso 1: Cargar datos de muestra

En la interfaz de usuario de Couchbase, seleccione "Ajustes/Cubos de muestra". Consulte muestra de cerveza y haga clic en el botón "Cargar datos de muestra“.

Paso 2: Crear los espacios de claves necesarios

Este ejemplo requiere tres cubos: "muestra de cerveza" (es decir, su almacén de documentos a migrar), "rr100″ (es decir, un bloc de notas para Eventing que puede compartirse con otras funciones de Eventing) y a granel (el bucket en el que se crearán las colecciones migradas). La función "rr100″ y "a granel" debe tener un tamaño mínimo de 100 MB.

En la interfaz de usuario de Couchbase, seleccione "Cubos" y pulsa el botón "AÑADIR CUBO" en la parte superior derecha.

Cree dos cubos con un tamaño de 100 MB, "rr100" (para el almacenamiento de Eventing o el bloc de notas) y "a granel"(para el objetivo de migración).

En Cubo "rr100″ crear ámbito "concurso“.

En el ámbito "rr100.concurso" crear la colección "metadatos“.

En Cubo "a granel" crear ámbito "datos“.

En el ámbito "datos.masivos" crear las colecciones "cerveza" y "cervecería“.

En este punto debe tener tres (3) cubos de la siguiente manera:

con las siguientes colecciones en el "a granel" cubo:

y las siguientes colecciones en la sección "rr100″ cubo:

Paso 3: Crear la función Eventing

En la interfaz de usuario de Couchbase, seleccione "Eventos" y pulsa el botón "AÑADIR FUNCIÓN" en la parte superior derecha.

Los ajustes para la Función de Eventos son los siguientes:

Pulsa el botón "Guardar"a continuación, pegue esta secuencia de comandos en el panel Editor de funciones:

Tu editor de código debería tener este aspecto:

Pulsa el botón "Guardar y devolver

Qué hace ConvertBucketToCollections

En OnUpdate(doc, meta) procesará todos los datos del muestra de cerveza.por defecto y realizará lo siguiente en cualquier mutación pasada (histórica) y nueva (futura).

    • En primer lugar, la propiedad del doc.tipo se comprueba en dos bloques de código casi idénticos para ver si coincide con alguno de los dos cervezao cervecería. Si hay coincidencia, continúa.
    • Una constante global DO_COPY (proporcionado a través de la configuración de funciones mediante un alias de enlace constante) para ver si el elemento debe copiarse.
    • Si DO_COPY es verdadero, el documento se escribirá en la colección de destino o en el espacio de claves cerveza_col o cerveceria_col (definido mediante la configuración de Funciones a través de un alias de Bucket Binding) en función del bloque de código que coincida.
    • Una constante global DO_DELETE (proporcionado a través de la configuración de funciones mediante un alias de enlace constante) para comprobar si el elemento debe eliminarse del espacio de claves de origen o de la colección (definida a través de la configuración de funciones mediante un alias de enlace de cubo).
    • Si DO_DELETE es verdadero, el documento se eliminará de la colección o del espacio de claves src_col (definida a través de la configuración de Funciones mediante un alias de Bucket Binding).

Podríamos aumentar los trabajadores de 1 al número de vCPUs para un mejor rendimiento, pero nuestro conjunto de datos es trivial por lo que simplemente dejamos el recuento de trabajadores en uno (1). Nota: La configuración de los trabajadores se encuentra en la sección desplegable Configuración, en el centro del cuadro de diálogo Configuración de funciones..

Despliegue de la función de eventos

Ahora es el momento de desplegar la función Eventing. Hemos revisado un poco el código y el diseño del script de migración ConvertBucketToCollections, y ahora es el momento de ver cómo funciona todo junto.

En este punto, tenemos una función en JavaScript por lo que necesitamos añadirlo a nuestro Couchbase y desplegarlo en un estado activo.

Pulsa el botón "Despliegue“.

El servicio de eventos tarda unos 18 segundos en desplegar su función de eventos, momento en el que debería ver inmediatamente 7303 elementos procesados. Dado que el conjunto de datos es estático, habrá terminado cuando se hayan procesado todos los elementos. Dado que el conjunto de datos es estático, habrá terminado cuando se hayan procesado todos los elementos.

 

Pulsa el botón "Despliegue“.

Ver los datos migrados

Ahora que hemos terminado de utilizar la función de eventos, podemos inspeccionar los cubos y las colecciones para ver qué ha pasado.

En la interfaz de usuario de Couchbase, seleccione "Cubos

Ahora seleccione "Ámbitos y colecciones" para el cubo "a granel"y, a continuación, amplíe el ámbito "datos".

En la interfaz de usuario de Couchbase, seleccione "Documentos"y, a continuación, seleccione el espacio clave "datos.masivos.cerveza" y verá los documentos migrados en esa colección.

En la interfaz de usuario de Couchbase, seleccione "Documentos"y, a continuación, seleccione el espacio clave "datos.masivos.cervecería" y verá los documentos migrados en esa colección.

 

Mejoremos la función Eventing

Recuerde, Eventing puede enriquecer los datos sobre la marcha, y si realmente estamos dividiendo un bucket (circa Couchbase 6.x) en colecciones separadas (circa Couchbase 7.0), ya no necesitamos la función tipo propiedad. Así que vamos a modificar nuestra Función para transformar nuestros datos, también.

Por ejemplo, dado el documento con clave "abhi_brewery"en nuestros datos de origen en muestra de cerveza.por defecto:

Aquí está la modificación de nuestra Función de Eventos:

Y como añadimos una nueva constante global DROP_TYPEtambién modificamos la configuración de la siguiente manera:

Reflexiones finales

Si este artículo le ha resultado útil y está interesado en seguir aprendiendo sobre el concurso completo, haga clic aquí. el servicio de eventos Couchbase.

Ahora que entiendes la mecánica de usar Eventing para migrar tus buckets a scopes y collections, por favor explora el post de seguimiento (Parte 2), donde proporciono una metodología simple totalmente automatizada para hacer grandes migraciones con docenas de tipos de datos a través de un simple Perl guión.

Recursos

Referencias

Me encantaría que me contaras qué te han parecido las capacidades de Couchbase y el servicio Eventing, y cómo benefician a tu negocio de cara al futuro. Por favor, comparte tu opinión a través de los comentarios de abajo o en los foros de Couchbase.

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Autor

Publicado por Jon Strabala, Director Principal de Producto, Couchbase

Jon Strabala es Gerente Principal de Producto, responsable del Servicio de Eventos de Couchbase. Antes de unirse a Couchbase, pasó más de 20 años construyendo productos de software a través de diversos dominios, comenzando con EDA en el sector aeroespacial y luego la transición a la construcción de software empresarial centrado en lo que hoy se conoce como "IoT" y "datos a escala". Jon trabajó para varias pequeñas consultoras de software hasta que finalmente fundó y dirigió su propia empresa. Tiene una amplia experiencia en NoSQL/NewSQL, tanto en la contribución como en la comercialización de nuevas tecnologías como los mapas de bits comprimidos y los almacenes de columnas. Jon es licenciado en ingeniería eléctrica y tiene un máster en ingeniería informática, ambos por la Universidad del Sur de California, y un MBA por la Universidad de California en Irvine.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.