Я пытаюсь выполнить поиск по нескольким префиксам в Google Cloud Bigtable с помощью Python SDK. Я использую read_rows
, и я не вижу хорошего способа явного поиска по префиксу.
Мой первый вариант - RowSet
+ RowRange
. Я тестирую три запроса, и время, которое я получаю, составляет ~ 1,5 с, ~ 3,5 с и ~ 4,2 с, что на порядок медленнее, чем поиск с Node SDK (который имеет фильтр опция) ~ 0,19, ~ 0,13, ~ 0,46.
Второй вариант использует RowFilterChain
+ RowKeyRegexFilter
. Производительность ужасна для двух запросов: ~ 3,1 с, ~ 70 с, ~ 75 с ~ 0,124 с, ~ 72 с, ~ 69 с. Похоже, что он делает полное сканирование. Это раздел кода:
regex = f'^{prefix}.*'.encode()
filters.append(RowKeyRegexFilter(regex))
Мой третий вариант - использование альтернативного SDK на основе Happybase, который имеет фильтрацию префиксов. С этим я получаю ~ 36 с, ~ 3 с, ~ 1 с ~ 0,4, ~ 0,1, ~ 0,17. Первый запрос включает несколько префиксов, и, похоже, он не поддерживает множественную фильтрацию в одном запросе, поэтому я выполняю столько же запросов, сколько префиксов, а затем объединяю итераторы. Два других, похоже, используют префиксный фильтр.
ОБНОВЛЕНИЕ : я удалил первый раз, потому что произошла ошибка со средой. После того, как все сделано правильно, времена для диапазона запросов неплохие, но, похоже, есть место для улучшения, поскольку тесты Happybase все еще быстрее, когда они используют поиск по префиксам.
Буду признателен за помощь в использовании нескольких поисков по префиксам в Happybase или фактического поиска по префиксам в основном Python SDK.