2010-04-04 20 views
72

W terminologii BigTable/GFS i Cassandra, jaka jest definicja SSTable?Co to jest SSTable?

+0

Jest to świetny wstęp do SSTables postu: http://www.igvita.com/2012/02/06/sstable-and-log-structured-storage-leveldb/ –

Odpowiedz

74

Sort Struny stołowy (zapożyczone z google) jest plikiem o klucz/wartość pary strun, klasyfikowane według kluczy

+2

Dzięki za kolejny doskonały SO Cassandra odpowiedź! BTW, czy widziałeś to pytanie: http://stackoverflow.com/questions/2573106/what-are-the-alternative-ways-to-model-mm-relations-in-cassandra – knorv

+0

Czy jest ogólnie niezmienny? –

+0

tak, sstables są niezmienne od projektu - co jest niesamowitą cechą – Schildmeijer

41

„An SSTable zapewnia trwałą, uporządkowaną mapa niezmienny z kluczy do wartości, gdzie oba klucze i wartości dowolne ciągi bajtów Operacje są wykonywane w celu wyszukania wartości skojarzonej z określonym kluczem i iteracji po wszystkich parach klucz/wartość w określonym zakresie klucza Wewnętrznie, każda SSTable zawiera sekwencję bloków (zazwyczaj każdy blok ma rozmiar 64 KB , ale jest to konfigurowalne) Indeks bloku (przechowywany na końcu SSTable) służy do lokalizowania bloków, indeks jest ładowany do pamięci po otwarciu Sstable. znajdź odpowiedni blok, wykonując wyszukiwanie binarne w in-memor y indeks, a następnie odczytanie odpowiedniego bloku z dysku. Ewentualnie SSTable można całkowicie odwzorowane w pamięci, która pozwala na wykonanie wyszukiwań i skanuje bez dotykania twardy „.

+4

"bez dotykania dysku" -> "bez świadomości, że dysk jest dotykany". Mapowana pamięć IO jest bardzo przydatną techniką, ponieważ przekazuje rzeczywistą wartość IO do systemu operacyjnego, zakładając, że może wykonać dobrą robotę przy buforowaniu (szczególnie, gdy kilka procesów współdzieli ten sam plik). Ale ma tę wadę, że nie masz nad nim kontroli. Jeśli strona nie jest rezydentna w pamięci, wątek będzie blokował i nie może wykonywać innych operacji; kontrastuje to z "asynchronicznym IO", w którym można zarejestrować wywołanie zwrotne i wykonać inne czynności w tym samym wątku, podczas gdy OI oczekuje. – ithkuil

+0

@ithkuil: Możesz całkowicie kontrolować odwzorowanie pamięci IO co najmniej do tego stopnia, że ​​możesz upewnić się, że niektóre strony są w pamięci lub zostały zatwierdzone na dysku (nadal jest miejsce do przeglądania stron, które nie są gwarantowane w pamięci, ale może być bardzo dobrze). To właśnie robią cudowne rzeczy, takie jak mlock(), msync() i MAP_LOCKED.Możesz również zrozumieć, co aktualnie jest i nie jest stronicowane przez mincore(). –

+1

@ ChristopherSmith: tak masz rację, są sposoby, aby to kontrolować. Zwykle jest on jednak używany do krytycznych sekcji wydajności (w czasie rzeczywistym) lub problemów związanych z bezpieczeństwem (np. Unikanie zamiany hasła w pamięci na dysk). Pliki mapowane w pamięci są bardzo użyteczne właśnie dlatego, że nie musisz decydować, ile z nich ma pozostać w pamięci; w przeciwnym razie można po prostu odczytać cały plik w pamięci bez mmap i osiągnąć ten sam efekt. W rzeczywistości po prostu przejrzałem kod Kasandra; jedynym wywołaniem jest 'mlockall (MCL_CURRENT);' done podczas uruchamiania. Zobacz także: http://goo.gl/AEgPM – ithkuil

3

Tabletka jest przechowywany w postaci SSTables.

SSTable (bezpośrednio mapowane na GFS) jest . klucz-wartość w oparciu niezmienny przechowywanie przechowuje ilości danych, z których każda ma 64KB

Definicje:.

  • indeks kluczy: klucz i lokalizacja począwszy
  • Chunk jest jednostką przechowywania w GFS, zarządzanie repliki są przez kawałka
2
  • SSTable (pol. Sorted Strings Table) to plik z parami klucz/wartość posortowany według kluczy.

  • SSTable zapewnia trwałą, niezmienną nakazał mapę z kluczy do wartości, gdzie oba klucze i wartości są arbitralne ciągi bajtów.

  • Wewnątrz każdej SSTable zawiera sekwencję bloków (zazwyczaj
    każdy blok jest 64 KB wielkości, ale można to zmienić).