Silniki pamięci masowej MongoDB MMAPv1 vs WiredTiger

25

W mongoDB3 pojawił się nowy silnik pamięci: WiredTiger . Jednak MMAPv1 jest nadal domyślnym wyborem w Mongo .

Jedno może nie być lepsze od drugiego, często jest to kwestia przypadku użycia i wyboru odpowiedniego narzędzia do pracy. Ale który silnik jest odpowiedni do jakiej pracy?

W rzeczywistości, podczas gdy MMAPv1 jest domyślnym silnikiem, WiredTiger wydaje się lepszy w prawie każdej dziedzinie. Ma takie same funkcje jak MMAPv1 oraz:

  • lepsza wydajność pisania,
  • współbieżność na poziomie dokumentu,
  • kompresja,
  • system migawek i punktów kontrolnych.

Znalazłem tabelę porównawczą na blogu MongoDB :

Porównanie WiredTiger i MMAPv1

Więc jeśli nie korzystasz z systemu Solaris, czy istnieje powód, aby nie wybierać WiredTiger?


EDYTOWAĆ

Oto dwa filmy, które szczegółowo wyjaśniają elementy wewnętrzne WiredTiger i MMAPv1 .

Buzut
źródło
Wszyscy ludzie tutaj ... możesz odwiedzić blog.clevertap.com/..., aby uzyskać bardzo dobre wyjaśnienie na ten temat
tamprashant

Odpowiedzi:

26

Osobiście wolę silnik pamięci masowej mmapv1 z trzech powodów.

Powód 1: Dojrzałość

