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

koszt kluczy w bazie dokumentów JSON (mongodb, elasticsearch)

Poprawnie zauważyłeś, że dokumenty będą miały inny rozmiar. Więc zaoszczędzisz co najmniej 15 bytes na dokument (60% dla podobnych dokumentów), jeśli zdecydujesz się na przyjęcie drugiego schematu. Skończy się to na mniej więcej 140MB za twoje 10 million dokumentacja. Daje to następujące korzyści:

  • Oszczędności na dyskach twardych. Jedynym problemem jest to, że patrząc na ceny obecnych dysków twardych, jest to w większości bezużyteczne.
  • Oszczędzanie pamięci RAM. W porównaniu z dyskami twardymi może to być przydatne do indeksowania. W mongodb zestaw indeksy powinien zmieścić się w pamięci RAM, aby uzyskać dobry wydajność . Więc jeśli będziesz miał indeksy na tych dwóch polach, nie tylko zaoszczędzisz 140MB miejsca na dysku, ale także 140MB potencjalnej przestrzeni RAM (co jest faktycznie zauważalne).
  • I/O . Wiele wąskich gardeł powstaje z powodu ograniczeń systemu wejścia/wyjścia (ograniczona jest prędkość odczytu/zapisu z dysku). W przypadku Twoich dokumentów oznacza to, że ze schematem 2 możesz potencjalnie czytać/zapisywać twice as many documents na 1 sekundę.
  • sieć . W wielu sytuacjach sieć jest nawet znacznie wolniejsza niż IO, a jeśli serwer DB znajduje się na innej maszynie, to serwer aplikacji dane muszą być przesyłane przez sieć. Będziesz także mógł wysłać dwa razy więcej danych.

Po omówieniu zalet, muszę powiedzieć Wam wadę małych kluczy:

  • czytelność bazy danych. Kiedy wykonujesz db.coll.findOne() i widzi {_id: 1, t: 13423, a: 3, b:0.2} dość trudno jest zrozumieć, co dokładnie jest tutaj przechowywane.
  • czytelność aplikacji podobnie z bazą danych, ale przynajmniej tutaj możesz mieć rozwiązanie. Z logiką mapowania, która przekształca currentDate do c i price do p możesz napisać czysty kod i mieć krótki schemat.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak rekursywnie generować dokumenty Mongodb za pomocą sterownika mongocxx c++?

  2. Dane geoprzestrzenne $w obrębie bieżącej wartości pola dokumentu

  3. Kompleksy Mongoose (asynchroniczne) wirtualne

  4. Nie można uzyskać dostępu do kolekcji z powłoki — SyntaxError:missing; przed oświadczeniem (powłoka)::1

  5. DateTime z MongoDB/Mongoid i Rails 3 nie zapełnia się