2012-02-22 13 views
6

stiamo usando MongoDB (su Linux) come nostro database principale. Tuttavia, è necessario esportare periodicamente (ad esempio ogni notte) alcune delle raccolte da Mongo a un server MS SQL per eseguire analisi.Best practice per l'esportazione di raccolte mongo su SQL Server

sto pensando il seguente approccio:

  1. Backup database Mongo (probabilmente da una replica) utilizzando mongodump
  2. Ripristinare il database in una macchina Windows in cui Mongo è istallato
  3. Scrivi una personalizzato fatto app per importare le collezioni da Mongo in SQL (possibilmente gestendo qualsiasi normalizzazione richiesta).
  4. Esegui analisi nell'installazione di Windows SQL Server.

Esistono altre "provate e vere" alternative?

Grazie, Stefano

EDIT: per il punto 4, le analisi deve essere eseguito su SQL Server, non Mongo.

+1

I tuoi passi mi stanno bene. Un'altra alternativa sarebbe quella di importare su MySQL sulla macchina originale, fare un dump SQL e quindi importare l'SQL sulla macchina Windows (supponendo che sia tutto SQL standard tra di loro). In entrambi i casi funziona, dipende se vuoi MySQL sul server originale o Mongo sul server di destinazione. –

risposta

3

complesso guarda bene, ma posso suggerire due cose:

  1. di backup Skip/ripristino passi e leggere i dati direttamente da Linux MongoDB, perché sarà sempre più difficile per il backup/ripristino del database come crescerà .
  2. Invece di un'applicazione personalizzata, utilizzare Quartz.net per l'esportazione notturna, è facile da utilizzare e può risolvere qualsiasi altra attività di pianificazione.

Anche io posso suggerire di guardare in questi nuovi approcci come cqrs and event sourcing, che fondamentalmente consentono di evitare le attività di esportazione. È possibile gestire i messaggi e archiviare i dati in due origini dati (linux mongodb, windows sql server) in tempo reale con un piccolo ritardo o persino analizzare i dati dai messaggi e archiviarli in mongodb.

+0

non sarebbe possibile che leggere i dati direttamente da un'istanza dal vivo possa danneggiare l'integrità dei dati (specialmente se l'operazione si estende su alcuni minuti)? Cosa succede se i dati vengono modificati quando la copia è in corso? –

+0

@StefanoRicciardi: Non vedo come si possa rompere l'integrità dei dati durante la lettura dei dati. Anche se lo leggi 5 giorni. Va bene quando i dati vengono modificati mentre lo leggi, in qualsiasi modo eseguirai l'analisi su dati obsoleti. –

+0

In effetti sono preoccupato dell'integrità dei dati _target_, non della sorgente. Supponiamo che io stia spazzando la raccolta A, dove un oggetto fa riferimento a un elemento b dalla raccolta B. Nel frattempo b viene eliminato dalla fonte e quando sono pronto a copiare la raccolta B l'articolo b non c'è più. –