To nie jest tak, że WiredTiger jest niedojrzały. Ale mmapv1 jest dobrze zrozumiany i przetestowany w bitwach w górę iw dół, tam iz powrotem, a także ponad i poza nią. WiredTiger miał ostatnio poważne problemy (więcej szczegółów na stronie http://jira.mongodb.com ) i nie jestem skłonny, aby moi klienci znaleźli kolejny trudny sposób.

Powód 2: Funkcje

Biorąc pod uwagę, WT ma kilka niesamowicie niesamowitych funkcji. Chodzi o to: nie widziałem nikogo, kto z nich skorzysta. Kompresja? Tak czy inaczej, poświęcasz dość ciężko, aby uzyskać wydajność za dość tanie miejsce na dysku. Brak problemu z migracją dokumentów podczas rozwijania dokumentów? Cóż, nadal mamy limit wielkości 16 MB i dodatkową złożoność osadzonych dokumentów, zwłaszcza gdy przesadzanie jest przesadzone.

Istnieją inne funkcje, ale w ogóle: Nie widzę zbyt dużo z nich korzystać już teraz .

Powód 3: Całkowity koszt posiadania

W przypadku nowych projektów WT może być w porządku, szczególnie od wersji 3.2, ponieważ poniższe zasady nie mają zastosowania.

Przeprowadzanie migracji danych jest drogie. Trzeba to zaplanować, plan musi zostać uzgodniony przez wszystkie zainteresowane strony, plany awaryjne muszą zostać stworzone i uzgodnione, migracja musi być przygotowana, wykonana i poddana przeglądowi. Teraz pomnóż czas potrzebny interesariuszom, którzy biorą udział w tym procesie, a koszty migracji danych gwałtownie wzrosną. Z drugiej strony zwrot z inwestycji wydaje się raczej niewielki. Możesz wziąć pod uwagę skalę, zamiast przeprowadzać migrację, jeśli weźmiesz pod uwagę te czynniki. Aby wywrzeć na tobie wrażenie: szacuję, że migracja jest odpowiednio planowana, wykonywana i sprawdzana w przybliżeniu na jeden „osobodni” na interesariusza. Przy kosztach 100 USD za godzinę na osobę i zaangażowanych tylko trzech ludzi (menedżer, DBA i programista), wynosi to 12 000 USD. Zauważ, że jest to ostrożny szacunek.

Wniosek

Wszystkie powyższe czynniki doprowadziły mnie do wniosku, że w ogóle nie używam WT. W tym momencie.


Aktualizacja

Ten post ma już kilka miesięcy, więc zasługuje na aktualizację

W dniu zapadalności

Moje oryginalne komentarze na temat dojrzałości są trochę przestarzałe. WiredTiger od jakiegoś czasu nie ma większych problemów i stał się domyślnym silnikiem pamięci masowej od wersji MongoDB 3.2

Funkcje

Moje oryginalne komentarze nadal mają pewną ważność, imho.

Kompresja

Jednak gdy nie masz większego wpływu na budżet lub, mówiąc bardziej ogólnie, wydajność nie jest najważniejsza, kompromis w zakresie wydajności jest raczej niewielki i zasadniczo zamieniasz niewielki wpływ na wydajność (w porównaniu do nieskompresowanego WT) na miejsce na dysku, wykorzystując to, co w innym przypadku byłoby bezczynne wokół: procesor.

Szyfrowanie

MongoDB 3.2 Enterprise wprowadził możliwość szyfrowania pamięci WiredTiger. W przypadku danych o zwiększonych potrzebach bezpieczeństwa jest to funkcja zabójcza i sprawia, że ​​WT jest jedynym wybranym silnikiem pamięci, zarówno technicznie (MMAPv1 nie obsługuje szyfrowania), jak i koncepcyjnie. Pomijając oczywiście możliwość zaszyfrowania partycji dysku, chociaż w niektórych środowiskach możesz nie mieć takiej opcji.

Blokowanie na poziomie dokumentu

Muszę przyznać, że zasadniczo pominąłem tę cechę WT w powyższej analizie, głównie dlatego, że nie dotyczyła ona mnie ani moich klientów, kiedy napisałem oryginalną odpowiedź.

W zależności od konfiguracji, zwłaszcza gdy masz wielu współbieżnych klientów piszących, ta funkcja może znacznie zwiększyć wydajność.

Całkowity koszt posiadania

Przeprowadzanie migracji jest wciąż drogie. Biorąc jednak pod uwagę zmiany dojrzałości i zmieniony widok funkcji, migracja może być warta inwestycji, jeśli:

  • Potrzebujesz szyfrowania (tylko wersja Enterprise!)
  • Wydajność nie jest Twoim absolutnym priorytetem i możesz zaoszczędzić pieniądze na dłuższą metę (zachowawczo) używając kompresji
  • Wiele procesów pisze jednocześnie, ponieważ wzrost wydajności może zaoszczędzić na skalowaniu w pionie lub w poziomie.

Zaktualizowany wniosek

Do nowych projektów używam teraz WiredTiger. Ponieważ migracja ze skompresowanego do nieskompresowanego magazynu WiredTiger jest raczej łatwa, zwykle zaczynam od kompresji, aby zwiększyć wykorzystanie procesora („uzyskaj więcej za grosze”). Jeśli kompresja ma zauważalny wpływ na wydajność lub UX, migruję do nieskompresowanego WiredTiger.

W przypadku projektów z wieloma równoległymi autorami odpowiedź na pytanie, czy migrować, czy nie, prawie zawsze brzmi „Tak” - chyba że budżet projektu zabrania inwestycji. W dłuższej perspektywie wzrost wydajności powinien się zwrócić, jeśli wdrożenie byłoby w rozsądny sposób zaplanowane. Jednak trzeba poświęcić trochę czasu na opracowanie obliczeń, ponieważ w niektórych przypadkach sterownik musi zostać zaktualizowany i mogą wystąpić problemy, które należy rozwiązać.

W przypadku projektów, które są obciążone budżetem i na razie nie mogą sobie pozwolić na więcej miejsca na dysku, migracja do skompresowanego WiredTiger może być opcją, ale kompresja powoduje pewne obciążenie procesora, co jest niespotykane w przypadku MMAPv1. Ponadto koszty migracji mogą być zbyt wysokie w przypadku takiego projektu.

Markus W Mahlberg
źródło
Dziękuję Markus za twoją odpowiedź. Rozumiem twoje argumenty. Czy radziłbyś nawet przywrócić domyślne ustawienia MMAPv1 dla nowych projektów? Chodzi mi o to, że jeśli chodzi o wydajność, kompresję można również całkowicie wyłączyć. Miejsce na dysku jest tanie, ale kompresja może pomóc działającemu dopasowaniu zestawu do pamięci RAM… i tym samym zwiększyć wydajność. A może się mylę?
Buzut
1
O ile mi wiadomo, kompresja jest stosowana tylko do plików danych. Jeśli chodzi o nowe projekty, pozwólcie, że ujmę to tak: wezwałbym do podjęcia decyzji zarządczej, pokazując zalety i wady. Osobiście używam WT w jednym z moich projektów i jeszcze nie napotkałem problemów, ale mogą istnieć inne czynniki, takie jak umowy SLA (które mogę dość dobrze obliczyć na podstawie doświadczenia z mmapv1), napięte budżety (które wymagałyby skompresowanego WT do oszczędzać miejsce na dysku) i wiele innych czynników. Ważenie ryzyka i szans nie jest decyzją DBA. DBA musi dostarczyć informacje potrzebne do wykonania połączenia.
Markus W Mahlberg,
1
Ten artykuł wydaje się wskazywać, że sposób przechowywania indeksów jest dość ogromną korzyścią, ponieważ może zmniejszyć przestrzeń, którą indeksy zajmują 10 razy: ilearnasigoalong.blogspot.com/2015/03/… . Miejsce na dysku jest tanie, ale RAM nie.
BT
Jestem trochę zdezorientowany co do tego, co mówisz o funkcjach, czy mówisz, że istnieją funkcje MMAPv1, których nie ma WiredTiger? Byłoby miło, gdyby ta sekcja była nieco jaśniejsza.
BT
@BT Wcale nie. Próbowałem powiedzieć, że WT ma całkiem fajne funkcje, które w niektórych przypadkach użycia mogą być pomocne, ale ogólnie nie są. Wolę sprawdzony w bitwie silnik pamięci masowej niż najnowocześniejszy system przechowywania danych. Zgodnie z artykułem: Tak, dzięki kompresji prefiksu można zaoszczędzić pamięć RAM, i może to być dobry pomysł, jeśli nie było innych obaw. Wyobraź sobie, że możesz być niezawodny w przypadku utraty danych lub problemów z wydajnością.
Markus W Mahlberg,
5

Moje dwa centy:

Kronikowanie w WiredTiger może utracić aktualizacje podczas twardego zamykania, ponieważ wykorzystuje buforowanie w pamięci do przechowywania rekordów dziennika.

Pomiędzy operacjami zapisu, podczas gdy rekordy dziennika pozostają w buforach WiredTiger, aktualizacje mogą zostać utracone po silnym wyłączeniu mongod.

Kronikowanie w MMAPv1 zapisuje zmiany w plikach dziennika na dysku.

Gdyby instancja mongod uległa awarii bez zastosowania zapisów do plików danych, dziennik mógłby odtworzyć zapisy w widoku współużytkowanym w celu ostatecznego zapisu do plików danych.

gabrielgiussi
źródło
4

Przeszliśmy do WiredTiger z MMAPv1 na przynętę 7x do 10x wzrostu wydajności. Musieliśmy powrócić do MMAPv1, ponieważ MongoDB blokuje się, gdy pamięć podręczna WiredTiger osiągnie 100%. Udokumentowaliśmy nasze doświadczenie tutaj - https://blog.clevertap.com/sleepless-nights-with-mongodb-wiredtiger-and-our-return-to-mmapv1/

Anand
źródło
2
Niezły opis. Trochę przypomina mi przejście Ubera z MySQL na PostgreSQL w 2013 r., A następnie powrót do MySQL w czerwcu 2016 r.
RolandoMySQLDBA
dobrze wyjaśnione, że mamy takie same doświadczenia z przewodowym tygrysem, więc zaktualizowaliśmy to do MMAPV1
viren