Google BigTable
Geneza powstania
Ilod danych - Kopie witryn, dane satelitarne, dane uytkownikw, email, etc. Brak komercyjnego systemu tej wielkoci - Koszta uytkowania powyszego gdyby istnia - Moliwe, e nie posiadaby take odpowiednich rozwizao Astronomiczna liczba zapytao.
Na pocztku roku 2004 Google rozpoczyna prace nad Bigtable. Gwne cele tego projektu to: 1. Skalowalnod do petabajtw danych na tysicach komputerw 2. Mnogod zastosowao (Bigtable znajduje aktualnie zastosowanie w wikszoci serwisw Google) 3. Wysoka wydajnod 4. Wysoka stabilnod
W skrcie
Wartoci kadej z krotek jest ciag bajtw. (row:string, column:string, time:int64) > string
Na klucz krotki skada sie:
Identyfikator wiersza, wg ktrego dane sa sortowane. Rodzina kolumn (ang. column family ) - przypomina dobrze znan kolumn z relacyjnych baz danych. Liczba rodzin kolumn powinna byd niewielka (co najwyej setki) i rzadko si zmieniad. Dane przechowywane w rodzinie kolumn sa tego samego typu. Kwalifikator kolumny (ang. qualifier ) - w jednej rodzinie kolumn moe byd nieskooczenie wiele kwalifikatorw. Kwalifikator, wraz z nazwa rodziny, tworzy klucz kolumny, ktrego skadnia jest nastpujca: family:qualifier. Znacznik czasowy (timestamp) - umoliwia wersjonowanie danej krotki(np. mona trzymad dane nie starsze ni 3 dni, lub ich 8 ostatnich wersji).
Organizacja danych
Dane przechowywane s w plikach w specjalnym formacie o nazwie SSTable SSTable to posortowane odwzorowanie z kluczy do ich wartoci, gdzie zarwno klucze jak i wartoci s po prostu cigami bajtw.
Organizacja danych
Pliki w formacie SSTable s podzielone na bloki po 64 KB kady. Na koocu pliku znajduje sie indeks blokw, ktry po otwarciu pliku jest w caoci kopiowany do pamici. Indeks ten jest zbiorem par nastpujcej postaci: - (ostatni klucz w bloku, pooenie bloku) Odczyt wartoci krotki z danego pliku odbywa sie poprzez wyszukanie przedziau, w ktrym znajduje sie dana wartod klucza - tj. zdefiniowanie waciwego bloku wykorzystywany jest zwyky algorytm binarny) oraz na odczytaniu tego bloku z dysku.
Organizacja danych
SSTable s zgrupowane w kolejnym typie danych zwanym Tablet. Dane s podzielone na zbiory o wielkosci ok. 100 MB. S to przedziay (tablets) zdefiniowane przez klucz wiersza pierwszej i ostatniej krotki. Pocztkowo kada tabela skada sie z jednego przedziau, ktry rozpina wszystkie klucze. W momencie, gdy przedzia staje sie zbyt duy (jego rozmiar przekracza 200 MB), dzieli sie on na dwa przedziay ze rodkowym kluczem jako miejscem podziau. Nowy przedzia zostanie przydzielony do nowego serwera przez serwer gwny.
Bigtable wykorzystuje inne komponenty infrastruktury Google.
Google File System (GFS) - do przechowywania logw oraz plikw z danymi. Chubby - mechanizm blokad oraz przechowywanie maych plikw.
GFS
GFS to rozproszony system plikw, ktry przez Bigtable jest wykorzystywany do przechowywania logw oraz plikw z danymi. GFS to jeden serwer gwny i kilkaset do kilku tysicy serwerw czstkowych (chunk-servers) Serwer gwny (master ) przechowuje dane o pooeniu blokw i monitoruje dostpnod chunkserwerw. Kady blok jest powielany w co najmniej 3 kopiach.
Chubby
Chubby to odporny na bdy zarzdca mechanizmu blokad dla rozproszonych systemw (jest wykorzystywany przez GFS i Bigtable). Suy take do przechowywania maych plikw. Do jednego klastra jest przypisany jeden Chubby. Odpornod na awarie jest uzyskiwana przez replikacje na serwis ten przypada piec replik, z ktrych jedna jest wybierana do aktywnej obsugi zapytao (pozostae repliki na zapytania klientw odpowiadaj, adresem IP aktywnej repliki). Serwis przestaje dziaad, gdy wikszod replik jest niedostpna.
Tablet servers
kady serwer przedziaw jest odpowiedzialny za obsug dao zapisu i odczytu od klientw (dane nie przechodz przez serwer gwny) jednemu serwerowi moe byd przydzielonych wiele tysicy przedziaw. nowe serwery przedziaw mog byd atwo doczane lub odczane od klastra. Mona dziki temu szybko reagowad na zmiany obcienia
Serwer gwny
Gwne zadania serwera gwnego to:
zarzdzanie przedziaami kluczy - przydzielane ich do odpowiednich serwerw wykrywanie doczenia i odczenia serwera przedziaw od klastra rozpraszanie obcienia pomidzy serwery usuwanie niepotrzebnych plikw z GFS
Odnajdywanie przedziaw
Root Tablet zawiera lokalizacje wszystkich przedziaw wchodzcych w skad specjalnej tabeli zawierajcej metadane o przedziaach. Jest to tak naprawd pierwszy przedzia tej tabeli. Jest on traktowany specjalnie jedynie w tym sensie, ze nigdy nie podlega podziaowi dla zapewnienia co najwyej trj-poziomowej hierarchii. tabela metadanych zawiera lokalizacje przedziau (list plikw w formacie SSTable, oraz wskaniki do plikw dziennika), ktry jest definiowany przez nazw tabeli, do ktrej naley przedzia oraz jego koocowy klucz. przedziay w tabeli metadanych maja rozmiar co najwyej 128 MB co, przy redniej wielkoci wiersza w tej tabeli wynoszcej 1KB, umoliwia zaadresowanie 234 przedziaw (lub 261 danych przy rozmiarze przedziau wynoszcym 128MB)
Przykadowy kod aktualizacja danych
// Open the table Table T = OpenOrDie (/ bigtable/web/webtable ); // Write a new anchor and delete an old anchor RowMutation r1 (T, com.cnn.www); r1 . Set ( anchor:www.cspan.org , CNN ) ; r1 . De l e t e (anchor:www. abc.com ) ; Operation op ; Apply (&op , &r1 ) ;
Przykadowy kod wczytanie danych
Scanner scanner(T); ScanStream *stream; stream = scanner.FetchColumnFamily("anchor"); stream->SetReturnAllVersions(); scanner.Lookup("com.cnn.www"); for (; !stream->Done(); stream->Next()) { printf("%s %s %lld %s\n", scanner.RowName(), stream->ColumnName(), stream->MicroTimestamp(), stream->Value()); }