2013-03-14 10 views
5

Pochodzę z tła RDBMS i zacząłem ostatnio czytać HBase. Rozumiem, że nie istnieją żadne indeksy średnich i nie powinniśmy starać się zrobić coś takiego:HBase: Row key size

SELECT * FROM tbl_photo WHERE album_id = 1969 

Zastanawiałem się, czy wszystkie z informacji mogą być wykorzystywane do tworzenia samego wiersza klucz.

Na przykład. Użytkownik ma swoje rejestry e-mail z dostawcą usług udostępniania zdjęć. Użytkownik może utworzyć album (można utworzyć wiele albumów) i przesłać do niego zdjęcia. Inny użytkownik komentuje zdjęcia, a niektórzy użytkownicy głosują w górę/w dół komentarza.

Klucz do identyfikacji takiego głosowania może wyglądać tak: email:album:ts:photo:ts:comment:ts:vote:ts. Czy ten klucz ma sens? Czy jest dłuższy niż zalecany? (ts stands timestamp)

Odpowiedz

7

W pewnym sensie ma to sens, ale co zapisałbyś w swoich kolumnach, gdyby wszystkie informacje znajdowały się w twoim kluczu? Czy zawsze będziesz w stanie utworzyć ten klucz z perspektywy aplikacji klienta? Projekt schematu HBase jest dość trudnym tematem i zdecydowanie powinieneś obejrzeć ten film zeszłorocznego HBaseCon, jeśli masz trochę wolnego czasu: HBase Schema Design by Ian Varley.

Jeśli chodzi o mnie, najważniejszą rzeczą, o której należy pamiętać przy projektowaniu klucza wiersza HBase, jest "Jak mogę odzyskać moje dane?".

Jeśli (jak w przykładzie) chcą odzyskać zdjęcia z określonego albumu, to dlaczego nie zrobić czegoś Softkey jak email:album i niech różne rodziny kolumn przechowywać swoje zdjęcia, komentarze ...

Teraz, gdy robisz to w ten sposób i chcesz odzyskać określone zdjęcie, musisz przeskanować wszystkie albumy. Aby temu zapobiec, można zamiast tego użyć klucza email:picture jako klucza, ale to powoduje powstanie tego samego problemu na odwrót. Możesz również użyć email:album:picture, ale jeśli chcesz uzyskać cały obraz z określonego albumu, powinieneś znać identyfikatory zdjęć lub nie będziesz w stanie tworzyć swoich kluczy.

Z drugiej strony, jeśli puszka użytkownik na przykład mieć tylko 2000 zdjęć a następnie za pomocą email:picture lub email:album jako klucz i określając filtr kolumny dla album lub picture nie będzie problemu tam HBase będzie pętli maksymalnie 2000 wierszy która nie trwa tak długo.

W zależności od wersji oprogramowania HBase można zaimplementować indeks pomocniczy za pomocą numeru FuzzyRowFilter.