MongoDB MMAPv1 vs motori di archiviazione WiredTiger


25

In mongoDB3 è apparso un nuovo motore di archiviazione: WiredTiger . Tuttavia, MMAPv1 è ancora la scelta predefinita in Mongo .

Uno potrebbe non essere migliore dell'altro, è spesso una questione di utilizzo e di scelta dello strumento giusto per il lavoro. Ma quale motore è giusto per quale lavoro?

Infatti, mentre MMAPv1 è il motore predefinito, WiredTiger sembra migliore in quasi tutti i campi. Ha le stesse funzionalità di MMAPv1 plus:

  • migliore performance di scrittura,
  • concorrenza a livello di documento,
  • compressione,
  • sistema di istantanee e punti di controllo.

Ho trovato una tabella comparativa sul blog di MongoDB :

Confronto di WiredTiger e MMAPv1

Quindi, tranne se sei su Solaris, c'è un motivo per non scegliere WiredTiger?


MODIFICARE

Ecco due video che spiegano in dettaglio gli interni di WiredTiger e MMAPv1 .


Tutte le persone qui ... puoi visitare blog.clevertap.com/… per un'ottima spiegazione sull'argomento
therealprashant

Risposte:


26

Personalmente, preferisco il motore di archiviazione mmapv1 per ora per tre motivi.

Motivo 1: maturità

