Комментарии 19
Можно ли ожидать в будущем мержа векторного поиска в ванильный PostgreSQL?
а где сравнение с pg_embedding, pgvector и pgvecto.rs?
В 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) от вас ждать можно, или - это фантастика?
А насколько вежливо будет, если еще и я капну вопрос, касающийся тестирования?
Существует масса векторных баз, облачных и self-hosted.
Расширение pgpro_vector делает эту технологию доступной каждому пользователю Postgres Pro прямо сейчас.
Правильно ли я понимаю, что расширение можно поставить только на Postgres Pro?
То есть на народную версию не станет.
Как мы внедрили векторный поиск в Postgres Pro