Поделиться через


Включение и использование расширения diskann для База данных Azure для PostgreSQL — гибкий сервер (предварительная версия)

DiskANN — это масштабируемый приблизительный алгоритм поиска ближайших соседей для эффективного векторного поиска в любом масштабе. Он предлагает высокий уровень отзыва, высокий уровень запросов в секунду (QPS) и низкую задержку запросов даже для наборов данных в миллиардных точках. Это делает его мощным инструментом для обработки больших объемов данных. Дополнительные сведения о DiskANN от Корпорации Майкрософт

Расширение pg_diskann для База данных Azure для PostgreSQL гибкого сервера добавляет поддержку использования DiskANN для эффективного индексирования и поиска векторов.

Регистрация в функции предварительной pg_diskann версии

pg_diskannдля База данных Azure для PostgreSQL — гибкий сервер требует, чтобы пользователи регистрироваться с помощью формы предварительной версии. Выполните следующие действия, чтобы зарегистрировать:

  1. Открытие формы предварительной версии
  2. Заполните все соответствующие сведения. Для включения потребуется идентификатор подписки Azure.

Примечание.

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

Включение pg_diskann расширения

Прежде чем включить pg_diskann на База данных Azure для PostgreSQL гибкий экземпляр сервера, необходимо добавить его в список разрешений, как описано в том, как использовать расширения PostgreSQL, и проверить, правильно ли добавлено путем выполнения.SHOW azure.extensions;

Снимок экрана: выбор pg_diskann в параметрах сервера.

Внимание

Эта предварительная версия доступна только для недавно развернутых экземпляров гибкого сервера База данных Azure для PostgreSQL.

Затем можно установить расширение, подключився к целевой базе данных и выполнив команду CREATE EXTENSION . Необходимо повторить команду отдельно для каждой базы данных, в которой необходимо, чтобы расширение было доступно.

CREATE EXTENSION IF NOT EXISTS pg_diskann CASCADE;

Эта команда включает pgvector , если он еще не установлен в базе данных PostgreSQL.

Примечание.

Удаление расширения из текущей подключенной базы данных DROP EXTENSION vector;.

Использование diskann метода доступа к индексу

После установки расширения можно создать diskann индекс в столбце таблицы, который содержит векторные данные. Например, чтобы создать индекс в embedding столбце my_table таблицы, используйте следующую команду:

CREATE TABLE my_table (
 id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
 embedding public.vector(3)
 -- other columns
);
-- insert dummy data
INSERT INTO my_table (embedding) VALUES
('[1.0, 2.0, 3.0]'),
('[4.0, 5.0, 6.0]'),
('[7.0, 8.0, 9.0]');
-- create a diskann index by using Cosine distance operator
CREATE INDEX my_table_embedding_diskann_idx ON my_table USING diskann (embedding vector_cosine_ops)

Параметры индекса

При создании индекса diskannс помощью можно указать различные параметры для управления его поведением. Ниже приведены параметры, которые в настоящее время у нас есть:

  • max_neighbors: максимальное число ребер на узел в графе. (По умолчанию — 32)
  • l_value_ib: размер списка поиска во время сборки индекса (по умолчанию — 50)
CREATE INDEX my_table_embedding_diskann_custom_idx ON my_table USING diskann (embedding vector_cosine_ops)
WITH (
 max_neighbors = 48,
 l_value_ib = 100
 );

Значение L для сканирования индекса () можно задать для всего подключения или для каждой транзакции (l_value_isс использованием SET LOCAL в блоке транзакций):

SET diskann.l_value_is = 100;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- uses 100 candidates

Postgres автоматически решит, когда следует использовать индекс DiskANN. Если есть сценарии, которые всегда требуется использовать индекс, используйте следующую команду:

SET LOCAL enable_seqscan TO OFF;
SELECT * FROM my_table ORDER BY embedding <=> '[1,2,3]' LIMIT 5; -- forces the use of index

Ход индексирования

С помощью PostgreSQL 12 и более поздней версии можно использовать pg_stat_progress_create_index для проверки хода выполнения индексирования.

SELECT phase, round(100.0 * blocks_done / nullif(blocks_total, 0), 1) AS "%" FROM pg_stat_progress_create_index;

Этапы создания индексов DiskANN:

  1. initializing
  2. loading tuples

Предупреждение

Пользователи могут столкнуться с медленным временем сборки индекса в некоторых случаях.

Выбор функции доступа к индексу

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

pg_diskann поддерживает следующие операторы расстояния

  • vector_l2_ops: <-> Евклидеан расстояние
  • vector_cosine_ops: <=> Косинус расстояние
  • vector_ip_ops: <#> внутренний продукт