Наиболее эффективный RowScan очень большого стола Bigtable

Я ищу самый быстрый способ выполнить сканирование строк очень больших таблиц Bigtable с использованием новейшего API JAVA. Мне нужно сканировать только на основе частичных значений строк (не требуется информация о семействе столбцов / столбцов). Значения строк хорошо распределены, и лексикографическая сортировка Bigtable хорошо подходит для этого варианта использования.

В течение многих лет на эту тему было много ответов, но некоторые из них устарели для более старых версий, а некоторые, похоже, относятся к HBase или к оболочке. Мне нужно специально для Cloud Bigtable и для последних версий JAVA API.

На данный момент, основываясь на моем собственном тестировании, я вижу это как лучший подход:

Scan s = new Scan();
s.setStartRow(startRowKey); // this can also be passed to constructor
s.setStopRow(stopRowKey); // this can also be passed to constructor
s.setRowPrefixFilter(key.getBytes());
s.setFilter(new PageFilter(MaxResult));
s.setFilter(new KeyOnlyFilter());

Но мои вопросы:

1: Есть ли что-то, о чем я не знаю, что я должен делать, чтобы улучшить скорость?

2: есть ли лучший способ ограничить результаты, кроме как через PageFilter()? Т.е. как я могу сказать "вернуть максимум 25 строк"

3: в чем разница между scan.setFilter(new PrefixFilter(rowKey)) а также scan.setRowPrefixFilter(rowKey)

4: преимущество помещения startRow Параметр для сканирования очень ясен, но есть ли преимущество (или недостаток) для endRow параметр как хорошо? особенно если вы предоставляете PageSize() или другой предел измерения

Спасибо за любые отзывы!

1 ответ

Решение

Похоже, ваши фильтры забивают друг друга (KeyOnlyFilter перезапишет PageFilter, вы должны обернуть их в MUST_PASS_ALLFilterList,

  1. Кроме упомянутой выше ошибки, я не могу думать ни о каких других оптимизациях.
  2. Я не верю, что HBase API предоставляет другой способ указать ограничение строки.
  3. В вашем случае не так много. Основная причина использовать PrefilterFilter чтобы иметь возможность связать его вместе с другими фильтрами в FilterList,
  4. Определенно нет недостатка в добавлении endRowНо, в то же время, я не думаю, что здесь есть что-то особенное.
Другие вопросы по тегам