Prólogo

Este artículo te guiará a través de una migración única de MongoDB a Couchbase. Aprenderás cómo exportar desde la estructura de datos de MongoDB, importar a Couchbase y hacer algunas transformaciones básicas en esos documentos.

Todo el código de este blog está disponible en el siguiente repositorio Git: mongodb-to-couchbase

Requisitos previos

Este artículo utiliza el conjunto de datos de ejemplo mflix que se ha cargado en un clúster MongoDB. Estoy usando MongoDB Atlas pero la información de este artículo se aplica también a instalaciones de MongoDB que no sean Atlas. Si necesita cargar el conjunto de datos de ejemplo en MongoDB, consulte el artículo instrucciones aquí.

Brújula MongoDB se utiliza para exportar el conjunto de datos y este artículo asume que ya está configurado para conectarse al clúster MongoDB donde reside el conjunto de datos mflix de ejemplo.

También necesitarás un cluster Couchbase Server Enterprise Edition (EE) 6.5 con los servicios Data, Index, Query y Eventing habilitados (NOTA: Index y Query se usarán en un artículo futuro). Estoy usando una instalación local de un solo nodo de Couchbase Sever EE pero la información de este artículo se aplica a cualquier cluster de Couchbase Server EE.

Si no dispone de un clúster de Couchbase Server EE, los siguientes enlaces le ayudarán a ponerlo en marcha rápidamente:

  1. Descargar Couchbase Sever EE 6.5
  2. Instalar Couchbase Server EE
  3. Aprovisionar un clúster de un solo nodo (NOTA: utilice los valores predeterminados para la configuración del clúster).

JSON, BSON y JSON extendido

MongoDB y Couchbase son bases de datos documentales y ambas almacenan documentos JSON. Sin embargo, MongoDB representa documentos JSON en un formato de codificación binaria llamado BSON. JSON sólo puede representar un subconjunto de los tipos soportados por BSON. Para preservar la información de tipos, MongoDB utiliza Extended JSON que incluye extensiones al formato JSON. Consulte la Especificación JSON ampliada de MongoDB para más detalles sobre los diferentes tipos y convenciones de Extended JSON.

