MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Kompresja prefiksu indeksu w MongoDB 3.0 WiredTiger

MongoDB 3.0 z WiredTiger wprowadza nową funkcję o nazwie „Kompresja prefiksu indeksu”, która znacznie zmniejsza pamięć zużywaną przez indeksy. Mniej pamięci używanej przez indeksy oznacza więcej pamięci do przechowywania dokumentów lub innych indeksów, co oznacza lepszą wydajność.

W celu uzyskania najlepszej wydajności w MongoDB dobrze jest przechowywać indeksy w pamięci. Brak strony w indeksie to podwójny błąd — jeden błąd strony powoduje umieszczenie rzeczywistej strony indeksu w pamięci, a drugi błąd strony później powoduje przeniesienie strony danych do pamięci.

Technologia

Kompresja prefiksów indeksów nie wykorzystuje kompresji bloków (takich jak zlib, snappy itp.), ale jest inną techniką przechowywania indeksów w pamięci. Zmniejsza użycie pamięci, przechowując identyczne prefiksy tylko raz. „Kompresja prefiksu klucza” to specyficzny dla domeny sposób kompresji danych i odnosi się do formatu przechowywania kluczy w WiredTiger. Więcej informacji można znaleźć w dokumentacji WiredTiger dotyczącej formatów plików.

Testy wydajności

Do naszych testów wydajności używamy struktury dokumentu opisanej poniżej:

{
   employeeID: <long>,
   firstName: <string>,
   lastName: <string>,
   income: <long>,
   supervisor: {ID: <long>, 'firstName': <string>, 'lastName': <string>;}
}

Do tej konfiguracji dodaliśmy następujące indeksy:

Index 1: db.ensureIndex({'employeeID':1});
Index 2: db.ensureIndex({'lastName':1, 'firstName':1});
Index 3: db.ensureIndex({'income':1});
Index 4: db.ensureIndex({'supervisor.lastName':1, 'supervisor.firstName':1})

Wyniki

W naszym teście wstawiliśmy identyczne dane (około 10 milionów rekordów) do dwóch klastrów – jeden zestaw replik 2.6.x, a drugi MongoDB 3.0 z WiredTiger. Następnie dodaliśmy powyższe indeksy w obu konfiguracjach klastra. Wyniki są dość oszałamiające – w niektórych przypadkach istnieje różnica rzędu wielkości w rozmiarze indeksu!

 Nazwa indeksu Rozmiar indeksu MMAP (MB) Rozmiar indeksu WT (MB)  % Zmniejszenie rozmiaru
{employeeID:1} 230.7 94 59%
{lastName:1, firstName:1} 1530 36 97%
{dochód:1} 230 94 59%
{‘supervisor.lastName’:1, ‘supervisor.firstName’:1} 1530 35 97%

Cała pamięć zapisana na indeksach to pamięć, którą można wykorzystać do buforowania danych, innych indeksów itp. Twój przebieg może się różnić – koniecznie przetestuj swoją konkretną strukturę indeksu. Zmniejszenie rozmiarów indeksów jest znacznie niedostatecznie sprzedawanym ulepszeniem w Mongo 3.0 i może mieć ogromny wpływ na wydajność!


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. W jaki sposób dane w bazie danych MongoDB są przechowywane na dysku?

  2. MongoDB:wyjątek w initAndListen:20 Próba utworzenia pliku blokady w katalogu tylko do odczytu:/data/db, zakończenie

  3. MongoDB $tanh

  4. pymongo:MongoClient lub Połączenie

  5. Stwórz stronę internetową sklepu spożywczego za pomocą Angular, NodeJS, Express i MongoDB