Co to jest SSTable?

Odpowiedzi:

105

Sorted Strings Table (pożyczony z Google) to plik par klucz / wartość ciągów, posortowanych według kluczy

Schildmeijer
źródło
4
Dzięki za kolejną doskonałą odpowiedź SO Cassandra! BTW, czy widziałeś to pytanie: stackoverflow.com/questions/2573106/ ...
knorv
Czy jest ogólnie niezmienna?
Dean J
1
tak, sstable są niezmienne dzięki projektowi - co jest niesamowitą funkcją
Schildmeijer
Jak więc można to zarówno uporządkować, jak i niezmienne?
xjcl
56

„SSTable zapewnia trwałą, uporządkowaną, niezmienną mapę od kluczy do wartości, w której zarówno klucze, jak i wartości są dowolnymi ciągami bajtów. Udostępniane są operacje wyszukiwania wartości skojarzonej z określonym kluczem i iteracji po wszystkich parach klucz / wartość w określony zakres kluczy. Wewnętrznie, każdy SSTable zawiera sekwencję bloków (zwykle każdy blok ma rozmiar 64 KB, ale jest to konfigurowalne). Indeks bloku (przechowywany na końcu SSTable) jest używany do lokalizowania bloków; indeks jest ładowany do pamięci po otwarciu SSTable. Wyszukiwanie można przeprowadzić za pomocą pojedynczego wyszukiwania dysku: najpierw znajdujemy odpowiedni blok, wykonując wyszukiwanie binarne w indeksie w pamięci, a następnie odczytując odpowiedni blok z dysku. Opcjonalnie SSTable można całkowicie zmapować do pamięci, co pozwala nam na wykonywanie wyszukiwań i skanów bez dotykania dysku."

zhouchonghz AT gmail.com
źródło
4
„bez dotykania dysku” -> „bez świadomości, że dysk jest dotykany”. Mapowane w pamięci operacje we / wy to bardzo przydatna technika, ponieważ deleguje rzeczywiste operacje we / wy do systemu operacyjnego, przy założeniu, że może dobrze wykonać zadanie buforowania (zwłaszcza gdy kilka procesów korzysta z tego samego pliku). Ale ma tę wadę, że nie masz nad nim kontroli. Jeśli strona nie jest rezydentna w pamięci, wątek zostanie zablokowany i nie będzie mógł wykonywać innych operacji; w przeciwieństwie do „async IO”, gdzie można zarejestrować wywołanie zwrotne i wykonywać inne czynności w tym samym wątku, podczas gdy IO jest w toku.
ithkuil
2
@ithkuil: Możesz absolutnie kontrolować operacje we / wy mapowane w pamięci przynajmniej do tego stopnia, że ​​jesteś w stanie zapewnić, że określone strony są w pamięci lub zostały zapisane na dysku (wciąż jest miejsce na strony, które nie są gwarantowane pamięć, ale bardzo dobrze mogłoby być). Na tym właśnie polegają cudowne rzeczy, takie jak mlock (), msync () i MAP_LOCKED. Możesz także uzyskać informacje o tym, co aktualnie jest, a co nie jest stronicowane za pomocą funkcji mincore ().
Christopher Smith
2
@ChristopherSmith: tak, masz rację, są sposoby, aby to kontrolować. Zwykle jest jednak używany do krytycznych sekcji wydajności (w czasie rzeczywistym) lub problemów związanych z bezpieczeństwem (takich jak unikanie zamiany hasła w pamięci na dysku). Pliki mapowane w pamięci są bardzo przydatne właśnie dlatego, że nie musisz decydować, ile z nich ma być przechowywanych w pamięci; w przeciwnym razie możesz po prostu odczytać cały plik z pamięci bez mmapa i osiągnąć ten sam efekt. W rzeczywistości po prostu przeszukałem kod Cassandry; jedyne wywołanie jest mlockall(MCL_CURRENT);wykonywane podczas uruchamiania. Zobacz także: goo.gl/AEgPM
ithkuil
4
Powyższy cytat pochodzi z artykułu BigTable .
ShreevatsaR
4

Tablet jest przechowywany w postaci SSTables.

SSTable (bezpośrednio mapowane na GFS) to niezmienna pamięć masowa oparta na kluczu i wartości. Przechowuje fragmenty danych, każdy o wielkości 64 KB.

Definicje:

  • Indeks kluczy: klucz i lokalizacja początkowa
  • Chunk to jednostka pamięci w GFS, zarządzanie replikami odbywa się według porcji
manjit singh
źródło
3
  • SSTable (ang. Sorted Strings Table) to plik par łańcuchów klucz / wartość, posortowanych według kluczy.

  • SSTable zapewnia trwałą, uporządkowaną niezmienną mapę z kluczy do wartości, gdzie zarówno klucze, jak i wartości są dowolnymi ciągami bajtów.

  • Wewnętrznie każdy plik SSTable zawiera sekwencję bloków (zwykle
    każdy blok ma rozmiar 64 KB , ale można to skonfigurować).

miksiii
źródło