Non è che WiredTiger sia immaturo. Ma mmapv1 è ben compreso e testato in battaglia su e giù, avanti e indietro, sopra e oltre. WiredTiger ha avuto alcuni problemi seri (vedi http://jira.mongodb.com per i dettagli) abbastanza recentemente, e non sono disposto a chiedere ai miei clienti di trovare il prossimo nel modo più difficile.

Motivo 2: caratteristiche

Dato, WT ha alcune caratteristiche ... incredibilmente straordinarie. Il fatto è: non ho visto nessuno beneficiarne. Compressione? Ad ogni modo, sacrifichi piuttosto duramente per ottenere prestazioni per spazio su disco piuttosto economico. Mancanza del problema di migrazione dei documenti per l'espansione dei documenti? Bene, abbiamo ancora il limite di dimensioni di 16 MB e una maggiore complessità per i documenti incorporati, specialmente quando l'incorporamento è eccessivo.

Ci sono altre funzionalità, ma in generale: non vedo molto beneficio da loro al momento .

Motivo 3: costo totale di proprietà

Per i nuovi progetti, WT potrebbe andare bene, soprattutto dal 3.2, poiché non si applica quanto segue.

Fare migrazioni di dati è costoso. Deve essere pianificato, il piano deve essere concordato da tutte le parti interessate, i piani di emergenza di emergenza devono essere creati e concordati, la migrazione deve essere preparata, eseguita e rivista. Ora moltiplica il tempo necessario con le parti interessate che fanno parte di questo processo e i costi per la migrazione dei dati salgono alle stelle. L'utile sul capitale investito sembra invece piuttosto modesto. È possibile ridimensionare un po 'invece di eseguire una migrazione se si tiene conto di questi fattori. Per darvi un'idea: stimerei all'incirca una "settimana uomo" per stakeholder se una migrazione è pianificata, eseguita e rivista correttamente. Con un costo di $ 100 l'ora a persona e solo tre persone coinvolte (manager, DBA e sviluppatore), ciò equivale a $ 12.000. Si noti che questa è una stima prudente.

Conclusione

Tutti i suddetti fattori mi hanno portato alla conclusione di non usare WT di sorta. Al momento.


Aggiornare

Questo post ha alcuni mesi ormai, quindi merita un aggiornamento

Alla scadenza

I miei commenti originali sulla maturità sono in qualche modo obsoleti. WiredTiger non ha avuto grossi problemi da un po 'di tempo ed è diventato il motore di archiviazione predefinito a partire da MongoDB 3.2

Sulle caratteristiche

I miei commenti originali sono ancora validi, imho.

Compressione

Tuttavia, quando si è limitati al budget o, più in generale, le prestazioni non sono la preoccupazione principale, il compromesso delle prestazioni è piuttosto piccolo e sostanzialmente si scambiano lievi impatti sulle prestazioni (rispetto al WT non compresso) per lo spazio su disco, utilizzando ciò che altrimenti sarebbe inattivo in giro: la CPU.

crittografia

MongoDB 3.2 Enterprise ha introdotto la possibilità di crittografare gli archivi WiredTiger. Per i dati con esigenze di sicurezza avanzate, questa è una funzione killer e rende WT l'unico motore di archiviazione di scelta, sia tecnicamente (MMAPv1 non supporta la crittografia) sia concettualmente. Mettere da parte la possibilità di partizioni del disco crittografate, ovviamente, anche se potresti non avere questa opzione in alcuni ambienti.

Blocco a livello di documento

Devo ammettere che ho sostanzialmente omesso quella caratteristica di WT nella mia analisi di cui sopra, principalmente perché non si applicava a me o ai miei clienti quando ho scritto la risposta originale.

A seconda della configurazione, principalmente quando si hanno molti client di scrittura simultanea, questa funzione può fornire un notevole incremento delle prestazioni.

Sul costo totale di proprietà

Fare le migrazioni è ancora costoso. Tuttavia, tenendo conto dei cambiamenti di maturità e della visione modificata delle caratteristiche, una migrazione potrebbe valere l'investimento se:

  • È necessaria la crittografia (solo Enterprise Edition!)
  • Le prestazioni non sono la tua principale preoccupazione assoluta e puoi risparmiare denaro nel lungo periodo (calcolare in modo conservativo) usando la compressione
  • Esistono molti processi che scrivono contemporaneamente, poiché l'aumento delle prestazioni potrebbe farvi ridimensionare verticalmente o orizzontalmente.

Conclusione aggiornata

Per i nuovi progetti, ora uso WiredTiger. Dal momento che una migrazione da uno storage WiredTiger compresso a uno non compresso è piuttosto semplice, tendo a iniziare con la compressione per migliorare l'utilizzo della CPU ("ottenere più bang per il dollaro"). Se la compressione ha un impatto notevole sulle prestazioni o sull'UX, migra verso WiredTiger non compresso.

Per i progetti con molti scrittori simultanei, la risposta alla migrazione o meno è quasi sempre anche "Sì", a meno che il budget del progetto non vieti l'investimento. A lungo termine, l'aumento delle prestazioni dovrebbe ripagarsi da solo, se la distribuzione fosse altrimenti ragionevolmente pianificata. Tuttavia, è necessario aggiungere un po 'di tempo di sviluppo al calcolo, poiché in alcuni casi il driver deve essere aggiornato e potrebbero esserci problemi che devono essere affrontati.

Per i progetti con budget limitato e per il momento non può permettersi più spazio su disco, la migrazione a un WiredTiger compresso può essere un'opzione, ma la compressione carica un po 'la CPU, qualcosa di inaudito con MMAPv1. Inoltre, i costi di migrazione potrebbero essere proibitivi per un tale progetto.


Grazie Markus per la tua risposta. Capisco i tuoi argomenti. Consiglieresti di ripristinare i valori predefiniti a MMAPv1 per i nuovi progetti? Voglio dire, se le prestazioni sono un problema, la compressione può anche essere completamente disabilitata. Lo spazio su disco è economico, ma la compressione potrebbe aiutare a lavorare in modo da adattarsi alla RAM ... e quindi guadagnare in perf. O mi sbaglio?
Buzut,

1
Per quanto ne so, la compressione viene applicata solo ai file di dati. Per quanto riguarda i nuovi progetti, lasciatemi dire così: chiederei una decisione di gestione, mostrando pro e contro. Personalmente utilizzo il WT in uno dei miei progetti e non ho ancora riscontrato problemi, ma potrebbero esserci altri fattori come gli SLA (che posso calcolare abbastanza bene sulla base dell'esperienza con mmapv1), budget ristretti (che richiederebbero il WT compresso per risparmiare spazio su disco) e molti altri fattori. La ponderazione dei rischi e delle opportunità non è una decisione dei DBA. Un DBA deve fornire le informazioni necessarie per effettuare una chiamata.
Markus W Mahlberg,

1
Questo articolo sembra indicare che il modo in cui sono archiviati gli indici è un vantaggio piuttosto grande perché può ridurre di 10 volte lo spazio occupato dagli indici: ilearnasigoalong.blogspot.com/2015/03/… . Lo spazio su disco è economico, ma non lo è ram.
BT,

Sono un po 'confuso riguardo al tuo punto su Funzionalità, stai dicendo che ci sono funzionalità che MMAPv1 ha di WiredTiger? Sarebbe bello se quella sezione fosse un po 'più chiara.
BT,

@BT Niente affatto. Quello che stavo cercando di dire è che WT ha alcune funzioni piuttosto interessanti che per alcuni casi d'uso possono essere utili, ma non lo sono in generale. Preferisco un motore di archiviazione testato in battaglia oltre l'avanguardia quando si tratta di archiviazione dei dati. Come da articolo: Sì, è possibile con la compressione prefisso salvare la RAM, e questa potrebbe essere una buona idea se non ci fossero altre preoccupazioni. Immagina di poter essere ritenuto affidabile per perdita di dati o problemi di prestazioni.
Markus W Mahlberg,

5

I miei due centesimi:

Il journaling in WiredTiger può perdere gli aggiornamenti negli arresti improvvisi poiché utilizza il buffer in memoria per l'archiviazione dei record del journal.

Tra le operazioni di scrittura, mentre i record del journal rimangono nei buffer WiredTiger, gli aggiornamenti possono andare persi a seguito di un arresto intenso di mongod.

Il journaling in MMAPv1 scrive le modifiche nei file journal su disco.

Se l'istanza mongod dovesse arrestarsi in modo anomalo senza aver applicato le scritture ai file di dati, il journal potrebbe riprodurre le scritture nella vista condivisa per l'eventuale scrittura nei file di dati.


4

Siamo passati a WiredTiger da MMAPv1 con il richiamo del guadagno di prestazioni 7x a 10x. Abbiamo dovuto tornare a MMAPv1 poiché MongoDB si sarebbe bloccato quando la cache di WiredTiger avrebbe raggiunto il 100%. Abbiamo documentato la nostra esperienza qui - https://blog.clevertap.com/sleepless-nights-with-mongodb-wiredtiger-and-our-return-to-mmapv1/


2
Bel writeup. Kinda mi ricorda che Uber è passato da MySQL a PostgreSQL nel 2013 e poi è tornato a MySQL a giugno 2016.
RolandoMySQLDBA,

ben spiegato, abbiamo anche la stessa esperienza con la tigre cablata, quindi la abbiamo riproposta in MMAPV1
viren,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.