2014-02-03 2 views
9

Я знаю, что фильтр с нечеткой строкой принимает два параметра, первым из которых является ключ строки, а второй - нечеткая логика. Что я понял из соответствующего класса java FuzzyRowFilter, то фильтр оценивает текущую строку и пытается вычислить следующий более высокий ключ строки, который будет соответствовать нечеткой логике, и он перескакивает несогласованные ключи.Hbase FuzzyRowFilter, как работает прыжок с ключами

Я не могу понять следующие вещи

Как сканирование подскакивает определенные клавиши строки? Использует ли он Get, чтобы получить и сравнить текущий ключ строки. Как сканировать узнать, где находится следующий соответствующий ключ строки? не делая полную проверку (если он прыгает)

ответ

10

Вы все правильно поняли.

Для тех, кто приехал сюда из веб-поиска здесь две ссылки, которая объясняет, как строка пропуска могут быть использованы в целом и, как это делается в FuzzyRowFilter в частности

  1. HBase FuzzyRowFilter: Alternative to Secondary Indexes
  2. Filters in HBase (or intra row scanning part II)

Если фильтр знает, что у него последний ключ и ему нужен пропуск:

  1. Фильтр возвращает SEEK_NEXT_USING_HINT
  2. Регион Сервер вызывает getNextCellHint который возвращает предложенный Cell
  3. Region Сервер выполняет точно такую ​​же процедуру поиска ключа, как это было сделано для первого ключа в scan - он проверяет доступные HFiles проверка, если ключ в вопросе там
    1. область сервера считывает раздел «трейлер» каждый файл, чтобы получить смещение metadatablocks
    2. региона Сервер читает Мету и FileInfo типов блоков метаданных, чтобы избежать чтений двоичных данных из hfile, если нет никаких шансов, что ключ (Bloom Filter), если файл слишком старый (Max SequenceId), или если файл слишком новый (Timerange), чтобы содержать то, что мы ищем.Подробнее о HFile format here
    3. Если ключ находиться внутри HFile, область Сервер использует блок данных сегментов индекса для вычисления смещения для расположения блока данных с имеет ключ в вопросе
    4. если блок данных с помощью ключа происходит уже быть в кэш блоков сервера область, следующий шаг пропускается
    5. блок данных считывается из HFile
    6. область Сервер наконец сканирует ключи, один за другим, пока не попадает в цель один
  4. найденного ключа, и, возможно, целая строка (в зависимости от фильтра), передается код фильтра
  5. Повторы всего цикла
0

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

Теперь все, что ему нужно сделать, это выбрать ключи строк, а затем просмотреть неопределенные части ключа.

например. если диапазон ключевого вашей строки 123456689 - 123456889 , то ваша нечеткая фильтр строки будет 123456??? - Что здесь происходит, что нечеткий фильтр строки переходит к строке, которая начинается с 123456, диапазоном нечеткого фильтра строки будет выглядеть следующим образом 123456000 - 123456999

Смежные вопросы