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

Dlaczego nazwy kluczy są przechowywane w dokumencie w MongodDB?

To, o czym mówisz, jest często nazywane „kompresjami klawiszy”*. Istnieje kilka powodów, dla których nie został on zaimplementowany:

  1. Jeżeli chcesz to zrobić, obecnie możesz to zrobić dość łatwo na poziomie aplikacji/ORM/ODM.
  2. Nie we wszystkich przypadkach jest to przewaga wydajności** — pomyśl o kolekcjach z wieloma nazwami kluczy i/lub nazwami kluczy, które bardzo różnią się między dokumentami.
  3. Może nie zapewnić wymiernej przewagi wydajności**, dopóki nie będziesz mieć milionów dokumentów.
  4. Jeśli serwer to zrobi, pełne nazwy kluczy nadal muszą być przesyłane przez sieć.
  5. Jeśli skompresowane nazwy kluczy są przesyłane przez sieć, czytelność naprawdę cierpi przy użyciu konsoli javascript.
  6. Skompresowanie całego dokumentu JSON może zaoferować oferuje jeszcze lepszą przewagę wydajności.

Podobnie jak w przypadku wszystkich funkcji, istnieje analiza kosztów i korzyści wdrożenia, a (przynajmniej do tej pory) inne funkcje oferują więcej „opłaty za grosze”.

Pełna kompresja dokumentu jest [rozważana][1] dla przyszłej wersji MongoDB. dostępne od wersji 3.0 (patrz poniżej)

* Tablica wyszukiwania nazw kluczy w pamięci jest w zasadzie szczególnym przypadkiem kompresji w stylu LZW — to mniej więcej to, co robi większość algorytmów kompresji.

** Kompresja zapewnia zarówno przewagę przestrzeni, jak i wydajność. Mniejsze dokumenty oznaczają, że na IO można odczytać więcej dokumentów, co oznacza, że ​​w systemie ze stałym IO można odczytać więcej dokumentów na sekundę.

Aktualizacja

MongoDB w wersjach 3.0 i nowszych ma teraz pełną funkcję kompresji dokumentów dzięki WiredTiger silnik pamięci masowej.

Dostępne są dwa algorytmy kompresji:snappy i zlib . Intencją jest, aby zgrabny był najlepszym wyborem dla wszechstronnej wydajności, a zlib był najlepszym wyborem dla maksymalnej pojemności pamięci masowej.

W moich osobistych (nienaukowych, ale związanych z projektem komercyjnym) eksperymentach, szybka kompresja (nie ocenialiśmy zlib) oferowała znacznie lepszą gęstość pamięci masowej bez zauważalnych kosztów wydajności netto. W rzeczywistości w niektórych przypadkach wydajność była nieco lepsza, mniej więcej zgodnie z moimi wcześniejszymi komentarzami/prognozami.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak warunkowo zmienić dokument w mongo?

  2. Utwórz drzewo węzłów z tabelą rekurencyjną za pomocą Express i Mongo

  3. ActionDispatch::Routing::RouteSet#call Rails 4.1 bardzo wolno

  4. MongoDB $i zapytanie operatora w PHP

  5. meteor:jak mogę wykonać kopię zapasową mojej bazy danych mongo