Как стать автором
Обновить

Как мы внедрили векторный поиск в Postgres Pro

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров4K
Всего голосов 17: ↑17 и ↓0+20
Комментарии19

Комментарии 19

Можно ли ожидать в будущем мержа векторного поиска в ванильный PostgreSQL?

Всё будет зависеть от спроса на подобные решения и наши возможности

В pgpro_vector поддержка многоколоночного индекса, и при поиске с условием в запросе, он по скорости несопоставим со всеми тремя упомянутыми расширениями. А поиск обычно нужен с условиями

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

pgvector поддерживает WHERE начиная с 0.8.0, то есть уже больше полугода, если я не ошибаюсь. насколько он хуже? как там со скоростью без дополнительных условий?

ну, серьёзно, у PostgreSQL есть как минимум три расширения, добавляющие vector search. Нельзя ж добавить четвёртое, и писать про него, как будто оно первое и до него ничего вообще не было.

В pgvector 0.8.0 реализован алгоритм с постфильтрацией - он увеличивает время поиска пропорционально селективности условия WHERE (чем меньше % записей соответствует условию, тем больше их надо просмотреть). В pgpro_vector реализован алгоритм индекса с префильтрацией - он уменьшает время поиска пропорционально селективности условия WHERE (чем меньше % записей соответствует условию, тем больше их надо просмотреть). Поэтому сравнение таких реализаций в бенчмарках бессмысленно, так как скорость поиска начинает отличаться в сотни раз (на графике будет точка с одной стороны и точка с противоположной, так как результаты просто расходятся в разные стороны). В настоящий момент нет других расширений в Postgres, сделавших векторний индекс с префильтрацией.

"индекс с префильтрацией" — это я так понимаю, ваш многоколоночный индекс? то есть условие "префильтрации" по первой колонке и векторный поиск по второй?

Если да, то может ли условие префильтрации выбирать больше одного значения в первой колонке? типа id BETWEEN 2 AND 5

"индекс с префильтрацией" — это я так понимаю, ваш многоколоночный индекс? то есть условие "префильтрации" по первой колонке и векторный поиск по второй?

верно

Если да, то может ли условие префильтрации выбирать больше одного значения в первой колонке? типа id BETWEEN 2 AND 5

да, может. Индекс работает для условий =, >, <, >=, <= . То есть, для (id>=2 AND id<=5 - так в PostgreSQL преобразуется BETWEEN) он сработает. Для этого его и делали

классно. и по скорости id=5 и id in (1,2,3,4,5) однаково будет? или второе в пять раз медленнее?

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

я серьёзно спрашивал, без сарказма. Можно сделать просто на каждый id свой граф, тогда поиск в пяти разных id будет в пять раз меденнее. А можно, может быть, что-то хитрое придумать, не знаю что, и будет медленнее не в пять раз, а меньше, например, в полтора.

вот я и спрашивал, у вас просто отдельные графы на каждое значение id — тогда замедление пропорционально количеству id в запросе — или что-то другое, какое-то ваше уникальное решение?

1 С механизмом векторного поиска, который давно уже имеется в ClickHouse сравнивали по скорострельности и удобству?
2 Реализацию действительно серьезных вещей, типа движка таблиц, подобного тому, который используется в Oracle DB (по-простому - без Vacuum) от вас ждать можно, или - это фантастика?

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

По Oracle, если будет спрос со стороны клиентов, то будем думать в эту сторону

А насколько вежливо будет, если еще и я капну вопрос, касающийся тестирования?
Существует масса векторных баз, облачных и self-hosted.

Расширение pgpro_vector делает эту технологию доступной каждому пользователю Postgres Pro прямо сейчас. 

Правильно ли я понимаю, что расширение можно поставить только на Postgres Pro?
То есть на народную версию не станет.

Да, только на  Postgres Pro

Есть версия расширения для Postgres Pro Standart — c версии 16 и выше. Предоставляется по запросу клиента.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий