Оболочка HBase почти в 100 раз быстрее конечной точки для префиксного фильтра
Если я запускаю сканирование с использованием фильтра префиксов в оболочке HBase, я получаю ответ менее чем за 1 секунду, независимо от того, что я использую для префикса. (0 против 9 или "a" против "z" не имеет значения в скорости ответа).
Однако, когда я делаю тот же запрос из библиотеки Microsoft HBase (в C#), получение ответа может занять до 90 секунд. Интересно, что если я выберу префикс ближе к 0, он будет быстрее, чем дальше я перейду от 0, тем дольше это займет. ("a" быстрее, чем "f" в качестве фильтра префиксов).
Не знаете, как определить, что оболочка делает иначе, чем запрос restful, или как сделать запрос restful более производительным.
Некоторые детали:
- В этой таблице чуть более 20 000 000 записей
- Ключ строки задан как [guid]_[обратная временная метка], например, a6fc9620-5ff0-41c0-9ed9-660bc3fbb65c_9223370501253811889
Любые мысли о том, что я должен искать или пытаться улучшить запрос API остальных?
1 ответ
Оказывается, это не проблема. Я не выполнял те же команды в оболочке, а остальные API, как я думал.
В остальном API я давал два фильтра, фильтр страницы и фильтр префикса.
На оболочке HBase я работал
scan 'beacon', {STARTROW => 'ff', FILTER => "PageFilter(25)"}
STARTROW - это не то же самое, что префиксный фильтр. На самом деле он делает что-то большее, чем установка полного ключа начала строки и, таким образом, делает сканирование эффективным, так как оно не пересекает всю таблицу.
Оказывается, это то, что я должен был делать в вызове остальных API. Когда я устанавливаю начальную и конечную строку в дополнение к фильтру префикса и фильтру страницы, он работает быстро и как ожидалось.
Должен ли я использовать префиксный фильтр или сканирование диапазона строк в HBase