SingleStore против pgvector: выбор подходящей векторной базы данных для ваших AI-приложений
Что такое векторная база данных?
Прежде чем сравнить SingleStore и pgvector, давайте сначала рассмотрим концепцию векторных баз данных.
Векторная база данных специально разработана для хранения и выполнения запросов к многомерным векторам, которые являются числовыми представлениями неструктурированных данных. Эти векторы кодируют сложную информацию, такую как семантическое значение текста, визуальные признаки изображений или атрибуты продуктов. Обеспечивая эффективный поиск по сходству, векторные базы данных играют ключевую роль в AI-приложениях, позволяя выполнять более продвинутый анализ и извлечение данных.
Распространенные сценарии использования векторных баз данных включают рекомендации товаров в электронной коммерции, платформы для обнаружения контента, обнаружение аномалий в кибербезопасности, анализ медицинских изображений и задачи обработки естественного языка (NLP). Они также играют важнейшую роль в Retrieval Augmented Generation (RAG) — методе, который повышает производительность больших языковых моделей (LLMs), предоставляя внешние знания для уменьшения таких проблем, как AI-галлюцинации.
На рынке доступно множество типов векторных баз данных, включая:
- Специализированные векторные базы данных, такие как Milvus, Zilliz Cloud (полностью управляемый Milvus)
- Библиотеки векторного поиска, такие как Faiss и Annoy.
- Легковесные векторные базы данных, такие как Chroma и Milvus Lite.
- Традиционные базы данных с надстройками для векторного поиска, способные выполнять векторный поиск небольшого масштаба.
SingleStore — это распределенная реляционная система управления SQL-базами данных, а pgvector — традиционная база данных. Обе имеют векторный поиск в качестве надстройки. В этом посте сравниваются их возможности векторного поиска.
SingleStore: обзор и базовая технология
SingleStore сделал векторный поиск возможным, встроив его в саму базу данных, поэтому вам не нужны отдельные векторные базы данных в вашем технологическом стеке. Векторы можно хранить в обычных таблицах базы данных и искать с помощью стандартных SQL-запросов. Например, вы можете искать похожие изображения товаров, одновременно фильтруя по ценовому диапазону, или исследовать эмбеддинги документов, ограничивая результаты конкретными отделами. Система поддерживает как семантический поиск с использованием FLAT, IVF_FLAT, IVF_PQ, IVF_PQFS, HNSW_FLAT и HNSW_PQ для векторного индекса, так и скалярное произведение и евклидово расстояние для сопоставления по сходству. Это особенно полезно для таких приложений, как рекомендательные системы, распознавание изображений и AI-чат-боты, где сопоставление по сходству выполняется быстро.
В своей основе SingleStore создан для производительности и масштабирования. База данных распределяет данные по нескольким узлам, чтобы вы могли обрабатывать крупномасштабные операции с векторными данными. По мере роста ваших данных вы можете просто добавлять больше узлов, и всё будет готово к работе. Обработчик запросов может объединять векторный поиск с SQL-операциями, поэтому вам не нужно выполнять несколько отдельных запросов. В отличие от баз данных, предназначенных только для векторов, SingleStore предоставляет эти возможности как часть полноценной базы данных, чтобы вы могли создавать AI-функции без управления несколькими системами или сложных передач данных.
Для векторной индексации SingleStore предлагает два варианта. Первый — точный поиск k ближайших соседей (kNN), который находит точный набор из k ближайших соседей для вектора запроса. Но для очень больших наборов данных или высокой конкурентности SingleStore также поддерживает поиск Approximate Nearest Neighbor (ANN) с использованием векторной индексации. Поиск ANN может находить k близких соседей гораздо быстрее, чем точный поиск kNN, иногда на порядки. Существует компромисс между скоростью и точностью — ANN быстрее, но может не вернуть точный набор из k ближайших соседей. Для приложений с миллиардами векторов, которым нужно интерактивное время отклика и не требуется абсолютная точность, поиск ANN — оптимальный выбор.
Техническая реализация векторных индексов в SingleStore имеет специфические требования. Эти индексы можно создавать только на таблицах columnstore, и они должны создаваться на одном столбце, который хранит векторные данные. В настоящее время система поддерживает формат Vector Type(dimensions[, F32]), F32 — единственный поддерживаемый тип элементов. Такой структурированный подход делает SingleStore отличным выбором для приложений, таких как семантический поиск с использованием векторов из больших языковых моделей, retrieval-augmented generation (RAG) для сфокусированной генерации текста и сопоставления изображений на основе векторных эмбеддингов. Комбинируя это с традиционными функциями базы данных, SingleStore позволяет разработчикам создавать сложные AI-приложения с использованием SQL-синтаксиса, сохраняя производительность и масштабируемость.
pgvector: обзор и основы
pgvector — это расширение PostgreSQL, которое позволяет выполнять векторные операции непосредственно в вашей базе данных PostgreSQL. Это означает, что вы можете хранить и запрашивать векторные эмбеддинги без отдельной векторной базы данных.
pgvector обладает полными возможностями для векторных операций: нативный поиск по векторному сходству, точный и приблизительный поиск ближайших соседей, а также интеграция с индексацией PostgreSQL. Он поддерживает векторную арифметику: сложение и вычитание, а также несколько метрик расстояния: евклидово, косинусное, внутреннее произведение.
Механизмы поиска и типы индексов
По умолчанию pgvector использует точный поиск ближайших соседей, который обеспечивает идеальную полноту, но может быть медленным на больших наборах данных. Для повышения производительности pgvector предлагает приблизительный поиск ближайших соседей через индексацию, что обменивает часть точности на значительно более высокую скорость.
HNSW (Hierarchical Navigable Small World): Представленный в pgvector 0.5.0, HNSW создает многоуровневую графовую структуру для быстрого обхода при поиске. Он известен отличной производительностью и хорошими результатами, но требует больше памяти, чем IVFFlat. Этот индекс подходит для приложений, которым нужен быстрый и точный поиск.
IVFFlat (Inverted File Flat): Метод IVFFlat кластеризует векторы в векторном пространстве и использует двухэтапный процесс поиска. Сначала он находит релевантные кластеры, затем выполняет точный поиск внутри выбранных кластеров. Он более эффективен по памяти, чем HNSW, но в некоторых случаях может быть немного медленнее или менее точным.
Технические ограничения
Техническим ограничением pgvector является его лимит размерности. При стандартном размере страницы 8 KiB расширение может хранить векторные данные полной точности (32 бита/4 байта) размерностью до 2000, поскольку это использует 7.8125 KiB на вектор. При скалярном квантовании (halfvec/16 бит/2 байта) максимальная размерность увеличивается до 4000, при этом по-прежнему используется 7.8125 KiB на вектор.
Влияние на современные языковые модели
Это ограничивает приложения RAG (Retrieval-Augmented Generation). Большинство embedding-моделей с лучшими результатами в лидерборде MTEB на HuggingFace превышают эти ограничения размерности. Даже со скалярным квантованием halfvec совместимы только три модели: gte-qwen2-7B-instruct, gte-qwen2-7B-instruct-fp16, bge-multilingual-gemma2.
Советы по реализации
При использовании pgvector следует экспериментировать с индексами HNSW и IVFFlat, чтобы найти лучший вариант для вашего сценария использования. Ваше решение будет зависеть от нескольких факторов: размера набора данных, требований к скорости запросов, допустимых компромиссов по точности, ограничений памяти. Тонко настраивайте параметры индексов и проводите бенчмарки разных конфигураций, чтобы найти оптимальный баланс для вашего сценария использования.
Производительность
При использовании pgvector имейте в виду, что добавление приближённых индексов изменит результаты запросов, в отличие от традиционных индексов баз данных. Это следует учитывать на этапе разработки и тестирования, чтобы убедиться, что компромисс между точностью и производительностью соответствует потребностям вашего приложения. Отслеживайте и корректируйте конфигурацию по мере изменения ваших данных и шаблонов использования.
Ключевые различия
Методология поиска
SingleStore: SingleStore поддерживает как точный поиск, так и приближённый поиск ближайших соседей (ANN). Его векторная индексация поддерживает FLAT, IVF_FLAT, IVF_PQ, HNSW_FLAT и HNSW_PQ. Это обеспечивает высокопроизводительный поиск по сходству с использованием скалярного произведения или евклидова расстояния. ANN отлично подходит для больших наборов данных с низкой задержкой, когда допустимы некоторые компромиссы в точности.
pgvector: pgvector предоставляет нативные векторные операции в PostgreSQL, включая точный поиск и ANN. Для ANN он использует HNSW и IVFFlat: HNSW быстрее, но требует больше памяти, а IVFFlat балансирует между потреблением памяти и скоростью. Хотя pgvector очень гибок, его точный поиск по умолчанию будет испытывать трудности с большими наборами данных, если не оптимизировать его с помощью этих индексов.
Обработка данных
SingleStore: SingleStore помещает векторные данные в таблицы columnstore, чтобы вы могли бесшовно запрашивать структурированные и неструктурированные данные. Его подход, основанный на SQL, объединяет векторный поиск со стандартными запросами к базе данных, поэтому он отлично подходит для гибридных сценариев, таких как поиск эмбеддингов продуктов с фильтрацией по цене или категории.
pgvector: Как расширение PostgreSQL, pgvector тесно связан с обработкой реляционных данных. Он позволяет хранить векторные эмбеддинги вместе с традиционными реляционными данными, поэтому легко проектировать схему для приложений, которым нужны оба типа данных. Однако ограничения размерности векторов (2000-4000 в зависимости от точности) могут ограничивать некоторые современные приложения на базе LLM.
Масштабируемость и производительность
SingleStore: SingleStore масштабируется горизонтально, распределяя данные по узлам, при этом производительность остаётся прежней по мере роста данных. Его распределённая архитектура и процессор запросов могут выполнять векторные и SQL-операции параллельно, снижая накладные расходы запросов. Индексация ANN ускоряет запросы для больших наборов данных.
pgvector: Масштабируемость в pgvector опирается на сильные стороны PostgreSQL. Он хорошо справляется с умеренными наборами данных, но может испытывать трудности с большими наборами данных или рабочими нагрузками с высокой конкурентностью. Настройка индексов и кластеризация могут помочь, но горизонтальное масштабирование может потребовать дополнительных обходных решений, таких как партиционирование.
Гибкость и настройка
SingleStore: SingleStore прост: вы можете выполнять векторный поиск с помощью стандартного SQL. Хотя это упрощает реализацию, варианты векторной индексации ограничены конкретными конфигурациями, такими как таблицы columnstore, что может ограничивать гибкость для пользовательских настроек.
pgvector: pgvector более гибок, поддерживает векторную арифметику и несколько метрик сходства (евклидово расстояние, косинусное сходство, внутреннее произведение). Он лучше подходит разработчикам, которые хотят экспериментировать с пользовательской индексацией, тонко настраивать параметры или интегрироваться с экосистемой PostgreSQL.
Интеграция и экосистема
SingleStore: Как самостоятельная база данных, SingleStore представляет собой решение «всё в одном», уменьшая потребность в отдельных системах. Такой подход «всё в одном» минимизирует сложность интеграции, но может уступать экосистеме инструментов на базе PostgreSQL.
pgvector: pgvector пользуется преимуществами экосистемы PostgreSQL, включая совместимость с популярными фреймворками, инструментами и расширениями. Это сильный выбор, если ваш стек уже построен поверх PostgreSQL.
Простота использования
SingleStore: Дизайн, ориентированный на SQL, упрощает настройку и выполнение запросов, что отлично подходит для команд, которые хотят быстро развернуться с минимальной кривой обучения. Но адаптация к ограничениям его векторной индексации может потребовать некоторых корректировок.
pgvector: Разработчикам, знакомым с PostgreSQL, pgvector покажется простым. Эксперименты с индексами и настройка добавляют некоторую сложность, но также дают возможности для оптимизации под ваш конкретный сценарий использования.
Стоимость
SingleStore: Как высокопроизводительная база данных корпоративного уровня, SingleStore может иметь более высокие операционные расходы, особенно для управляемых сервисов или крупномасштабных развертываний. Консолидация систем может компенсировать затраты для организаций с разнообразными потребностями в данных.
pgvector: Открытый исходный код pgvector делает его экономически эффективным для небольших проектов. Но управление инфраструктурой PostgreSQL в масштабе может привести к скрытым затратам, таким как дополнительное оборудование или обслуживание.
Безопасность
SingleStore: SingleStore имеет функции безопасности корпоративного уровня, такие как шифрование данных, управление доступом на основе ролей и журналы аудита. Они предназначены для сценариев использования с высокими требованиями к соответствию нормативам.
pgvector: pgvector наследует функции безопасности PostgreSQL.
Когда использовать SingleStore
SingleStore предназначен для крупных распределенных систем данных, которым нужны высокая производительность и масштабируемость. Он может объединять векторный поиск с SQL-запросами, чтобы сводить вместе структурированные и неструктурированные данные в таких приложениях, как рекомендательные системы на базе ИИ, поиск товаров с фильтрами и семантический поиск для корпоративных рабочих нагрузок. Распределенная архитектура SingleStore, варианты ANN-индексации и универсальная конструкция делают его идеальным для сценариев, где нужно обрабатывать миллиарды векторов с интерактивным временем отклика.
Когда использовать pgvector
pgvector предназначен для сред, уже работающих на PostgreSQL, или там, где важны простота и стоимость. Он подходит для приложений векторного поиска меньшего масштаба или проектов, которым нужно объединять полнотекстовый поиск, традиционные реляционные запросы и векторные операции в одной базе данных. Он гибок в отношении метрик расстояния, вариантов индексирования и хорошо интегрируется с богатой экосистемой PostgreSQL для разработчиков, экспериментирующих с моделями эмбеддингов или добавляющих векторный поиск в существующую инфраструктуру PostgreSQL.
Заключение
И SingleStore, и pgvector имеют свои сильные стороны в векторном поиске. SingleStore отлично подходит для крупномасштабных распределенных наборов данных с интеграцией SQL и высокой производительностью, тогда как pgvector хорош своей гибкостью, простотой использования с PostgreSQL и экономической эффективностью. Выбор зависит от вашего сценария использования — нужна ли вам масштабируемость корпоративного уровня или легковесное решение в существующей среде PostgreSQL. Оценивая типы ваших данных, потребности в производительности и требования к экосистеме, вы можете выбрать инструмент, который подходит вашему проекту.
Прочитайте это, чтобы получить общее представление о SingleStore и pgvector, но для их оценки нужно оценивать их исходя из вашего сценария использования. Один инструмент, который может в этом помочь, — VectorDBBench, инструмент сравнительного тестирования с открытым исходным кодом для сравнения векторных баз данных. В конечном итоге тщательное бенчмаркинг-тестирование на ваших собственных наборах данных и шаблонах запросов будет ключевым для принятия решения между этими двумя мощными, но различными подходами к векторному поиску в распределенных системах баз данных.
Использование open-source VectorDBBench для оценки и сравнения векторных баз данных самостоятельно
VectorDBBench — это инструмент сравнительного тестирования с открытым исходным кодом для пользователей, которым нужны высокопроизводительные системы хранения и извлечения данных, особенно векторные базы данных. Этот инструмент позволяет пользователям тестировать и сравнивать различные системы векторных баз данных, такие как Milvus и Zilliz Cloud (управляемый Milvus), используя собственные наборы данных, и находить ту, которая соответствует их сценариям использования. С VectorDBBench пользователи могут принимать решения на основе фактической производительности векторных баз данных, а не маркетинговых заявлений или слухов.
VectorDBBench написан на Python и распространяется по лицензии MIT с открытым исходным кодом, что означает, что любой может свободно использовать, изменять и распространять его. Инструмент активно поддерживается сообществом разработчиков, стремящихся улучшать его функции и производительность.
Загрузите VectorDBBench из его репозитория GitHub, чтобы воспроизвести наши результаты тестирования или получить результаты производительности на собственных наборах данных.
Быстро ознакомьтесь с производительностью основных векторных баз данных в рейтинге VectorDBBench.
Прочитайте следующие блоги, чтобы узнать больше об оценке векторных баз данных.
Дополнительные ресурсы о VectorDB, GenAI и ML
Читать далее

Introducing Loon: A New Storage Engine for Vector Data That Never Stops Changing
Loon is a new storage engine for Milvus 3.0 and Zilliz Vector Lakebase, built to manage evolving vector datasets with ColumnGroups, row ID alignment, and Manifests.

Why AI Databases Don't Need SQL
Whether you like it or not, here's the truth: SQL is destined for decline in the era of AI.

Proactive Monitoring for Vector Database: Zilliz Cloud Integrates with Datadog
we're excited to announce Zilliz Cloud's integration with Datadog, enabling comprehensive monitoring and observability for your vectorDB deployments.
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.


