MongoDB MMAPv1 gegen WiredTiger-Speicher-Engines

25

In mongoDB3 erschien eine neue Speicher-Engine: WiredTiger . Dennoch ist MMAPv1 in Mongo immer noch die Standardoption .

Eines ist vielleicht nicht besser als das andere, es ist oft eine Frage des Anwendungsfalls und der Auswahl des richtigen Werkzeugs für den Job. Aber welcher Motor passt zu welchem ​​Job?

In der Tat, während MMAPv1 der Standard - Engine ist, scheint WiredTiger besser in fast allen Bereichen. Es hat die gleichen Funktionen wie MMAPv1 plus:

  • bessere Schreibleistung,
  • Parallelität auf Dokumentebene,
  • Kompression,
  • Schnappschüsse und Checkpoints-System.

Ich habe eine Vergleichstabelle im MongoDB-Blog gefunden :

WiredTiger und MMAPv1 Vergleich

Gibt es einen Grund, WiredTiger nicht zu wählen, es sei denn, Sie arbeiten unter Solaris?


BEARBEITEN

Hier sind zwei Videos, die detailliert die Interna von WiredTiger und MMAPv1 erklären .

Buzut
quelle
Alle Leute hier ... Sie können blog.clevertap.com/ für eine sehr gute Erklärung zu diesem Thema
besuchen

Antworten:

26

Persönlich bevorzuge ich die mmapv1-Speicher-Engine ab sofort aus drei Gründen.

Grund 1: Fälligkeit

