Векторная база данных в малых масштабах выглядит коммодити: развернул любую, подключил SDK, работает. Граница, где это ощущение исчезает, лежит около 50–100 миллионов векторов. До этого порога HNSW-индекс умещается в памяти одной машины. После — начинается шардирование, балансировка нагрузки и компромиссы между recall и latency, которые уже нельзя игнорировать.
Для сравнения взяты три наиболее распространённых решения: Pinecone (только managed), Weaviate и Qdrant (доступны в обеих формах). Корпус — 120 миллионов векторов размерности 1024, что соответствует корпоративному RAG-сценарию на средне-крупной компании. Нагрузка: 200 RPS с фильтрами по метаданным, top-50 результатов, ef_search=128 во всех трёх решениях. Это не синтетический нагрузочный тест, а профиль, близкий к тому, что встречается в реальных продакшен-развёртываниях.
Как устроен HNSW и почему настройки важны
HNSW (Hierarchical Navigable Small World) — граф, в котором каждый вектор соединён с несколькими ближайшими соседями на разных уровнях иерархии. Поиск начинается с верхнего уровня (мало узлов, широкие прыжки) и постепенно спускается вниз, сужая кандидатов. Параметр ef_search контролирует ширину луча поиска на каждом уровне: больше — выше recall, но медленнее.
При одинаковом ef_search=128 во всех трёх системах разница в latency объясняется не параметрами индекса, а тем, как каждый движок организует обход графа в памяти, управляет кешированием и обрабатывает фильтры по метаданным. Именно в этой «упаковке» вокруг алгоритма и находится конкурентное преимущество.
Latency p95: Qdrant быстрее, но с оговоркой
На устойчивой нагрузке результаты p95 по времени ответа:
- Qdrant (3 узла, m5.4xlarge): 64 мс
- Pinecone (s1.x16): 87 мс
- Weaviate (3 узла, m5.4xlarge): 102 мс
Qdrant выигрывает за счёт более агрессивной оптимизации HNSW-индекса и эффективного управления памятью — движок написан на Rust, что даёт предсказуемые latency без накладных расходов сборщика мусора. Но у Pinecone есть специфическое поведение на холодном старте: первый запрос после простоя добавляет до 200 мс из-за lazy-загрузки шардов в память. На устойчивой нагрузке эффект пропадает, но это нужно учитывать в сценариях с неравномерным трафиком — утренние всплески после ночного простоя дадут заметные выбросы в p99.
Weaviate показывает наибольшую latency из трёх. Это не означает, что движок хуже сделан — Weaviate изначально проектировался как мультимодальная база с нативной поддержкой текста, изображений и структурированных данных в одной системе. Эта универсальность имеет цену. Для сценариев, где нужна только векторная часть, Weaviate несёт лишний overhead.
Recall: полтора пункта с последствиями
При идентичных параметрах ef_search=128 и метрике recall@10:
- Qdrant: 0,973
- Pinecone: 0,961
- Weaviate: 0,958
Разница в 1–1,5 пункта выглядит небольшой в абстракции. На задачах, где пропуск релевантного документа дорог, это уже не статистика. В юридическом поиске — пропущенный прецедент. В медицинских справочниках — нераспознанный препарат-аналог. В корпоративном compliance-поиске — упущенный регуляторный документ.
Все три решения позволяют улучшить recall за счёт повышения ef_search, но это линейно увеличивает latency. Практический порог: ef_search=256 даёт примерно +0,01 к recall при +40–50% к latency. Для большинства RAG-сценариев это невыгодный обмен — лучше потратить усилие на качество эмбеддингов.
Отдельный сдвиг, который меняет расчёты: за последние шесть месяцев все три системы сделали гибридный поиск (вектор + BM25) стандартным режимом по умолчанию. В 2024 году он был опцией, в 2026-м — базовой конфигурацией. На современных моделях эмбеддингов гибрид на большинстве реальных корпусов обходит чисто векторный поиск — особенно там, где встречаются редкие термины, аббревиатуры и имена собственные, которые сетевые эмбеддинги кодируют неточно. Бенчмаркинг только на ANN без BM25-компоненты даёт неполную картину реального качества поиска.
Стоимость владения: цифры расходятся в 4,3 раза
Pinecone — единственное в сравнении полностью managed-решение без self-hosted-варианта. При 120 миллионах векторов и 200 RPS пиковой нагрузки это около $4800 в месяц по текущим ценам. За эти деньги команда получает полный цикл: развернул, проиндексировал, начал запрашивать за 3–4 часа без участия инженера-инфраструктурщика. Предсказуемый SLA, поддержка, обновления индексирующего слоя — всё включено.
Qdrant в self-hosted на тех же трёх m5.4xlarge обходится примерно в $1100 в месяц только на инфраструктуру. Плюс время инженера: первоначальное развёртывание, настройка мониторинга, обновления при выходе новых версий, инцидент-response при сбое узла. Managed-вариант Qdrant Cloud на сопоставимой нагрузке — около $3200. Weaviate в self-hosted сопоставим с Qdrant по инфраструктурным затратам, managed Weaviate Cloud — около $3600. Операционная зрелость managed-предложения Weaviate в части поддержки и onboarding-опыта пока уступает Pinecone по отзывам практикующих команд.
Соотношение стоимости в крайних вариантах: $1100 (Qdrant self-hosted) против $4800 (Pinecone managed) — разница 4,3×. Для команды с выделенным инфраструктурным инженером арбитраж очевиден. Для команды из трёх разработчиков без инфраструктурного бэкграунда реальная экономия на self-hosted может оказаться отрицательной — время разработчика на поддержку кластера стоит дорого, а векторная база — не та система, которую хочется отлаживать в 2 ночи.
Эксплуатационная зрелость: что не отражается в бенчмарках
Помимо latency и стоимости есть вещи, которые проявляются только в эксплуатации. Pinecone предлагает наиболее зрелый консоль-опыт: наглядная аналитика запросов, просмотр распределения векторов, управление индексами без CLI. Для команд, которые не хотят строить собственные дашборды — это конкретная экономия времени.
Qdrant выделяется инструментами для работы с payload-фильтрацией. Векторный поиск с комплексными фильтрами по метаданным (AND/OR/NOT, range, geo) у Qdrant реализован эффективнее, чем у конкурентов — движок строит отдельные индексы для полей payload и умеет применять фильтры до обхода HNSW, а не после. На задачах с плотной фильтрацией это может существенно изменить реальную latency по сравнению с «чистыми» бенчмарками без фильтров.
Weaviate занимает нишу, когда данные неоднородны: рядом с векторами нужно хранить объекты со сложной схемой, выполнять GraphQL-запросы с join-семантикой, работать с несколькими модальностями. Если требований к такой гибкости нет — преимущества Weaviate не материализуются в реальных задачах.
Кому что подходит
Нагрузки до 50 миллионов векторов с инфраструктурной экспертизой в команде — Qdrant self-hosted с большим отрывом по соотношению цена/качество. Та же нагрузка без инфраструктурных компетенций — Pinecone: overhead на поддержку самоокупается быстрее, чем кажется.
Выше 100 миллионов векторов выбор усложняется. Pinecone предлагает наиболее предсказуемую модель, но $4800+ становятся заметной строчкой в бюджете. Qdrant и Weaviate при правильной эксплуатации дают экономию в 2–3 раза, но требуют серьёзной инфраструктурной зрелости. Зрелость в части оперирования распределёнными HNSW-кластерами — это не тривиальная компетенция, и её отсутствие обнуляет экономию.