К основному содержимому

Qdrant на VDS: высокопроизводительная векторная БД

AI-агенты на VDS · 19.04.2026 · 4 мин чтения
Иллюстрация к статье «Qdrant на VDS: высокопроизводительная векторная БД»

Что такое Qdrant?

Qdrant — высокопроизводительная open-source векторная база данных, написанная на Rust. Поддерживает миллиарды векторов, гибкую фильтрацию по метаданным и работает как отдельный сервис с REST и gRPC API.

Установка через Docker

docker run -d \
  --name qdrant \
  -p 6333:6333 \
  -p 6334:6334 \
  -v qdrant_storage:/qdrant/storage \
  --restart always \
  qdrant/qdrant

Работа с Qdrant из Python

>pip install qdrant-client
from qdrant_client import QdrantClient
from qdrant_client.models import Distance, VectorParams, PointStruct

client = QdrantClient(host="localhost", port=6333)

# Создание коллекции
client.create_collection(
    collection_name="kb_articles",
    vectors_config=VectorParams(size=768, distance=Distance.COSINE)
)

# Добавление векторов
client.upsert(
    collection_name="kb_articles",
    points=[
        PointStruct(id=1, vector=[0.1]*768, payload={"text": "Установка VDS"}),
    ]
)

# Поиск
results = client.search(
    collection_name="kb_articles",
    query_vector=[0.1]*768,
    limit=5
)
for r in results:
    print(r.payload["text"], r.score)

Интеграция с LangChain

from langchain_community.vectorstores import Qdrant
from langchain_community.embeddings import OllamaEmbeddings

embeddings = OllamaEmbeddings(model="nomic-embed-text")
db = Qdrant.from_documents(
    docs,
    embeddings,
    url="http://localhost:6333",
    collection_name="my_docs"
)
retriever = db.as_retriever(search_kwargs={"k": 4})
Web UI Qdrant: Откройте http://IP:6333/dashboard для визуального управления коллекциями и поиска векторов.

Частые ошибки при работе с Qdrant

«Wrong input: Vector dimension error»

Bad request: Wrong input: Vector dimension error: expected dim: 768, got 1536

Размерность вектора в коллекции жёстко задаётся при её создании через VectorParams(size=...) и не может отличаться от размерности эмбеддингов, которые вы реально отправляете. Ошибка возникает, если сменили модель эмбеддингов (например, с 768-мерной на 1536-мерную), но не пересоздали коллекцию.

Контейнер стартует, но порт 6333 недоступен снаружи

curl: (7) Failed to connect to IP port 6333: Connection refused

Проверьте, что порт действительно проброшен в команде запуска (-p 6333:6333), а не только объявлен в конфиге, и что firewall на VDS не блокирует внешние подключения к этому порту.

Данные исчезли после пересоздания контейнера

Если контейнер запущен без volume для /qdrant/storage, все коллекции живут только внутри контейнера и теряются при его удалении. Проверяйте флаг -v qdrant_storage:/qdrant/storage в команде запуска перед тем, как загружать в базу продакшн-данные.

gRPC-клиент не может подключиться, хотя REST работает

grpc._channel._InactiveRpcError: failed to connect to all addresses

У Qdrant два независимых порта: 6333 для REST и 6334 для gRPC. Если клиентская библиотека настроена на gRPC-режим, а проброшен и открыт только порт 6333, соединение падает именно так. Проверьте, какой протокол реально использует ваш клиент, и откройте оба порта, если нужен gRPC.

Qdrant, Chroma и pgvector: что выбрать

Все три хранилища решают задачу поиска по векторам, но рассчитаны на разный объём данных и разную степень интеграции с уже существующей базой.

КритерийQdrantChromapgvector
Целевой объём данныхМиллионы и большеНебольшие и средниеСредние, вместе с реляционными данными
Отдельный сервисДаОпциональноНет, расширение PostgreSQL
Фильтрация по метаданнымГибкаяБазоваяЧерез обычный SQL
Протоколы доступаREST и gRPCPython-клиент или HTTPSQL

Когда Qdrant избыточен

Мощь продакшн-ориентированной базы на Rust становится накладными расходами там, где хватило бы значительно более простого решения.

  • Прототип или пет-проект с парой тысяч документов — держать отдельный сервис ради такого объёма нерационально, хватит embedded-режима Chroma
  • Данные уже живут в PostgreSQL и векторный поиск нужен как дополнение — логичнее взять pgvector и не плодить лишнюю инфраструктуру
  • На VDS и так впритык с ресурсами — Qdrant как отдельный процесс требует дополнительной памяти сверх приложения
  • Нет задачи с фильтрацией по сложным метаданным при поиске — простого векторного индекса в существующей базе достаточно
  • Команда не готова администрировать ещё один отдельный сервис с собственным жизненным циклом и бэкапами

Проверка результата

Перед подключением продакшн-нагрузки стоит проверить не только сам поиск, но и устойчивость данных к перезапуску.

  1. Создайте коллекцию и добавьте тестовый набор векторов
  2. Выполните поиск и убедитесь, что возвращаются ожидаемые ближайшие соседи с разумным score
  3. Откройте дашборд /dashboard и проверьте, что коллекция и число точек в ней отображаются верно
  4. Перезапустите контейнер и убедитесь, что данные не пропали
  5. Проверьте оба порта — 6333 и 6334 — если приложение использует и REST, и gRPC

По теме: более простая база для старта — Chroma DB на VDS, полное сравнение вариантов — векторные базы данных, поиск прямо в PostgreSQL — pgvector.

Статья помогла?
← Назад в базу знаний Задать вопрос поддержке