Es ist nicht so, dass WiredTiger noch nicht ausgereift ist. Aber mmapv1 ist gut verstanden und kampferprobt auf und ab, hin und her und darüber hinaus. WiredTiger hatte in letzter Zeit einige schwerwiegende Probleme (siehe http://jira.mongodb.com für Details), und ich bin nicht bereit, meine Kunden dazu zu bringen, das nächste Problem auf die harte Tour zu finden.

Grund 2: Eigenschaften

Gegeben, WT hat einige grundsätzliche fantastische Funktionen. Die Sache ist: Ich habe niemanden gesehen, der von ihnen profitiert. Kompression? In beiden Fällen opfern Sie ziemlich viel, um Leistung für relativ billigen Speicherplatz zu erzielen. Fehlt das Problem der Dokumentenmigration beim Erweitern von Dokumenten? Nun, wir haben immer noch die 16-MB-Größenbeschränkung und zusätzliche Komplexität für eingebettete Dokumente, insbesondere wenn das Einbetten übertrieben ist.

Es gibt noch andere Funktionen, aber im Allgemeinen: Ich sehe, dass sie von jetzt an nicht viel profitieren .

Grund 3: Gesamtbetriebskosten

Für neue Projekte ist WT möglicherweise in Ordnung, insbesondere seit 3.2, da das Folgende nicht zutrifft.

Datenmigrationen sind teuer. Es muss geplant werden, der Plan muss von allen Beteiligten vereinbart werden, Notfallpläne müssen erstellt und vereinbart werden, die Migration muss vorbereitet, durchgeführt und überprüft werden. Vervielfachen Sie nun den Zeitaufwand mit den Stakeholdern, die an diesem Prozess beteiligt sind, und die Kosten für die Datenmigration. Der Return on Investment erscheint dagegen eher gering. Sie können ziemlich viel skalieren, anstatt eine Migration durchzuführen, wenn Sie diese Faktoren berücksichtigen. Um Ihnen einen Eindruck zu vermitteln: Ich würde ungefähr eine "Mannwoche" pro Stakeholder veranschlagen, wenn eine Migration richtig geplant, durchgeführt und überprüft wird. Bei Kosten von 100 USD pro Stunde und Person und nur drei beteiligten Personen (Manager, DBA und Entwickler) belaufen sich diese auf 12.000 USD. Beachten Sie, dass dies eine vorsichtige Schätzung ist.

Fazit

All diese Faktoren haben mich zu dem Schluss gebracht, WT überhaupt nicht zu verwenden. Im Augenblick.


Aktualisieren

Dieser Beitrag ist einige Monate alt und verdient ein Update

Bei Reife

Meine ursprünglichen Kommentare zur Reife sind veraltet. WiredTiger hat seit einiger Zeit keine größeren Probleme mehr und ist seit MongoDB 3.2 die Standard-Speicher-Engine

Ein Funktionen

Meine ursprünglichen Kommentare sind immer noch gültig, imho.

Kompression

Wenn jedoch das Budget knapp ist oder die Leistung im Allgemeinen nicht das Hauptproblem ist, ist der Leistungskompromiss eher gering, und Sie tauschen im Allgemeinen geringfügige Leistungseinbußen (im Vergleich zu unkomprimiertem WT) gegen Speicherplatz aus, indem Sie das nutzen, was sonst im Leerlauf wäre um: die CPU.

Verschlüsselung

MongoDB 3.2 Enterprise hat die Möglichkeit eingeführt, WiredTiger-Speicher verschlüsseln zu lassen. Für Daten mit erhöhten Sicherheitsanforderungen ist dies eine Killer-Funktion und macht WT zur einzigen Speicher-Engine der Wahl, sowohl technisch (MMAPv1 unterstützt keine Verschlüsselung) als auch konzeptionell. Abgesehen von der Möglichkeit verschlüsselter Festplattenpartitionen, obwohl Sie diese Option in einigen Umgebungen möglicherweise nicht haben.

Sperren auf Dokumentebene

Ich muss zugeben, dass ich dieses Merkmal von WT in meiner obigen Analyse im Wesentlichen weggelassen habe, weil es weder für mich noch für meine Kunden zutraf, als ich die ursprüngliche Antwort schrieb.

Abhängig von Ihrem Setup, vor allem wenn Sie viele Schreibclients gleichzeitig haben, kann diese Funktion die Leistung erheblich steigern.

Ein Gesamtbetriebskosten

Migrationen sind immer noch teuer. Unter Berücksichtigung der Änderungen der Laufzeit und der geänderten Sicht auf die Funktionen kann sich eine Migration jedoch lohnen, wenn:

  • Sie benötigen eine Verschlüsselung (nur Enterprise Edition!)
  • Leistung ist nicht Ihr absolutes Hauptanliegen und Sie können mit Komprimierung auf lange Sicht Geld sparen (konservativ kalkulieren)
  • Es werden viele Prozesse gleichzeitig geschrieben, da durch die Leistungssteigerung möglicherweise vertikale oder horizontale Skalierungen eingespart werden.

Aktualisierte Schlussfolgerung

Für neue Projekte verwende ich jetzt WiredTiger. Da die Migration von einem komprimierten auf einen unkomprimierten WiredTiger-Speicher relativ einfach ist, beginne ich eher mit der Komprimierung, um die CPU-Auslastung zu verbessern ("Mehr Leistung für wenig Geld"). Sollte sich die Komprimierung spürbar auf die Leistung oder UX auswirken, migriere ich zu unkomprimiertem WiredTiger.

Bei Projekten mit vielen gleichzeitigen Autoren lautet die Antwort auf die Frage, ob migriert werden soll oder nicht, fast immer "Ja" - es sei denn, das Budget des Projekts verbietet die Investition. Auf lange Sicht sollte sich die Leistungssteigerung amortisieren, wenn der Einsatz anderweitig sinnvoll geplant war. Sie müssen der Berechnung jedoch etwas Entwicklungszeit hinzufügen, da in einigen Fällen der Treiber aktualisiert werden muss und möglicherweise Probleme auftreten, die behoben werden müssen.

Für Projekte, bei denen das Budget knapp ist und die momentan nicht mehr Speicherplatz bieten, kann die Migration auf einen komprimierten WiredTiger eine Option sein, die Komprimierung belastet jedoch die CPU, wie es mit MMAPv1 noch nicht möglich ist. Darüber hinaus könnten die Migrationskosten für ein solches Projekt unerschwinglich sein.

Markus W. Mahlberg
quelle
Danke Markus für deine Antwort. Ich verstehe deine Argumente. Würden Sie sogar raten, für neue Projekte auf MMAPv1 zurückzugreifen? Ich meine, wenn die Leistung ein Problem darstellt, kann die Komprimierung auch vollständig deaktiviert werden. Der Speicherplatz ist günstig, aber die Komprimierung kann dazu beitragen, dass die Arbeitsumgebung in den Arbeitsspeicher passt. Oder liege ich falsch?
Buzut
1
Soweit ich weiß, wird die Komprimierung nur auf die Datendateien angewendet. Lassen Sie mich neue Projekte so ausdrücken: Ich fordere eine Entscheidung des Managements mit Vor- und Nachteilen. Ich persönlich benutze WT in einem meiner Projekte und bin noch nicht auf Probleme gestoßen, aber es gibt möglicherweise andere Faktoren wie SLAs (die ich aufgrund der Erfahrung mit mmapv1 ziemlich gut berechnen kann), enge Budgets (die komprimierte WT erfordern würden) Speicherplatz sparen) und viele andere Faktoren. Das Abwägen von Risiken und Chancen ist keine DBAs-Entscheidung. Ein DBA muss die zum Tätigen eines Anrufs erforderlichen Informationen bereitstellen.
Markus W Mahlberg
1
Dieser Artikel scheint darauf hinzuweisen, dass die Art und Weise, wie Indizes gespeichert werden, ein ziemlich großer Vorteil ist, da dadurch der Speicherplatz, den Ihre Indizes belegen, um das Zehnfache reduziert werden kann: ilearnasigoalong.blogspot.com/2015/03/… . Speicherplatz ist billig, RAM jedoch nicht.
BT
Ich bin ein bisschen verwirrt über Ihren Standpunkt zu Features. Wollen Sie damit sagen, dass es Features gibt, die in MMAPv1 nicht in WiredTiger enthalten sind? Es wäre schön, wenn dieser Abschnitt etwas klarer wäre.
BT
@ BT Überhaupt nicht. Was ich damit sagen wollte ist, dass WT einige ziemlich coole Funktionen hat, die für einige Anwendungsfälle hilfreich sein können, aber im Allgemeinen nicht sind. Ich bevorzuge eine kampferprobte Speicher-Engine, wenn es um Datenspeicherung geht. Laut Artikel: Ja, mit der Präfix-Komprimierung kann RAM gespart werden, und dies ist möglicherweise eine gute Idee, wenn keine anderen Bedenken bestehen. Stellen Sie sich vor, Sie könnten für Datenverlust oder Leistungsprobleme als zuverlässig eingestuft werden.
Markus W Mahlberg
5

