И как Apache Druid использует его для сверхбыстрой аналитики

Что такое индекс растрового изображения?

Растровый индекс - это особый вид индекса, в котором для индексации данных используются точечные рисунки или битовые массивы. Они используются во многих приложениях из-за следующих преимуществ:

  1. Быстрые специальные запросы
  2. Уменьшение места для хранения

Индекс растрового изображения используется вместе с другими методами кодирования / индексации для более быстрого выполнения запросов. Они используются во многих аналитических машинах, и 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. Посмотрим, как

  1. Преобразуйте Gender. Male и Type.Australia в соответствующий словарь. Это 5 и 3 соответственно.
  2. Операция «И» между Пол.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 разбирает эти типы запросов.

  1. Преобразуйте Gender. Male и Type.Australia в соответствующий словарь. Это 5 и 3 соответственно.
  2. Операция И между Пол.5 И Типом.3.

= 101110011 И 100100011

=100100011

3. Для этих строк просмотрите структуру данных №2, чтобы получить зону столбцов, и структуру данных №4, чтобы получить информацию о соответствующем размере.

4. Сгруппируйте данные, сгенерируйте сумму размера.

5. Расшифруйте поле Zone и вернитесь к пользователю.

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

Особая благодарность Аруну за внимательное рецензирование статьи.

Вы также можете найти подробное руководство по перевернутому индексу, которое я использовал ранее.