0Pricing
AI Engineering Academy · Урок

Выбор и сравнительное тестирование векторных хранилищ

Сравните Pinecone, pgvector, Chroma, Weaviate и Qdrant по стоимости, задержке, возможностям фильтрации и сложности эксплуатации, чтобы выбрать подходящий инструмент для своей задачи.

«Выбор и сравнительное тестирование векторных хранилищ» — бесплатный урок AI Engineering Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Engineering Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Engineering Academy содержит 4 уроков всего.

Ландшафт векторных хранилищ

За последние несколько лет экосистема векторных баз данных стремительно расширилась. Среди вариантов есть специализированные облачные сервисы, такие как Pinecone, расширения PostgreSQL, такие как pgvector, серверы с открытым исходным кодом, такие как Chroma, Qdrant и Weaviate, а также библиотеки для работы в памяти, такие как FAISS. Правильный выбор инструмента важен, потому что последующая миграция обходится дорого после индексации данных.

Ключевые параметры оценки

При сравнении векторных хранилищ оценивайте пять параметров: задержку запросов при целевом масштабе, пропускную способность индексации для пакетной загрузки, возможности фильтрации для предварительной фильтрации по метаданным, операционную сложность (управляемый сервис или самостоятельное размещение) и стоимость хранения и поиска миллиона векторов. Ни один инструмент не является лучшим по всем параметрам.

Pinecone: простота управляемого сервиса

Pinecone — это полностью управляемая облачная векторная база данных, не требующая управления инфраструктурой. Она отлично подходит для нагрузок с высокой конкурентностью, предлагает встроенный гибридный поиск по разреженным и плотным векторам и обеспечивает стабильное время запросов в пределах нескольких миллисекунд при любом масштабе. Компромисс заключается в стоимости: сервис дороже вариантов с самостоятельным размещением, а все данные находятся в облаке Pinecone, что создаёт зависимость от поставщика.

import pinecone

pc = pinecone.Pinecone(api_key='YOUR_API_KEY')
index = pc.Index('my-index')

# Query with metadata filter
results = index.query(
    vector=[0.1, 0.2, 0.3],
    top_k=10,
    filter={'category': {'$eq': 'finance'}},
    include_metadata=True
)

pgvector: эмбеддинги в PostgreSQL

pgvector расширяет PostgreSQL типом данных vector и индексами приближённого поиска ближайших соседей (ANN), использующими алгоритмы HNSW или IVFFlat. Это идеальный вариант, если вы уже используете PostgreSQL: эмбеддинги хранятся в той же базе данных, что и реляционные данные, благодаря чему можно выполнять мощные соединения SQL между векторным поиском и фильтрами по структурированным данным без дополнительной инфраструктуры.

-- Create table with embedding column
CREATE TABLE documents (
    id SERIAL PRIMARY KEY,
    content TEXT,
    category TEXT,
    embedding vector(1536)
);

-- Create HNSW index for fast ANN search
CREATE INDEX ON documents
USING hnsw (embedding vector_cosine_ops);

-- Query nearest neighbors with SQL filter
SELECT content, 1 - (embedding <=> '[0.1,0.2,...]')
FROM documents
WHERE category = 'finance'
ORDER BY embedding <=> '[0.1,0.2,...]'
LIMIT 10;

Chroma: удобство для разработчиков и локальная работа

Chroma — это база данных эмбеддингов с открытым исходным кодом, предназначенная для быстрого прототипирования. При локальной разработке она работает внутри процесса (сервер не требуется), а для рабочей среды поддерживает режим постоянного сервера. Chroma популярна в учебных материалах по LangChain благодаря своему чрезвычайно простому API, но при масштабировании у неё есть ограничения: отсутствует распределённый режим, а фильтрация слабее, чем в Pinecone или Qdrant.

import chromadb

client = chromadb.PersistentClient(path='./chroma_db')
collection = client.get_or_create_collection('my_docs')

# Add documents
collection.add(
    documents=['text one', 'text two'],
    metadatas=[{'source': 'doc1'}, {'source': 'doc2'}],
    ids=['id1', 'id2']
)

# Query
results = collection.query(
    query_texts=['search query'],
    n_results=5
)

Qdrant: фильтрация и поиск по данным

Qdrant — это векторная база данных с открытым исходным кодом, написанная на Rust и особенно хорошо подходящая для сложной фильтрации метаданных. В отличие от баз данных, применяющих фильтры после поиска ANN, Qdrant предварительно отбирает векторы-кандидаты по полям данных перед вычислением оценок, значительно повышая точность при избирательных фильтрах. Он поддерживает индексы HNSW на диске, поэтому подходит для наборов данных, которые не помещаются в RAM.

from qdrant_client import QdrantClient
from qdrant_client.models import Filter, FieldCondition, MatchValue

client = QdrantClient(url='http://localhost:6333')

# Search with payload filter
results = client.search(
    collection_name='documents',
    query_vector=[0.1, 0.2, 0.3],
    query_filter=Filter(
        must=[
            FieldCondition(
                key='category',
                match=MatchValue(value='finance')
            )
        ]
    ),
    limit=10
)

Weaviate: GraphQL и мультимодальные данные

Weaviate — это векторная база данных с открытым исходным кодом, отличающаяся уникальным GraphQL API и встроенной поддержкой мультимодальных объектов (текста, изображений и аудио). Она напрямую интегрируется с поставщиками моделей эмбеддингов через модули, поэтому вы можете загружать исходный текст, а Weaviate автоматически вызовет API эмбеддингов. За это удобство приходится платить более сложной настройкой по сравнению с Chroma или Qdrant.