Estos son algunos ejemplos de cómo MongoDB representa diferentes tipos de información:

  • ObjectId: “_id”:{“$oid”:”573a1390f29313caabcd4135″}
  • Entero: "tiempo de ejecución":{"$numberInt": "1″}
  • Fecha: “released”:{“$date”:{“$numberLong”:”-2418768000000″}}
  • Doble: "rating":{"$numberDouble": "6.2″}

Aunque Couchbase puede almacenar esta información, es más fácil trabajar con documentos que no utilizan el formato JSON extendido. Usando los ejemplos anteriores, los valores tendrían este aspecto:

  • ObjectId: “_id”:”573a1390f29313caabcd4135″
  • Entero: "tiempo de ejecución":1
  • Fecha: “released”:-2418768000000
  • Doble: "valoración":6.2

Exportar datos desde MongoDB

Utiliza MongoDB Compass para exportar los archivos películas y comentarios colecciones de la sample_mflix base de datos. En Compass, amplíe el archivo sample_mflix y, a continuación, seleccione comentarios.

Elija el Colección -> Exportación del menú. Seleccione Exportar la colección completa y haga clic en SELECCIONAR CAMPOS.

Seleccione todos los campos y haga clic en SELECCIONAR SALIDA.

Seleccione JSON Tipo de archivo de exportación, especifique el Archivo de salida y haga clic en EXPORTACIÓN.

Haga lo mismo con el películas colección.

Importar datos a Couchbase

A continuación, importa los datos de la colección MongoDB a Couchbase. Como se mencionó anteriormente, los datos exportados están en formato JSON extendido por lo que el Couchbase Servicio de eventos se utiliza para realizar algunas transformaciones menores en los datos en tiempo real a medida que los documentos se importan en Couchbase.

A alto nivel, el flujo es el siguiente:

  1. Utiliza el Utilidad cbimport para importar los documentos JSON al entrante cubo.
  2. A medida que los documentos se escriben en el entrante cubo, una función Eventing transformará los documentos.
  3. Si la transformación se realiza correctamente, el documento transformado se escribirá en el archivo sample_mflix cubo.
  4. Si hay algún error, el documento original se escribe en el error cubo. Un atributo de error en el documento contendrá el mensaje de error.

Crear cubos

Cree los tres cubos mencionados anteriormente. Consulte la documentación sobre la creación de un cubo para más detalles sobre los diferentes ajustes y consideraciones para establecer los valores.

En entrante bucket almacenará temporalmente los documentos mientras se importan a Couchbase. Se trata de un cubo efímero ya que no necesitamos ningún almacenamiento persistente para estos documentos. Una función Eventing los transformará y los escribirá en el cubo sample_mflix o en el cubo de errores.

Dado que no es necesario que los documentos permanezcan en el bucket una vez transformados, el bucket se configura con un botón Tiempo de vida (TTL) de 900 segundos (15 minutos). Los documentos son eliminados automáticamente por Couchbase cuando el TTL caduca.

Para crear el entrante cubo, haga clic en Cubos y luego AÑADIR CUBO.

Configure el entrante como se indica a continuación y haga clic en Añadir cubo.

  1. Nombre: entrante
  2. Cuota de memoria256 MB (NOTA: Los buckets efímeros no persisten en disco, por lo que debe asegurarse de que hay suficiente memoria asignada al bucket para alojar todo el conjunto de datos que se está importando. El tamaño total de las colecciones de comentarios y películas utilizadas en este ejemplo es de unos 50 MB, por lo que 256 MB son más que suficientes para alojar este conjunto de datos).
  3. Tipo cubo: Efímero
  4. Configuración avanzada de cubos -> Tiempo máximo de vida del cubo900 segundos (NOTA: Los documentos se transforman en tiempo real a medida que se escriben en Couchbase, por lo que este valor puede establecerse relativamente bajo. En este caso se utilizan 15 minutos (900 segundos). Si el valor se establece demasiado bajo, el documento podría caducar antes de ser procesado).

En sample_mflix se utiliza para almacenar el documento transformado. Se trata de un Cubo Couchbase ya que necesitamos un almacenamiento persistente para estos documentos. Configúrelo como sigue:

  1. Nombre: sample_mflix
  2. Cuota de memoria256 MB (NOTA: los buckets de Couchbase guardan todos los documentos en el disco, por lo que la cuota de memoria determinará cuántos documentos pueden almacenarse en el bucket). capa de caché integrada en cualquier momento. El tamaño total de las colecciones de comentarios y películas utilizadas en este ejemplo es de unos 50 MB, por lo que 256 MB son más que suficientes para albergar este conjunto de datos).
  3. Tipo cubo: Couchbase

En error se utiliza para almacenar los documentos que no se han podido transformar. Configúrelo como sigue:

  1. Nombre: error
  2. Cuota de memoria: 256 MB
  3. Tipo cubo: Couchbase

Transformación de datos con Eventing

Eventos se utiliza para transformar los datos en tiempo real a medida que se importan a Couchbase. Hay algunas cosas que configurar para utilizar esta función.

En primer lugar, cree un metadatos cubo que utiliza Eventing para almacenar los datos del sistema. Configúrelo como sigue:

  1. Nombre: metadatos
  2. Cuota de memoria: 256 MB
  3. Tipo cubo: Couchbase

En Cubos muestra los 4 buckets creados: error, incoming, metadata y sample_mflix:

Haga clic en Eventos y haga clic en AÑADIR FUNCIÓN para configurar la función que se utiliza para transformar los datos en tiempo real a medida que se importan a Couchbase.

Configure la función del siguiente modo:

  1. Cubo de origen: incoming (Este bucket almacena temporalmente los documentos a medida que se importan a Couchbase)
  2. Cubo de metadatos: metadatos (Este bucket se utiliza para almacenar datos del sistema)
  3. Nombre de la función: transformar
  4. Descripción: Transformar la exportación a MongoDB
  5. Fijaciones (Haga clic en el botón + para añadir un segundo enlace)
    • tipo de encuadernación: alias de cubo
    • nombre de alias: target (alias utilizado en la función para referirse al cubo)
    • cubo: sample_mflix (nombre del cubo en el clúster)
    • acceso: leer y escribir
    • tipo de encuadernación: alias de cubo
    • nombre de alias: error (alias utilizado en la función para referirse al cubo)
    • cubo: error (nombre del cubo en el clúster)
    • acceso: leer y escribir

Haga clic en Siguiente Añadir código para añadir el código JavaScript del transformar función.

En la pantalla de la función de transformación, sustituya el código de la plantilla por el código siguiente.

La función incluye sentencias log() para registrar el documento original, el documento transformado y cualquier error. Siéntase libre de cambiar estos según sea necesario. Las entradas Eventing archivo de registro es eventing.log se puede encontrar en el @eventing registro de la aplicación. Véase este enlace para más información sobre el nombre del archivo de registro y cómo verlos.

Puede ampliar fácilmente la capacidad de esta función para realizar otras transformaciones añadiendo el código necesario en la función transformValues(). Si necesita realizar algún cambio en la función, deberá pausarlo o desinstalarlo, editar el JavaScript y, a continuación, reanudarlo o volver a instalarlo.

Haga clic en Guardar para guardar el código y pulse < volver a Concurso completo para volver a la Eventos de la consola.

Verá el nuevo transformar pero es necesario desplegarla. Haga clic en el botón transformar y, a continuación, pulse Despliegue.

Confirme el despliegue de la función con la configuración por defecto pulsando Función de despliegue.

Una vez desplegada la función, el estado es desplegado.

Ahora todo está listo para importar los datos de exportación de MongoDB a Couchbase y transformarlos en tiempo real.

Importar documentos con cbimport

Utiliza el Utilidad cbimport para importar los archivos de exportación de MongoDB. Antes de importar datos es importante entender la sintaxis del comando y lo que está haciendo.

He aquí un ejemplo de comando cbimport:

Para importar MongoDB comentarios ejecute el siguiente comando. Tenga en cuenta que la ubicación de la utilidad cbimport varía en función del sistema operativo y se documenta aquí: Referencia CLI.

El comando se conectará al clúster especificado (es decir, -c couchbase://127.0.0.1) utilizando las credenciales de administrador suministradas (es decir, -u Administrador -p contraseña).

El comando importará datos JSON de comments.json. Compruebe el formato del archivo comments.json exportado y especifique el valor correcto. opción de formato del conjunto de datos según el formato del archivo de exportación. Mi archivo de exportación sigue el formato formato de lista que contiene una única lista JSON en la que cada elemento de la lista representa un documento independiente (-f list).

Los documentos se escriben en el bucket de entrada (-b incoming) utilizando una clave generada con el formato especificado (-g comment:#MONO_INCR#). En este comando, el formato especifica que cada clave de documento comenzará por "comment:". La dirección Función MONO_INCR se incrementa en 1 cada vez que se llama, de modo que las claves resultantes son comentario:1, comentario:2, etc.

Una vez completado, verá el siguiente resultado:

Ir a la Cubos y confirme que el sample_mflix contiene 50.304 documentos.

Para importar MongoDB películas ejecute el siguiente comando.

Una vez completado, verá el siguiente resultado:

Ir a la Cubos y confirme que el sample_mflix bucket contiene 73.843 documentos.

Ahora comprueba dos de los documentos transformados. Vaya al Documentos y asegúrese de que el Cubo se establece en sample_mflix. Haga clic en id comment:5a9427648b0beebeb69579cc (el primer documento de la lista):

Fíjate en el contenido:

Comparándolo con los datos exportados (busque 5a9427648b0beebeb69579cc en comments.json):

La función de transformación ha cambiado los valores JSON extendidos _id, movie_id y date. Observe que se ha añadido un atributo type basado en el prefijo de la clave del documento (recuerde que especificamos comment como prefijo de la clave al importar los datos).

Cierre el editor de documentos cuando haya terminado de revisar el contenido del documento.

En el ID del documento introducir campo movie:573a1390f29313caabcd4135pulse Recuperar documentosy haga clic en id movie:573a1390f29313caabcd4135.

Fíjate en el contenido:

Comparándolo con los datos exportados (busque 573a1390f29313caabcd4135 en movies.json):

La función de transformación ha cambiado los valores JSON extendidos _id, released y tomatoes.lastUpdated. Observe que en este caso no se ha añadido un atributo de tipo. El documento exportado ya contenía un atributo type, por lo que la función de transformación no añadió uno, sino que estableció el valor basándose en el prefijo de la clave (recuerde que especificamos movie como prefijo de la clave al importar los datos).

Cierre el editor de documentos cuando haya terminado de revisar el contenido del documento.

El futuro

Si no tiene previsto importar más datos de exportación de MongoDB, puede desinstalar la función de transformación y eliminar los buckets de entrada y error.

Para obtener información detallada sobre los diferentes modelos de documentos entre Couchbase y MongoDB, el modelado de datos y el esquema de MongoDB, y otras formas de comparar MongoDB vs. Couchbase, consulte este documento: Couchbase: Mejor que MongoDB en todos los sentidos.

Descubra por qué otras empresas eligen Couchbase en lugar de MongoDB:

Autor

Publicado por Douglas Bonser, Ingeniero principal de soluciones, Couchbase

Douglas Bonser es Ingeniero Principal de Soluciones en Couchbase y lleva trabajando en TI y tecnología desde 1991. Reside en el área de Dallas/Ft. Worth.

Dejar una respuesta