Meine zwei Cent:

Bei der Aufzeichnung in WiredTiger können Aktualisierungen beim Herunterfahren verloren gehen, da für die Speicherung der Journaldatensätze die speicherinterne Pufferung verwendet wird.

Während die Journaldatensätze zwischen Schreibvorgängen in den WiredTiger-Puffern verbleiben, können Aktualisierungen nach einem harten Herunterfahren von mongod verloren gehen.

Die Aufzeichnung in MMAPv1 schreibt Änderungen in die Journaldateien auf der Festplatte.

Wenn die mongod-Instanz abstürzen würde, ohne die Schreibvorgänge auf die Datendateien angewendet zu haben, könnte das Journal die Schreibvorgänge in der freigegebenen Ansicht wiedergeben, um schließlich in die Datendateien zu schreiben.

gabrielgiussi
quelle
4

Wir sind von MMAPv1 auf WiredTiger umgestiegen, um eine 7- bis 10-fache Leistungssteigerung zu erzielen. Wir mussten zu MMAPv1 zurückkehren, da MongoDB abstürzt, wenn der WiredTiger-Cache 100% erreicht. Wir haben unsere Erfahrungen hier dokumentiert - https://blog.clevertap.com/sleepless-nights-with-mongodb-wiredtiger-and-our-return-to-mmapv1/

Anand
quelle
2
Nizza schreiben. Kinda erinnert mich daran, dass Uber 2013 von MySQL zu PostgreSQL
gewechselt ist
gut erklärt auch gleiche Erfahrung mit verdrahteten Tiger haben wir so es MMAPV1 revreted
viren