Вторичный индекс для HBase
Решение на 100% написано на Java, совместимо с Apache HBase 0.94.8 и имеет открытый исходный код под ASL.
В настоящее время поддерживаются следующие возможности:
Как это работает
Вторичный индекс HBase представляет собой реализацию на стороне сервера с сопроцессорами, которая сохраняет данные индекса в отдельной таблице. Индексирование осуществляется по регионам, а пользовательский балансировщик нагрузки размещает регионы таблицы индексов рядом с регионами фактической таблицы.
Сервер считывает спецификацию индекса, переданную во время создания таблицы, и создаёт таблицу индексов. Для одной пользовательской таблицы будет одна таблица индексов, и вся информация об индексе для этой пользовательской таблицы помещается в одну и ту же таблицу индексов.
Операция Put
Когда строка помещается в таблицу HBase (пользовательскую), сопроцессоры подготавливают и помещают информацию об индексе в соответствующую таблицу индексов. Ключ строки таблицы индексов = ключ начала региона + имя индекса + значение индексированного столбца + ключ строки пользовательской таблицы.
Например: Таблица → tab1, семейство столбцов → cf. Индекс → idx1, cf1:c1 и idx2, cf1:c2. Таблица индексов → tab1_idx (имя пользовательской таблицы с суффиксом «_idx»).
Операция Scan
Для сканирования пользовательской таблицы сопроцессор создаёт сканер в таблице индексов, сканирует данные индекса и ищет точные строки в пользовательской таблице. Эти поиски в HFiles основаны на ключе строки, полученном из данных индекса. Это поможет пропустить блоки, где данные отсутствуют, а иногда можно пропустить и полные HFiles.
Клиентам необходимо передать IndexedHTableDescriptor с именем индекса и столбцами при создании таблицы:
IndexedHTableDescriptor htd = new IndexedHTableDescriptor(usertableName);
IndexSpecification iSpec = new IndexSpecification(indexName);
HColumnDescriptor hcd = new HColumnDescriptor(columnFamily);
iSpec.addIndexColumn(hcd, indexColumnQualifier, ValueType.String, 10);
htd.addFamily(hcd);
htd.addIndex(iSpec);
admin.createTable(htd);
Никаких изменений не требуется для операций Put и Delete на стороне клиента, поскольку операции с индексом для них внутренне обрабатываются сопроцессорами.
Нет изменений в коде сканирования для клиентского приложения.
Не нужно указывать индексы, которые будут использоваться. Реализация вторичного индекса находит наилучший индекс для сканирования путём анализа фильтров, используемых в запросе.
Источник
Этот репозиторий содержит исходный код для поддержки вторичного индекса в Apache HBase 0.94.8.
Сборка из исходного кода и тестирование
Процедура сборки из исходного кода такая же, как и сборка исходного кода HBase, поэтому она требует:
Отдельный тестовый источник (secondaryindex\src\test\java) доступен для запуска тестов на вторичных индексах.
Примечание
Настройте следующие конфигурации в файле hbase-site.xml для использования вторичного индекса:
Свойство
Свойство
Свойство
Сопроцессор org.apache.hadoop.hbase.index.coprocessor.regionserver.IndexRegionObserver определяет перехватчики сопроцессора для поддержки операций вторичного индекса в регионе.
Свойство
Будущая работа
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )