2014-09-07 26 views
5

Mam podstawowe pytanie dotyczące użycia FileSystem Chcę użyć osadzonego magazynu KeyValue, który jest zorientowany na pisanie. (Trwałe) Say mój rozmiar wartość a) 10 K b) 1 M i czytać i aktualizacje są równe pod względem liczbyOpis wbudowanego magazynu danych KeyValue kontra FileSystem

Nie mogę po prostu tworzyć pliki zawierające wartości i tam wymienić działając jako klucze.

Nie używaj tak szybko, jak przy użyciu magazynu KeyValue jako LevelDB lub RocksDB.

Czy ktokolwiek może mi pomóc zrozumieć.

Odpowiedz

15

W zasadzie tak, system plików może być używany jako magazyn kluczy i wartości. Różnice występują tylko wtedy, gdy spojrzysz na indywidualne przypadki użycia i ograniczenia w implementacjach.

Nie wdając się w zbyt wiele szczegółów tutaj, istnieje kilka rzeczy, które mogą być bardzo różne:

  • System plików Dzieli dane do stałych bloków wielkości. Dwa pliki zazwyczaj nie mogą zajmować części tego samego bloku. Typowe rozmiary bloków wynoszą 4-16 KiB; możesz obliczyć, ile narzuci twój przykład 10 KiB. Magazyny klucza/wartości mają tendencję do rozliczania mniejszych kawałków danych.
  • Indeksy katalogów w systemach plików często nie są w stanie wydajnie wykonywać iteracji po nazwach plików/kluczach w porządku sortowania. Możesz sprawnie wyszukiwać określony klucz, ale nie możesz pobierać zakresów bez czytania prawie wszystkich pozycji katalogu. Niektóre magazyny kluczy/wartości, w tym LevelDB, obsługują efektywną, uporządkowaną iterację.
  • Niektóre magazyny kluczy/wartości, w tym LevelDB, są transakcyjne. Oznacza to, że możesz połączyć kilka aktualizacji razem, a LevelDB upewni się, że wszystkie te aktualizacje się sprawdzą lub żaden z nich się nie sprawdzi. Jest to bardzo ważne, aby zapobiec niespójności danych. Systemy plików znacznie utrudniają implementację, szczególnie w przypadku wielu plików.
  • Sklepy z kluczem/wartością zwykle starają się zachować ciągłość danych na dysku (aby można było odzyskać dane przy mniejszym poszukiwaniu), podczas gdy nowoczesne systemy plików celowo tego nie robią w plikach. Może to wpłynąć na wydajność raczej poważnie, gdy czyta się wiele zapisów. Jednak nie jest to problemem na dyskach SSD.
  • Podczas gdy niektóre systemy plików oferują funkcje kompresji, zwykle są to pliki na plik lub na blok. O ile widzę, LevelDB kompresuje całe partie nagrań, potencjalnie przynosząc lepszą kompresję (choć stronniczyły one swoją strategią kompresji na wydajność ponad efektywność kompresji).
+0

+1 za tę odpowiedź. bazy danych k/v przechowują dane bardziej zwarte i mają dodatkową warstwę pamięci podręcznej. możesz więc oczekiwać znacznie szybszej wydajności (i dodatkowej funkcjonalności, która może być przydatna dla twojej aplikacji). Ponadto niektóre systemy plików nie są skalowane, jeśli utworzysz wiele plików. – cruppstahl

+1

W celu zapewnienia kompletności, w każdym rozsądnym systemie operacyjnym, dane systemu plików również są buforowane. –

+1

Więc możesz zasugerować, jeśli rozmiar wartości jest duży (powiedzmy 5 MB), a wzór to wygląd, aktualizacja, zapis; używanie sklepu z kv ma sens. Załóżmy również, że tworzenie plików o wielkości 500 K będzie miało zły wpływ na system plików –