2013-07-22 9 views
10

Mam tabelę HBase gdzie piszę klawiszy wierszy jak:HBase rząd kluczowy projekt dla monotonicznie rosnących kluczy

<prefix>~1 
<prefix>~2 
<prefix>~3 
... 
<prefix>~9 
<prefix>~10 

Skanowanie na powłoce HBase daje wynik:

<prefix>~1 
<prefix>~10 
<prefix>~2 
<prefix>~3 
... 
<prefix>~9 

Jak powinien zostać zaprojektowany klucz rzędu, aby wiersz z kluczem <prefix>~10 był ostatni? Szukam niektórych zalecanych sposobów lub sposobów, które są bardziej popularne przy projektowaniu kluczy wierszy HBase.

Odpowiedz

1

Naprawiono klucze długości są naprawdę zalecane, jeśli to możliwe. Bytes.toBytes (Long value) może być użyty do pobrania tablicy bajtów z licznika. Będzie sortował również dla pozytywnych longs mniej niż Long.MAX_VALUE.

5

HBase przechowuje rowkeys w porządku leksykograficznym, więc można spróbować użyć tego schematu ze stałej długości rowrey:

<prefix>~0001 
<prefix>~0002 
<prefix>~0003 
... 
<prefix>~0009 
<prefix>~0010 

Należy pamiętać, że również należy wykorzystać losowych przedrostki aby uniknąć regionu hot-plamienie (gdy jeden region akceptuje większość zapisów, podczas gdy inne regiony są bezczynne).

21

Jak powinien zostać zaprojektowany klucz rzędu, tak aby rząd z kluczem ~ 10 był ostatni?

W ten sposób widzisz wynik skanowania, ponieważ klawisze wierszy w HBase są sortowane lexicographically niezależnie od zamówienia reklamowego. Oznacza to, że są one sortowane na podstawie ich reprezentacji ciągów. Pamiętaj, że klawisze wiersza w HBase są traktowane jako tablica bajtów z reprezentacją ciągów znaków. Przycisk wiersza najniższego rzędu pojawia się jako pierwszy w tabeli. Dlatego 10 pojawia się przed 2 i tak dalej. Aby uzyskać więcej informacji na ten temat, zobacz sekcje Wiersze na temat tego .

Po opuszczeniu pad liczb całkowitych z zerami ich naturalna kolejność pozostaje nienaruszona podczas sortowania leksykograficznego i dlatego widzisz kolejność skanowania taką samą, jak kolejność włożenia danych. Aby to zrobić, możesz zaprojektować swoje klawisze wiersze zgodnie z sugestią @shutty.

Szukam niektórych zalecanych sposobów lub sposobów, które są bardziej popularne przy projektowaniu kluczy rzędu HBase.

Istnieją pewne ogólne wytyczne, których należy przestrzegać w celu opracowania dobrego projektu:

  • utrzymać rowkey tak małe, jak to możliwe.
  • Unikaj używania monotonicznie rosnących klawiszy wierszy, takich jak znacznik czasu itp. Jest to kiepski projekt shemma i prowadzi do hotspottingu RegionServer. Jeśli nie możesz tego uniknąć, np. Mieszania lub solenia, aby uniknąć hotspottingu.
  • Unikaj używania ciągów jako klawiszy, jeśli to możliwe. Reprezentacja łańcuchowa liczby zajmuje więcej bajtów w porównaniu do jej liczby całkowitej lub długiej. Na przykład: Długi to 8 bajtów.W tych ośmiu bajtach można zapisać niepodpisaną liczbę do 18 444 774 070 7055 615. Jeśli zapisałeś ten numer jako ciąg - przypuszczając bajt na znak - potrzebujesz prawie 3x bajtów.
  • Użyj jakiegoś mechanizmu, takiego jak mieszanie, aby uzyskać równomierny rozkład rzędów w przypadku, gdy twoje regiony nie są równomiernie obciążone. Aby to osiągnąć, możesz również utworzyć podzielone tabele.

Zobacz ten link, aby uzyskać więcej informacji na temat projektu wiersza.

HTH