Перейти к основному содержимому

bloom. Индексный метод доступа, основанный на фильтрах Блума

В исходном дистрибутиве установлено по умолчанию: нет.

Связанные компоненты: отсутствуют.

Схема размещения: ext.

Модуль предоставляет индексный метод доступа, основанный на фильтрах Блума.

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

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

Этот тип индекса наиболее полезен, когда в таблице много атрибутов, и в запросах проверяются их произвольные сочетания.

Традиционный индекс-B-дерево быстрее индекса Блума, но для поддержки всевозможных запросов может потребоваться множество индексов типа B-дерево, тогда как индекс Блума нужен всего один.

Доработка

Не проводилась.

Ограничения

Существуют следующие ограничения:

  • включены только классы операторов для int4 и text;
  • при поиске поддерживается только оператор = ;
  • метод доступа bloom не поддерживает уникальные индексы (UNIQUE);
  • метод доступа bloom не поддерживает поиск значений NULL.

Установка

При наличии прав администратора СУБД включение модуля возможно выполнить вручную:

CREATE EXTENSION bloom SCHEMA ext;

Настройка

Не требуется.

Использование модуля

Индекс bloom принимает в своем предложении WITH следующие параметры:

  • length - длина каждой сигнатуры (элемента индекса) в битах, округленная вверх до ближайшего числа, кратного 16.

    Значение по умолчанию — 80, максимальное значение — 4096;

  • col1 — col32 - число битов, генерируемых для каждого столбца индекса.

    В имени параметра отражается номер столбца индекса, для которого это число задается.

    Значение по умолчанию — 2 бита, максимальное значение — 4095. Параметры для неиспользуемых столбцов индекса игнорируются.

Пример:

Создать индекс с длиной сигнатуры 80 бит, в которой атрибуты i1 и i2 отображаются в 2 бита, а атрибут i3 — в 4. Можно опустить указания length, col1 и col2, так как в них задаются значения по умолчанию.

CREATE INDEX  bloomidx ON tbloom USING bloom (i1,i2,i3)
WITH (length=80, col1=2, col2=2, col3=4);

Ссылки на документацию разработчика

Дополнительно поставляемый модуль bloom: https://www.postgresql.org/docs/15/bloom.html.