Включение и использование расширения diskann для База данных Azure для PostgreSQL — гибкий сервер (предварительная версия)
DiskANN — это масштабируемый приблизительный алгоритм поиска ближайших соседей для эффективного векторного поиска в любом масштабе. Он предлагает высокий уровень отзыва, высокий уровень запросов в секунду (QPS) и низкую задержку запросов даже для наборов данных в миллиардных точках. Это делает его мощным инструментом для обработки больших объемов данных. Дополнительные сведения о DiskANN от Корпорации Майкрософт
Расширение pg_diskann
для База данных Azure для PostgreSQL гибкого сервера добавляет поддержку использования DiskANN для эффективного индексирования и поиска векторов.
Регистрация в функции предварительной pg_diskann
версии
pg_diskann
для База данных Azure для PostgreSQL — гибкий сервер требует, чтобы пользователи регистрироваться с помощью формы предварительной версии. Выполните следующие действия, чтобы зарегистрировать:
- Открытие формы предварительной версии
- Заполните все соответствующие сведения. Для включения потребуется идентификатор подписки Azure.
Примечание.
После заполнения формы предварительной версии потребуется некоторое время для утверждения запроса. Подтверждение будет отправлено на ваш адрес электронной почты.
Включение pg_diskann
расширения
Прежде чем включить pg_diskann
на База данных Azure для PostgreSQL гибкий экземпляр сервера, необходимо добавить его в список разрешений, как описано в том, как использовать расширения PostgreSQL, и проверить, правильно ли добавлено путем выполнения.SHOW azure.extensions;
Внимание
Эта предварительная версия доступна только для недавно развернутых экземпляров гибкого сервера База данных 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:
initializing
loading tuples
Предупреждение
Пользователи могут столкнуться с медленным временем сборки индекса в некоторых случаях.
Выбор функции доступа к индексу
Тип вектора позволяет выполнять три типа поиска по хранимым векторам. Необходимо выбрать правильную функцию доступа для индекса, чтобы база данных могли учитывать индекс при выполнении запросов.
pg_diskann
поддерживает следующие операторы расстояния
vector_l2_ops
:<->
Евклидеан расстояниеvector_cosine_ops
:<=>
Косинус расстояниеvector_ip_ops
:<#>
внутренний продукт