Разные столбцы для каждой строки в HBase? - PullRequest
0 голосов
/ 21 февраля 2019

В моей таблице HBase каждая строка может иметь столбцы, отличные от других строк.Например;

ROW                       COLUMN
1-1040                    cf:s1
1-1040                    cf:s2
1-1043                    cf:s2
2-1040                    cf:s5
2-1045                    cf:s99
3-1040                    cf:s75
3-1042                    cf:s135

Как видно выше, каждая строка имеет столбцы, отличные от других строк.Поэтому, когда я запускаю запрос на сканирование следующим образом:

scan 'tb', {COLUMNS => 'cf: s2', STARTROW => '1-1040', ENDROW => '1-1044'}

Я хочу получить значения cf: s2 , используя запрос выше.Но возникает ли какая-либо проблема с производительностью из-за того, что в каждой строке есть разные столбцы?

Другой вариант;

ROW                       COLUMN
1-1040-s1                 cf:value
1-1040-s2                 cf:value
1-1043-s2                 cf:value
2-1040-s5                 cf:value
2-1045-s99                cf:value
3-1040-s75                cf:value
3-1042-s135               cf:value

В этом варианте, когда я хочу получить s2 значения между 1-1040 и 1-1044, я выполняю этот запрос для этого;

scan 'tb', {STARTROW => '1-1040s2', ENDROW =>'1-1044', FILTER => "RowFilter (=, 'substring: s2')"}

Когда я хочу получить значения s2 , какой вариант лучше использовать вчитать производительность?

1 Ответ

0 голосов
/ 21 февраля 2019

HBase хранит все записи для данного семейства столбцов в одном файле, поэтому сканирование должно выполняться по всем парам ключ-значение, даже если вы применяете фильтр.Это верно для обоих способов хранения данных, которые вы предлагаете.

Для оптимальной производительности этого конкретного сканирования вы должны рассмотреть вопрос о сохранении данных s2 в другом семействе столбцов.Внутри HBase будет хранить ваши данные следующим образом:

Один файл:

1-1040                    cf1:s1
2-1040                    cf1:s5
2-1045                    cf1:s99
3-1040                    cf1:s75
3-1042                    cf1:s135

Другой файл:

1-1040                    cf2:s2
1-1043                    cf2:s2

Затем вы можете запуститьсканирование всего за cf2, и HBase будет читать только данные, содержащие s2, что значительно ускоряет работу.

scan 'tb', {COLUMNS => 'cf2', STARTROW=>'1-1040s2', ENDROW=>'1-1044'}

Замечания:

  • Рекомендуется иметь толькодва или три семейства столбцов на таблицу, поэтому вам не следует реализовывать это, если вы хотите выполнить этот запрос для s5, s75 и т. д. В этом случае ваш вариант составного rowkey лучше, так как HBase нужно только смотреть на rowkey, а не классификаторы столбцов.
  • Это зависит от того, какие именно запросы вы будете выполнять и как часто вы будете их запускать.Это самый быстрый способ получить значения, связанные с s2, но может не быть быстрым для других запросов.
...