Поведение Table.get (список <Get>получает) - PullRequest
0 голосов
/ 12 июня 2019

Я бы спросил, когда HBase выполняет получение пакетов с заданным списком получения, используя Table.get(List<Get> gets), будет ли он использовать rowkey в качестве индекса для каждого получения? То есть это было бы так же быстро, как сингл Get.

Я спрашиваю так, потому что я имею в виду сканирование и фильтрацию, сканирование с фильтрами, но без startKey / endKey будет сканировать всю таблицу.

1 Ответ

1 голос
/ 12 июня 2019

Scan без startRow / endRow действительно отсканирует всю таблицу, даже с фильтрами.Если вы знаете хотя бы startRow, тогда вы можете избежать сканирования остальной таблицы, например, установив числовой предел строки (чтобы он точно знал, с чего начать и сколько строк обрабатывать макс.).Но если вы не знаете startRow, то это плохо.Важно помнить, что вам не нужен ВЕСЬ startRow ключ.Вы можете сделать частичное.Например, если ваши ключи строк имеют идентификаторы GUID, если вы установите startRow как «FF», он будет пропускать все до него и начинаться с «FF001 ...» или чего-либо другого.

Обычно сканирование лучше для полученияпоследовательность строк.Get<list> кажется больше для коллекции несвязанных / непоследовательных строк.

*** ОБНОВЛЕНИЕ: Упс ...

https://github.com/apache/hbase/blob/branch-2.0/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Table.java

  default Result[] get(List<Get> gets) throws IOException {
    throw new NotImplementedException("Add an implementation!");
  }

У меня есть убежищене использовал его раньше, но вот как это выглядит в 2.0.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...