pgvector и Neo4j: выбор подходящей векторной базы данных для ваших нужд
По мере развития ИИ и технологий, основанных на данных, выбор подходящей векторной базы данных для вашего приложения становится всё более важным. pgvector и Neo4j — два варианта в этой области. В этой статье сравниваются эти технологии, чтобы помочь вам принять обоснованное решение для вашего проекта.
Что такое векторная база данных?
Прежде чем сравнивать pgvector и Neo4j, давайте сначала рассмотрим концепцию векторных баз данных.
Векторная база данных специально предназначена для хранения и запросов высокоразмерных векторов, которые являются числовыми представлениями неструктурированных данных. Эти векторы кодируют сложную информацию, такую как семантическое значение текста, визуальные признаки изображений или атрибуты продуктов. Обеспечивая эффективный поиск по сходству, векторные базы данных играют ключевую роль в приложениях ИИ, позволяя выполнять более продвинутый анализ и извлечение данных.
Распространённые варианты использования векторных баз данных включают рекомендации товаров в электронной коммерции, платформы обнаружения контента, обнаружение аномалий в кибербезопасности, анализ медицинских изображений и задачи обработки естественного языка (NLP). Они также играют важную роль в Retrieval Augmented Generation (RAG) — методе, который повышает производительность больших языковых моделей (LLMs), предоставляя внешние знания для уменьшения таких проблем, как галлюцинации ИИ.
На рынке доступно множество типов векторных баз данных, включая:
- Специализированные векторные базы данных, такие как Milvus, Zilliz Cloud (полностью управляемый Milvus) и Weaviate
- Библиотеки векторного поиска, такие как Faiss и Annoy.
- Лёгкие векторные базы данных, такие как Chroma и Milvus Lite.
- Традиционные базы данных с дополнениями для векторного поиска, способные выполнять векторный поиск в небольшом масштабе.
pgvector — это традиционная база данных, а Neo4j — графовая база данных. Обе имеют векторный поиск в качестве дополнения. В этом посте сравниваются их возможности векторного поиска.
pgvector: обзор и базовая технология
pgvector — это расширение для PostgreSQL, которое добавляет поддержку векторных операций. Оно позволяет пользователям хранить и запрашивать векторные эмбеддинги непосредственно в своей базе данных PostgreSQL, предоставляя возможности поиска по векторному сходству без необходимости в отдельной векторной базе данных.
Ключевые возможности pgvector включают:
- Поддержку точного и приближённого поиска ближайших соседей
- Интеграцию с механизмами индексирования PostgreSQL
- Возможность выполнять векторные операции, такие как сложение и вычитание
- Поддержку различных метрик расстояния (евклидова, косинусная, скалярное произведение)
По умолчанию pgvector использует точный поиск ближайших соседей, который гарантирует идеальную полноту, но может быть медленнее на больших наборах данных. Для оптимизации производительности pgvector предлагает возможность создавать индексы для приближённого поиска ближайших соседей. Этот подход жертвует частью точности ради значительно более высокой скорости, что часто является оправданным компромиссом во многих реальных приложениях.
Важно отметить, что добавление приближенного индекса может изменить результаты ваших запросов. Это отличается от типичных индексов баз данных, которые не влияют на фактически возвращаемые результаты. Два типа приближенных индексов, поддерживаемых pgvector:
- HNSW (Hierarchical Navigable Small World): Представленный в pgvector версии 0.5.0, HNSW известен своей высокой производительностью и качеством результатов. Он строит многослойную графовую структуру, которая обеспечивает быстрое прохождение во время поиска.
- IVFFlat (Inverted File Flat): Этот метод делит векторное пространство на кластеры. Во время поиска он сначала определяет наиболее релевантные кластеры, а затем выполняет точный поиск внутри этих кластеров. Это может значительно ускорить поиск в больших наборах данных.
Выбор между этими типами индексов зависит от вашего конкретного сценария использования с учетом таких факторов, как размер набора данных, требуемая скорость запросов и допустимый компромисс в точности. HNSW обычно обеспечивает лучшую производительность, но может использовать больше памяти, тогда как IVFFlat может быть более эффективным по памяти, но в некоторых случаях может быть немного медленнее или менее точным.
При внедрении pgvector в ваш проект попробуйте поэкспериментировать с обоими типами индексов и их параметрами, чтобы найти оптимальную конфигурацию для ваших конкретных потребностей. Этот процесс тонкой настройки может повлиять на производительность и точность ваших операций векторного поиска.
Хотите узнать, как начать использовать pgvector? Ознакомьтесь с этим руководством!
Neo4J: Основы
Векторный поиск Neo4j позволяет разработчикам создавать векторные индексы для поиска похожих данных по их графу. Эти индексы работают со свойствами узлов, содержащими векторные вложения — числовые представления данных, таких как текст, изображения или аудио, которые отражают смысл данных. Система поддерживает векторы размерностью до 4096, а также функции косинусного и евклидова сходства.
Реализация использует графы Hierarchical Navigable Small World (HNSW) для выполнения быстрого приближенного поиска k ближайших соседей. При запросе к векторному индексу вы указываете, сколько соседей хотите получить, и система возвращает соответствующие узлы, упорядоченные по оценке сходства. Эти оценки находятся в диапазоне 0–1, где более высокое значение означает большее сходство. Подход HNSW хорошо работает, поддерживая связи между похожими векторами и позволяя системе быстро переходить к различным частям векторного пространства.
Создание и использование векторных индексов выполняется через язык запросов. Вы можете создавать индексы с помощью команды CREATE VECTOR INDEX и указывать такие параметры, как размерность векторов и функция сходства. Система проверит, что индексируются только векторы настроенной размерности. Запросы к этим индексам выполняются с помощью процедуры db.index.vector.queryNodes, которая принимает на вход имя индекса, количество результатов и вектор запроса.
Векторное индексирование Neo4j имеет оптимизации производительности, такие как квантизация, которая снижает использование памяти за счет сжатия векторных представлений. Вы можете настраивать поведение индекса с помощью таких параметров, как максимальное число соединений на узел (M) и число ближайших соседей, отслеживаемых при вставке (ef_construction). Хотя эти параметры позволяют балансировать между точностью и производительностью, значения по умолчанию хорошо подходят для большинства сценариев использования. Система также поддерживает векторные индексы отношений начиная с версии 5.18, поэтому вы можете искать похожие данные в свойствах отношений.
Это позволяет разработчикам создавать приложения на базе ИИ. Комбинируя графовые запросы с поиском по векторному сходству, приложения могут находить связанные данные на основе семантического смысла, а не точных совпадений. Например, система рекомендаций фильмов могла бы использовать векторы вложений сюжетов, чтобы находить похожие фильмы, одновременно используя структуру графа, чтобы гарантировать, что рекомендации относятся к тому же жанру или эпохе, которые предпочитает пользователь.
Ключевые различия
Методология поиска
pgvector использует векторные операции непосредственно внутри PostgreSQL, поддерживает как точный, так и приблизительный поиск ближайших соседей (ANN). У него есть варианты:
- Точный поиск: идеальная полнота, подходит для меньших наборов данных или случаев, где точность является главным приоритетом.
- Приблизительный поиск: типы индексов HNSW и IVFFlat для более быстрого времени запроса, компромисс между точностью и скоростью.
Neo4j использует граф HNSW для приблизительного поиска k-ближайших соседей в контексте графовой базы данных. Это использует графовую структуру для оптимизации поиска в приложениях, где важны отношения между сущностями (например, узлами).
Обе системы поддерживают метрики расстояния, такие как косинусное сходство и евклидово расстояние, но графовые отношения Neo4j добавляют уровень сложности для сценариев гибридного поиска граф + векторы.
Обработка данных
- pgvector хорош для сред, где структурированные и полуструктурированные данные нативно обрабатываются PostgreSQL. Вы можете хранить векторы рядом с реляционными данными в одной базе данных, что упрощает жизнь.
- Neo4j оптимизирован для графовых данных, поэтому лучше подходит, если ваши данные естественным образом являются сетью (например, социальная сеть, рекомендательная система). Он может сочетать графовый запрос с векторным поиском для семантического извлечения данных в графовом контексте.
Если вы встраиваете поиск в структурированные табличные данные, pgvector может казаться более естественным. Для графово связанных данных Neo4j имеет преимущество.
Масштабируемость и производительность
pgvector использует механизм масштабируемости PostgreSQL, что может потребовать внешнего шардинга или партиционирования для очень больших наборов данных. Настройка производительности включает эксперименты с типами индексов и конфигурацией PostgreSQL.
Neo4j поддерживает нативное распределенное графовое хранилище и выполнение запросов. Векторный поиск на основе HNSW оптимизирован для масштабируемости, а квантование векторов снижает использование памяти при сохранении хорошей производительности.
Если ваша нагрузка сильно масштабируется или выигрывает от распределенной архитектуры, Neo4j может лучше справляться с ростом, особенно для графоцентричных данных.
Гибкость и настройка
pgvector обеспечивает прямую интеграцию с механизмами индексирования и запросов PostgreSQL, позволяет выполнять пользовательские векторные операции (например, сложение, вычитание). Он хорош для приложений, которым нужен глубокий контроль над стратегией индексирования.
Neo4j предоставляет настройку через свой язык запросов (Cypher) и поддерживает векторный поиск как по узлам, так и по отношениям, позволяет создавать креативную модель данных для приложений на базе ИИ. Но Cypher может потребовать времени на обучение для разработчиков, которые не знакомы с графовыми базами данных.
Для традиционной модели данных pgvector кажется более естественным, тогда как Neo4j раскрывается в архитектуре graph-first.
Интеграция и экосистема
- pgvector хорошо вписывается в экосистему PostgreSQL, поддерживает интеграцию с ORM и аналитическими платформами.
- Neo4j хорошо интегрируется с графовыми инструментами и фреймворками. Его экосистема включает коннекторы для языков, таких как Python, инструменты вроде Neo4j Bloom, AI/ML workflow.
Ваш выбор зависит от того, вращается ли ваш стек вокруг реляционных или графовых инструментов данных.
Простота использования
pgvector прост в использовании для пользователей PostgreSQL, требует минимальных изменений существующего рабочего процесса. Он прост для команд, уже знакомых с реляционными базами данных.
Neo4j имеет более крутой порог входа для команд без опыта работы с графовыми базами данных. Но его документация и ресурсы сообщества богаты, могут помочь разработчикам быстро освоиться.
Если простота является приоритетом, pgvector легче начать использовать.
Стоимость
- pgvector является open-source, пользуется преимуществами open-source модели PostgreSQL. Стоимость в значительной степени зависит от инфраструктуры, на которой вы его разворачиваете.
- Neo4j имеет более сложную структуру стоимости, особенно для enterprise или облачного managed-предложения. Его продвинутые возможности могут оправдать стоимость для сценариев с интенсивным использованием графов.
Если бюджет является ограничением, pgvector более экономически эффективен, если только возможности Neo4j не являются обязательными.
Безопасность
Обе системы имеют надежные параметры безопасности, но реализация отличается:
- pgvector наследует зрелые функции безопасности PostgreSQL, включая управление доступом на основе ролей, SSL и шифрование данных.
- Neo4j обладает расширенными функциями безопасности, такими как ролевой доступ к графовым данным, детальный контроль доступа и шифрование для векторного индекса.
Ваш выбор зависит от того, нужна ли вам тонко настраиваемая безопасность для графовых данных или вы полагаетесь на модель безопасности PostgreSQL.
Когда использовать pgvector
pgvector предназначен для команд, которые уже используют PostgreSQL или работают со структурированными и полуструктурированными данными, где векторные эмбеддинги являются новым требованием. Он идеально подходит для приложений, которым нужна простая интеграция с реляционными данными, таких как рекомендации в электронной коммерции, поиск похожих документов или аналитика с использованием ИИ. pgvector поддерживает как точный, так и приближенный поиск, но поскольку он настолько тесно связан с PostgreSQL, он лучше всего подходит для небольших наборов данных или сценариев, где всё приложение может работать в рамках одной базы данных.
Когда использовать Neo4j
Neo4j лучше подходит, когда ваши данные по своей природе сложны, например социальные сети, рекомендательные системы или графы знаний. Его способность сочетать графовые запросы с векторным поиском открывает гибридные сценарии использования, такие как поиск семантически похожих элементов в рамках конкретных графовых ограничений. Если у вас крупномасштабные распределенные графовые данные или вам нужны расширенные оптимизации для обходов графа и векторных операций, Neo4j — правильный выбор.
Заключение
pgvector отлично подходит для простоты и бесшовной интеграции с PostgreSQL для структурированных и полуструктурированных данных, Neo4j предлагает больше гибкости для сочетания графовых данных с векторным поиском. В конечном итоге выбор зависит от вашего сценария использования: pgvector подходит для простых сценариев с реляционными базами данных, Neo4j — для приложений, ориентированных на графы. Оцените тип ваших данных, сложность рабочей нагрузки и потребности в масштабировании, чтобы понять, какой инструмент соответствует вашим целям.
Прочитайте это, чтобы получить общее представление о pgvector и Neo4j, но для их оценки необходимо исходить из вашего сценария использования. Один из инструментов, который может помочь в этом, — VectorDBBench, инструмент с открытым исходным кодом для бенчмаркинга и сравнения векторных баз данных. В конечном счете тщательное бенчмаркинг-тестирование на ваших собственных наборах данных и шаблонах запросов будет ключевым для принятия решения между этими двумя мощными, но разными подходами к векторному поиску в распределенных системах баз данных.
Использование Open-source VectorDBBench для оценки и сравнения векторных баз данных самостоятельно
VectorDBBench — это инструмент бенчмаркинга с открытым исходным кодом для пользователей, которым нужны высокопроизводительные системы хранения и извлечения данных, особенно векторные базы данных. Этот инструмент позволяет пользователям тестировать и сравнивать различные системы векторных баз данных, такие как Milvus и Zilliz Cloud (управляемый Milvus), используя собственные наборы данных, и находить ту, которая соответствует их сценариям использования. С VectorDBBench пользователи могут принимать решения на основе фактической производительности векторных баз данных, а не маркетинговых заявлений или слухов.
VectorDBBench написан на Python и распространяется по лицензии MIT с открытым исходным кодом, что означает, что любой может свободно использовать, изменять и распространять его. Инструмент активно поддерживается сообществом разработчиков, стремящихся улучшать его функции и производительность.
Загрузите VectorDBBench из его репозитория GitHub, чтобы воспроизвести наши результаты бенчмарков или получить результаты производительности на собственных наборах данных.
Быстро ознакомьтесь с производительностью популярных векторных баз данных в рейтинге VectorDBBench.
Прочитайте следующие блоги, чтобы узнать больше об оценке векторных баз данных.
Дополнительные ресурсы о VectorDB, GenAI и ML
Читать далее

How to Improve Retrieval Quality for Japanese Text with Sudachi, Milvus/Zilliz, and AWS Bedrock
Learn how Sudachi normalization and Milvus/Zilliz hybrid search improve Japanese RAG accuracy with BM25 + vector fusion, AWS Bedrock embeddings, and practical code examples.

The Real Bottlenecks in Autonomous Driving — And How AI Infrastructure Can Solve Them
Autonomous driving faces a data bottleneck. Learn how AI-native vector databases like Zilliz solve scale, cost, and insight challenges across AV pipelines.

Selecting the Right ETL Tools for Unstructured Data to Prepare for AI
Learn the right ETL tools for unstructured data to power AI. Explore key challenges, tool comparisons, and integrations with Milvus for vector search.
The Definitive Guide to Choosing a Vector Database
Overwhelmed by all the options? Learn key features to look for & how to evaluate with your own data. Choose with confidence.


