И как Apache Druid использует его для сверхбыстрой аналитики
Что такое индекс растрового изображения?
Растровый индекс - это особый вид индекса, в котором для индексации данных используются точечные рисунки или битовые массивы. Они используются во многих приложениях из-за следующих преимуществ:
- Быстрые специальные запросы
- Уменьшение места для хранения
Индекс растрового изображения используется вместе с другими методами кодирования / индексации для более быстрого выполнения запросов. Они используются во многих аналитических машинах, и Apache Druid является одним из них. Я объясню Bitmap Index и эти другие методы, показывая, как Druid индексирует данные. Я постараюсь сделать это как можно проще. Я уверен, что к концу этой статьи вы получите полное представление о том, что это такое.
Давайте использовать приведенные ниже данные в качестве исходных данных. Это то, что мы собираемся проиндексировать.
Для хранения этих данных Druid сохранит следующие 4 структуры данных.
Структура данных №1
Мы не можем хранить данные как есть, так как они занимают много места. Итак, первое, что мы создадим, - это словарь для каждого уникального значения столбцов. Это называется кодировка словаря.
Gender { Male: 5 Female: 6 } Country { Australia: 3 Brazil:4 } Zone { AA: 8 B11: 9 B12: 10 AB: 13 }
Gender.Male будет сохраняться как 5, а Gender.Female - как 6.
Структура данных # 2
Это список значений столбца, закодированный (считываемый замененным) словарем в структуре данных №1. Вот как выглядит Datra Structure # 2.
Структура данных # 3
Для каждого отдельного значения в столбце создается битовая карта, которая указывает, какие строки содержат это значение. Они также известны как перевернутый индекс. Количество битов зависит от количества строк
В приведенном выше примере пол 5 (мужской) присутствует в 1-м, 3-м, 4-м, 5-м, 8-м и 9-м ряду.
Структура данных # 4
Это для хранения фактов или показателей. Они хранятся в виде массивов.
Запрос
Теперь давайте посмотрим на разные типы запросов и посмотрим, как они разбираются.
select sum(characters added) from table where gender = ‘Male’ and Type = ‘Australia’
Это простой фильтрующий запрос, поэтому на него можно ответить по структуре данных №1 и №3. Посмотрим, как
- Преобразуйте Gender. Male и Type.Australia в соответствующий словарь. Это 5 и 3 соответственно.
- Операция «И» между Пол.5 И Типом.3.
= 101110011 И 100100011
=100100011
3. Для вышеперечисленных строк выберите соответствующий размер из структуры данных №4 и верните СУММ.
select zone, sum(characters added) from table where gender = ‘Male’ and Type = ‘Australia’ group by zone
В приведенном выше запросе есть дополнительное предложение «Группировать по». Следовательно, нам также нужна структура данных №2. Давайте посмотрим, как Druid разбирает эти типы запросов.
- Преобразуйте Gender. Male и Type.Australia в соответствующий словарь. Это 5 и 3 соответственно.
- Операция И между Пол.5 И Типом.3.
= 101110011 И 100100011
=100100011
3. Для этих строк просмотрите структуру данных №2, чтобы получить зону столбцов, и структуру данных №4, чтобы получить информацию о соответствующем размере.
4. Сгруппируйте данные, сгенерируйте сумму размера.
5. Расшифруйте поле Zone и вернитесь к пользователю.
Надеюсь, этот документ был вам полезен. Пожалуйста, дайте мне знать в разделе комментариев, если я что-то пропустил.
Особая благодарность Аруну за внимательное рецензирование статьи.
Вы также можете найти подробное руководство по перевернутому индексу, которое я использовал ранее.