Введение
Индекс на основе битовой карты — это специальный тип индекса базы данных, использующий битовые карты. Индексы битовых карт традиционно считаются эффективными для столбцов с низкой кардинальностью, то есть содержащих небольшое количество различных значений, как в абсолютном выражении, так и относительно общего числа записей. Крайним случаем низкой кардинальности являются булевы данные (например, есть ли у жителя города доступ к интернету?), которые имеют два значения: Истина и Ложь. Индексы битовых карт используют битовые массивы (обычно называемые битовыми картами) и отвечают на запросы, выполняя побитовые логические операции над этими картами. Они обеспечивают значительное преимущество в пространстве и производительности по сравнению с другими структурами при запросе таких данных. Однако их недостаток заключается в меньшей эффективности по сравнению с традиционными B-деревьями для столбцов, данные которых часто обновляются. Следовательно, они чаще используются в системах, предназначенных только для чтения и оптимизированных для быстрых запросов, например, в хранилищах данных, и обычно не подходят для приложений онлайн-обработки транзакций. Некоторые исследователи утверждают, что индексы битовых карт также могут быть полезны для данных умеренной и даже высокой кардинальности (например, уникальных значений), к которым осуществляется доступ только для чтения, а запросы интенсивно используют операторы AND, OR или XOR для доступа к нескольким столбцам, индексированным битовыми картами. Индексы битовых карт также полезны в задачах хранения данных для соединения большой таблицы фактов с небольшими таблицами измерений, например, организованными по схеме «звезда».
A bitmap index is a special kind of database index that uses bitmaps. Bitmap indexes have traditionally been considered to work well for low cardinality columns, which have a modest number of distinct values, either absolutely, or relative to the number of records that contain the data. The extreme case of low cardinality is Boolean data (e. g., does a resident in a city have internet access? ), which has two values, True and False. Bitmap indexes use bit arrays (commonly called bitmaps) and answer queries by performing bitwise logical operations on these bitmaps. Bitmap indexes have a significant space and performance advantage over other structures for query of such data. Their drawback is they are less efficient than the traditional B tree indexes for columns whose data is frequently updated: consequently, they are more often employed in read only systems that are specialized for fast query e. g., data warehouses, and generally unsuitable for online transaction processing applications. Some researchers argue that bitmap indexes are also useful for moderate or even high cardinality data (e. g., unique valued data) which is accessed in a read only manner, and queries access multiple bitmap indexed columns using the AND, OR or XOR operators extensively. Bitmap indexes are also useful in data warehousing applications for joining a large fact table to smaller dimension tables such as those arranged in a star schema.
Сжатие
По историческим причинам сжатие растровых изображений и сжатие инвертированных списков разрабатывались как отдельные направления исследований, и лишь позднее было признано, что они решают по сути одну и ту же задачу. Программное обеспечение может сжимать каждое растровое изображение в растровом индексе для экономии места. По этой теме было проведено значительное количество исследований. Хотя существуют исключения, такие как Roaring bitmaps, алгоритмы сжатия растровых изображений обычно используют кодирование длин серий, такие как Byte-aligned Bitmap Code, Word Aligned Hybrid code, сжатие Partitioned Word Aligned Hybrid (PWAH), Position List Word Aligned Hybrid, Compressed Adaptive Index (COMPAX), Enhanced Word Aligned Hybrid (EWAH) и COmpressed 'N' Composable Integer SEt (CONCISE). Сообщалось, что растровые изображения PLWAH занимают 50% объема хранилища, потребляемого растровыми изображениями WAH, и обеспечивают до 20% более высокую производительность при логических операциях, а также улучшенный гибридный алгоритм выравнивания по словам. Чем больше таблица, тем важнее сортировать строки. Также были предложены методы переупорядочивания для достижения тех же результатов, что и сортировка, при индексировании потоковых данных. Например, можно закодировать C различных значений, используя log(C) растровых изображений с двоичным кодированием. Это уменьшает количество растровых изображений, дополнительно экономя место, но для ответа на любой запрос необходимо получить доступ к большинству из них. Это может оказаться не таким эффективным, как сканирование вертикальной проекции базовых данных, также известной как материализованное представление или индекс проекции. Поиск оптимального метода кодирования, который балансирует (произвольную) производительность запросов, размер индекса и обслуживание индекса, остается сложной задачей. Не учитывая сжатие, Чан и Иоаннидис проанализировали класс многокомпонентных методов кодирования и пришли к выводу, что кодирование двумя компонентами находится на изломе кривой производительности и размера индекса и, следовательно, представляет собой наилучший компромисс между размером индекса и производительностью запросов. Однако индексы с разбиением на диапазоны могут отвечать только на некоторые запросы без обращения к базовым данным. Например, если диапазон покрывает значения от 0.1 до 0.2, то при запросе всех значений меньше 0.15 все строки, попадающие в этот диапазон, являются потенциальными совпадениями и должны быть проверены, чтобы убедиться, что они действительно меньше 0.15. Процесс проверки базовых данных известен как проверка кандидатов. В большинстве случаев время, затрачиваемое на проверку кандидатов, значительно превышает время, необходимое для работы с растровым индексом. Поэтому индексы с разбиением на диапазоны демонстрируют нестабильную производительность. Они могут быть очень быстрыми для некоторых запросов, но значительно медленнее, если запрос не соответствует диапазону.
История
Концепция индексa битмапов была впервые представлена профессором Израилем Шпиглером и Рафи Маяном в их исследовании "Вопросы хранения и извлечения данных из бинарных баз данных", опубликованном в 1985 году. Первым коммерческим продуктом базы данных, реализовавшим индекс битмапов, стала модель 204 компании Computer Corporation of America. Патрик О’Нил опубликовал статью об этой реализации в 1987 году. Эта реализация является гибридом между базовым индексом битмапов (без сжатия) и списком идентификаторов строк (список RID). В целом, индекс организован как B+ дерево. Когда кардинальность столбца низкая, каждый листовой узел B-дерева содержит длинный список RID. В этом случае требуется меньше места для представления списков RID в виде битмапов. Поскольку каждый битмап представляет одно уникальное значение, это и есть базовый индекс битмапов. По мере увеличения кардинальности столбца каждый битмап становится разреженным, и для хранения битмапов может потребоваться больше дискового пространства, чем для хранения того же объема данных в виде списков RID. В этом случае происходит переключение на использование списков RID, что превращает индекс в B+ дерево.