2012-03-05 12 views
9

Dokumentacja Hbase mówi, że należy unikać tworzenia ponad 2-3 rodzin kolumn, ponieważ Hbase bardzo dobrze nie obsługuje więcej niż 2-3 rodzin kolumn. Powodem tego jest zagęszczanie i spłukiwanie, a tym samym IO. Jednak jeśli wszystkie moje kolumny są zawsze wypełnione (dla każdego wiersza), to myślę, że to rozumowanie nie jest tak ważne, więc biorąc pod uwagę, że mój dostęp do kolumn jest całkowicie losowy (chcę uzyskać dostęp do dowolnej kombinacji kolumn) - czy mogę mieć jeden rodzina kolumn - jedna konfiguracja kolumn (skutecznie próbująca uczynić ją czystą kolumnową).Rodzina kolumn Hbase

Istnieje wiele blogów/wiki wyjaśniających to, ale wszystkie wydają się sprzeczne i powodują więcej zamieszania. Po prostu nie wydaje mi się, że jestem w stanie przetrawić fakt, że Hbase preferuje jedną kolumnę rodziny, więc jaki jest sens wywoływania jest magazyn kolumnowy?

Odpowiedz

21

Obecnie (choć oczekuje się, że to się zmieni), wszystkie rodziny kolumn dla regionu zostaną przepłukane. Jest to główny powód, dla którego ludzie mówią "HBase nie radzi sobie dobrze z więcej niż 2 lub 3 rodzinami kolumn". Rozważmy dwie CF, każda z jedną kolumną. Kolumna A: A przechowuje całe teksty stron internetowych. Kolumna B: B przechowuje liczbę słów na stronie. Tak więc za każdym razem, gdy wypróżniamy A: A (co zdarza się częściej, ponieważ dane A: A są znacznie większe), musimy również przejść przez oddzielne rutowanie żonglerka we/wy dla kolumny B: B, nawet jeśli nie ma trzeba - z B: B tylko trzymając numery, mógłbym jechać miesiącami bez spuszczania ich.

Jeśli przechowujesz A i B w tej samej rodzinie kolumn (A: A i A: B), prawdopodobnie zobaczysz znacznie lepszą wydajność we/wy flush, a ponieważ większość czytań HBase pochodzi wyłącznie z memstore, będziesz prawdopodobnie uznają, że prędkości odczytu są równoważne.

Ponadto, a może nawet ważniejsze, jeśli liczebność kolumn jest zupełnie inna, to serwery regionalne będą musiały utrzymywać niepotrzebne, w większości puste pliki dla mniej gęstych rodzin kolumn. To się nigdy nie zmieni.

Wszystko to jest dostępne w HBase Book.

Tak, jak we wszystkich takich sytuacjach wydajnościowych, zmierzyć przed podjęciem decyzji, co to jest "poprawna" ścieżka.

+0

Dzięki za wyjaśnienie! – PrakashT

+0

Więc w moim przypadku, o ile rozumiem, mam dwie opcje: a) Mam wszystkie kolumny w jednej kolumnie rodziny. Będzie to miało wpływ na wydajność, ponieważ w większości przypadków potrzebuję dostępu tylko do 1-2 kolumn, ale przy takim projekcie będę czytał cały wiersz. Chociaż te odczyty będą dystrybuowane na wielu serwerach regionalnych. 2) Rozdzielam moje kolumny w rodzinach tak, aby miały podobną wielkość. – PrakashT

+2

Powinieneś prawdopodobnie przestać martwić się, że czytasz cały wiersz. HBase jest bardzo dobry w czytaniu tylko tego, czego naprawdę potrzebuje. Jeśli komórka, którą chcesz odczytać, znajduje się w pamięci, to HBase w ogóle nie wykona dodatkowego dysku IO. –