2013-06-29 9 views
9

Sto lavorando a un'applicazione in cui c'è una differenza piuttosto drammatica nei modelli di utilizzo tra dati "caldi" e altri dati. Abbiamo selezionato MongoDB come nostro repository di dati e, nella maggior parte dei casi, sembra essere una combinazione fantastica per il tipo di applicazione che stiamo costruendo.MongoDB: database diversi possono essere posizionati su unità separate?

Ecco il problema. Ci sarà un repository di documenti centrale, che deve essere ricercato e consultato abbastanza spesso: la sua dimensione è di circa 2 GB e crescerà fino a 4 GB nei prossimi due anni. Per aumentare le prestazioni, posizioneremo quel DB su un array SSD con mirroring di classe server e, data la dimensione totale dei dati, non immaginiamo che la memoria diventerà un problema.

Il sistema manterrà inoltre versioni di record, traccia di controllo, interazioni con i clienti, record di notifica e simili. a cui si farà riferimento solo raramente e che potrebbe crescere di dimensioni abbastanza grandi. Vorremmo collocarlo su dischi di filatura più tradizionali, in quanto sarebbe accessibile raramente (supponiamo che un record tipico possa essere consultato quattro o cinque volte all'anno e sarà necessario solo per soddisfare la ricerca e il servizio clienti richieste), e potrebbe anche crescere abbastanza grande.

Non ho trovato alcun materiale di riferimento che indica se MongoDB ci consentirebbe di posizionare database diversi su dischi diversi (stavamo eseguendo mongod sotto Windows, ma non è il caso quando entriamo in produzione .

Mi dispiace per tutti i dettagli qui, ma questi sono fattori primari che dobbiamo pensare a come abbiamo in programma per la distribuzione. Data la propensione di Mongo per afferrare tutta la memoria disponibile, e che sarà in esecuzione su una macchina che arriva al massimo con una memoria da 24 GB, stiamo cercando di elaborare la migliore configurazione di produzione per i nostri database

Quindi ecco quali sono le nostre opzioni sembrano essere:

  • singola istanza di Mongo con più database Questo sembra avere il vantaggio della semplicità, ma non ho ancora trovato alcuna risposta definitiva su come dividere i database a diverse unità fisiche sulla macchina.

  • Due istanze di Mongo, una per i dati "caldi" e l'altra per il materiale di archiviazione. Non sono sicuro di quanto bene Mongo gestirà due istanze di mongod che contendono le risorse, ma stavamo pensando che, dal momento che la versione a 32 bit del server è limitata a 2 GB di memoria, potremmo usarla per il materiale di archiviazione senza dover travolge le risorse della macchina. Per i dati "caldi", potremmo quindi configurare facilmente un'istanza a 64 bit del motore di database per utilizzare un array SSD, e data la dimensione relativamente piccola dei nostri dati, l'intero DB e gli indici potrebbero essere direttamente mappati in memoria senza errori di pagina .

  • due istanze di Mongo in due macchine virtuali separate Would potrebbe utilizzare VMWare, o qualcosa di simile, per creare due macchine Linux che potrebbe ospitare Mongo separatamente. Mentre potrebbe aumentare un po 'l'onere amministrativo, mi sembra che fornisca il controllo più dettagliato sull'utilizzo delle risorse di sistema, lasciando comunque l'host Windows Server sufficiente memoria per eseguire IIS e i suoi processi.

Ma tutto questo è la speculazione, come nessuno di noi ha mai fatto significative implementazioni MongoDB prima, quindi non abbiamo un'ottima base esperienza a cui attingere.

La mia domanda effettiva è se ci sono opzioni per avere due database nella stessa istanza del server mongod che utilizzano unità completamente separate. Sarebbe inoltre gradita qualsiasi comprensione dei vantaggi e degli svantaggi delle nostre tre opzioni di distribuzione identificate.

+1

Sì, http://docs.mongodb.org/manual/reference/configuration-options/#directoryperdb – WiredPrairie

+0

Mi sono imbattuto in questo nella mia ricerca, ma non sembra applicabile a Windows, dove i dischi sono discreti: l'opzione a cui hai collegato permetterà a Mongo di creare diverse cartelle sotto una cartella comune. Potrebbe esserci un modo per giustizzare questo problema montando i dischi fisici sui percorsi delle directory, che sembra essere supportato nelle nuove versioni di Windows Server, ma non l'ho mai provato. – Curt

+0

Sì, è possibile montare un'unità come percorso. Dovrebbe funzionare per questo e vale la pena provare. È fondamentalmente lo stesso di Linux, credo. – WiredPrairie

risposta

4

che in realtà è una cosa abbastanza facile da fare quando si utilizza Linux:

  1. Attivare l'opzione di configurazione directoryPerDB
  2. creare i database necessari.
  3. Arresta l'istanza.
  4. Copia i dati dalle singole directory del database ai diversi dispositivi di blocco (dischi, array RAID, volumi logici, destinazioni iSCSI e simili).
  5. Monte rispettivi dispositivi a blocchi per le loro posizioni in base al di là della directory dbpath (non dimenticate di aggiungere le linee secondo /etc/fstab!)
  6. mongod Riavvia.

Edit: Come nota a margine, vorrei aggiungere che non si dovrebbe usare Windows come sistema operativo per una produzione MongoDB. I filesystem disponibili NTFS e ReFS funzionano in modo orribile se confrontati con ext4 o XFS (quest'ultimo è il filesystem suggerito per la produzione, vedere MongoDB production notes for details). Solo per questo motivo, suggerirei Linux. Un altro motivo è la RAM utilizzata da sottosistemi piuttosto inutili di Windows, come la GUI.

+0

In realtà, Windows Server 2012 è una delle [piattaforme consigliate per l'esecuzione di MongoDB in produzione] (http://docs.mongodb.org/manual/installation/#recommended-operating-systems-for-production-deployments). –

+0

Uno sicuramente _può eseguire MongoDB su un Windows Server 2012. È la migliore piattaforma disponibile? Imho non lo è, per vari motivi: rispetto a Linux, lo stack di rete non è efficiente, i filesystem disponibili ... Uhh ... sono meno ottimali di quelli disponibili per Linux, gli snapshot di LVM ("_Linux_ Volume Management System ") non sono disponibili come metodo di backup (divertiti con' mongodump' e gli amici se i tuoi dati sono un paio di centinaia di GB) e le GUI totalmente inutili stanno divorando risorse di sistema che possono ben riassumere nell'equivalente di intere macchine anche in cluster di medie dimensioni. –

Problemi correlati