2012-02-22 18 views
6

estamos utilizando MongoDB (en Linux) como nuestra base de datos principal. Sin embargo, tenemos que exportar periódicamente algunas de las colecciones de Mongo a un servidor MS SQL para ejecutar análisis (por ejemplo, todas las noches).Mejores prácticas para exportar colecciones mongo a SQL Server

estoy pensando en el siguiente enfoque:

  1. copia de seguridad de la base de datos de Mongo (probablemente de una réplica) usando mongodump
  2. Restaurar la base de datos en una máquina Windows en Mongo se istalled
  3. Escribir una costumbre aplicación hecha para importar las colecciones de Mongo a SQL (posiblemente manejando cualquier normalización requerida).
  4. Ejecute análisis en la instalación de Windows SQL Server.

¿Hay alguna otra alternativa "probada y verdadera"?

Gracias, Stefano

EDIT: para el punto 4, los análisis se va a ejecutar en SQL Server, no Mongo.

+1

Tus pasos me parecen bien. Otra alternativa sería importar a MySQL en la máquina original, hacer un volcado de SQL, y luego importar el SQL en la máquina de Windows (asumiendo que es todo el SQL estándar entre ellos). De cualquier forma, esto depende de si quiere MySQL en el servidor original o Mongo en el servidor de destino. –

Respuesta

3

En general se ve bien, pero puedo sugerir dos cosas:

  1. copia de seguridad Omitir/restaurar pasos y leer datos directamente de mongodb Linux, ya que será más difícil y más difícil de copia de seguridad/restaurar la base de datos, ya que crecerá .
  2. En lugar de la aplicación personalizada, use Quartz.net para la exportación nocturna, es fácil de usar y puede resolver cualquier otra tarea de programación.

También puedo sugerir mirar en nuevos enfoques como cqrs and event sourcing, que es básicamente permitir evitar las tareas de exportación. Puede manejar mensajes y almacenar datos en dos fuentes de datos (linux mongodb, Windows sql server) en tiempo real con un pequeño retraso, o incluso analizar datos de mensajes y almacenarlos en mongodb.

+0

¿no sería posible que leer datos directamente de una instancia en vivo podría dañar la integridad de los datos (especialmente si la operación abarca varios minutos)? ¿Qué pasa si los datos se cambian cuando la copia está en progreso? –

+0

@StefanoRicciardi: No veo cómo se puede romper la integridad de los datos al leer los datos. Incluso si lo lees 5 días. Está bien cuando los datos cambian mientras lo lees, de cualquier forma ejecutarás análisis en un dato obsoleto. –

+0

De hecho, me preocupa la integridad de los datos _target_, no de la fuente. Supongamos que estoy barriendo la colección A, donde un elemento a hace referencia a un elemento b de la colección B. Mientras tanto, b se elimina de la fuente y cuando estoy listo para copiar la colección B, el elemento b ya no está allí. –

Cuestiones relacionadas