import weaviate

client = weaviate.Client('http://localhost:8080')

# Near-text search using built-in vectorizer
result = client.query.get(
    'Document', ['content', 'category']
).with_near_text(
    {'concepts': ['financial analysis']}
).with_where({
    'path': ['category'],
    'operator': 'Equal',
    'valueString': 'finance'
}).with_limit(10).do()

FAISS: работа в памяти при большом масштабе

FAISS (Facebook AI Similarity Search) — это библиотека C++ с привязками для Python, обеспечивающая чрезвычайно быстрый поиск векторов в памяти. Это не база данных (в ней нет постоянного хранения или сервера), но с ускорением GPU она выполняет поиск сходства в масштабе миллиардов векторов на одном компьютере. FAISS подходит для нагрузок с преимущественно операциями чтения и автономным пакетным поиском, когда вы контролируете весь стек.

import faiss
import numpy as np

dimension = 1536
vectors = np.random.random((100000, dimension)).astype('float32')

# Normalize for cosine similarity
faiss.normalize_L2(vectors)

# Build HNSW index
index = faiss.IndexHNSWFlat(dimension, 32)  # M=32 neighbors
index.add(vectors)

# Search
query = np.random.random((1, dimension)).astype('float32')
faiss.normalize_L2(query)
D, I = index.search(query, k=10)  # top-10 results

Создание проверочного теста

Единственный способ сделать уверенный выбор — провести сравнительное тестирование на собственных данных. Хороший тест измеряет: (1) время индексации всего набора данных, (2) задержку запросов на уровнях p50, p95 и p99 при конкурентной нагрузке, (3) полноту поиска recall@K путём сравнения результатов ANN с точными результатами полного перебора и (4) потребление памяти и стоимость при целевом масштабе. Выполняйте одни и те же запросы в каждом рассматриваемом хранилище.

import time
import numpy as np

def benchmark_store(store, queries, k=10):
    latencies = []
    for q in queries:
        start = time.perf_counter()
        store.search(q, k)
        latencies.append(time.perf_counter() - start)
    latencies.sort()
    n = len(latencies)
    print(f'p50: {latencies[n//2]*1000:.1f}ms')
    print(f'p95: {latencies[int(n*0.95)]*1000:.1f}ms')
    print(f'p99: {latencies[int(n*0.99)]*1000:.1f}ms')

Измерение компромисса между полнотой и задержкой

Индексы ANN обеспечивают компромисс между полнотой поиска и скоростью. При более высоком значении параметра HNSW ef_search находятся более точные соседи, но поиск занимает больше времени. Измеряйте recall@10 (долю возвращённых истинных 10 ближайших соседей) при разных настройках параметров и строьте график зависимости полноты от задержки. Большинство рабочих систем стремятся к полноте 95–99%. Если полнота падает ниже 90%, пользователи получают нерелевантные фрагменты, даже если запросы выполняются быстро.

def compute_recall(approx_ids, exact_ids):
    '''Compute recall@K for one query'''
    return len(set(approx_ids) & set(exact_ids)) / len(exact_ids)

def benchmark_recall(index, brute_force, queries, k=10):
    recalls = []
    for q in queries:
        approx = index.search(q, k)
        exact = brute_force.search(q, k)
        recalls.append(compute_recall(approx, exact))
    print(f'Mean recall@{k}: {sum(recalls)/len(recalls):.3f}')

Система выбора подходящего решения

Используйте это дерево решений: если вам не нужно управлять инфраструктурой и бюджет не ограничен, выберите Pinecone. Если вы уже используете PostgreSQL, а ваш набор данных содержит менее 10 млн векторов, добавьте pgvector. Для самостоятельного размещения решения с открытым исходным кодом и сложной фильтрацией данных выберите Qdrant. Для быстрого прототипирования и локальной разработки начните с Chroma, а позже выполните миграцию. Для автономных пакетных задач в масштабе миллиардов векторов используйте FAISS.

Быстрая проверка

Проверьте своё понимание концепций инженерии ИИ из этого урока.

Итоги урока

В этом уроке вы изучили ландшафт векторных хранилищ, включающий Pinecone, pgvector, Chroma, Qdrant, Weaviate и FAISS, пять параметров оценки: задержку, пропускную способность, фильтрацию, сложность и стоимость, а также практическую систему выбора подходящего хранилища на основе требований к инфраструктуре и масштабу. Далее мы рассмотрим проблему, для решения которой был создан RAG.

Часто задаваемые вопросы

Урок «Выбор и сравнительное тестирование векторных хранилищ» бесплатный?

Да — полный текст урока «Выбор и сравнительное тестирование векторных хранилищ» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Engineering Academy, подпишись на CoddyKit PRO. Курс AI Engineering Academy содержит 4 уроков всего.

Чему я научусь в уроке «Выбор и сравнительное тестирование векторных хранилищ»?

Сравните Pinecone, pgvector, Chroma, Weaviate и Qdrant по стоимости, задержке, возможностям фильтрации и сложности эксплуатации, чтобы выбрать подходящий инструмент для своей задачи. Ты практикуешь AI Engineering Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AI Engineering Academy?

Предыдущий опыт не требуется. AI Engineering Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Выбор и сравнительное тестирование векторных хранилищ»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AI Engineering Academy?

Да. Каждый урок AI Engineering Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужна векторная база данных
  2. Начало работы с Pinecone
  3. pgvector: эмбеддинги в PostgreSQL
  4. Выбор и сравнительное тестирование векторных хранилищ
← Назад к AI Engineering Academy