Qdrant - Vector Database
Установка и первый запуск
Цели урока
- Запустить Qdrant через Docker с персистентным хранилищем
- Подключиться к Qdrant Cloud и понять ограничения бесплатного tier
- Работать с REST API, gRPC и Web UI
- Выбрать правильный SDK для TypeScript и Python проектов
Предварительные знания
В 2017 году Facebook AI Research выпустил FAISS - первую серьёзную библиотеку для vector similarity search. Но FAISS был C++ библиотекой без HTTP API и без distributed mode. Прошло 4 года - и появился Qdrant. Один `docker run` отделяет от production-ready vector database с REST API, gRPC, фильтрацией и горизонтальным масштабированием.
- **Local development** - Docker + docker-compose, данные на диске, healthcheck
- **CI/CD тесты** - Docker без volume, ephemeral, чистый старт каждый раз
- **Стартап без DevOps** - Qdrant Cloud free tier, быстрый старт за 5 минут
- **Production** - self-hosted Kubernetes с Helm chart или Qdrant Cloud paid tier
- **RAG приложения** - embeddings от OpenAI (1536d), поиск похожих документов через REST API
От FAISS к production-ready vector databases
FAISS появился в 2017 как C++ библиотека для approximate nearest neighbor search. Это был breakthrough для ML-исследований, но не production инструмент: нет HTTP API, нет горизонтального масштабирования, нет payload-фильтров. В 2021 появился Qdrant на Rust - с REST/gRPC API, distributed mode и фильтрацией. Это перевело vector search из ML-лабораторий в mainstream backend разработку.
Запуск через Docker
**Qdrant распространяется как Docker-образ** - самый быстрый способ начать. Один контейнер, два порта: 6333 (REST + Web UI) и 6334 (gRPC). Через 30 секунд после `docker run` - работающая vector database с полноценным HTTP API и интерактивным интерфейсом.
От FAISS к production-ready vector databases
FAISS (Facebook AI Similarity Search) появился в 2017 году - первая production-ready библиотека для approximate nearest neighbor search. Но FAISS - это C++ библиотека, не сервер. Не было HTTP API, не было горизонтального масштабирования, не было payload-фильтров. В 2021 году появился Qdrant - написанный на Rust, с REST/gRPC API, distributed mode из коробки и фильтрацией по payload. Это перевело vector search из области ML-лабораторий в mainstream production.
**Конфигурация через переменные окружения** - все настройки из `config.yaml` доступны через `QDRANT__SECTION__PARAM`. Двойное подчёркивание - разделитель уровней вложенности.
**Хранилище на диск обязательно** для production. Без volume данные исчезнут при перезапуске контейнера. `-v $(pwd)/qdrant_storage:/qdrant/storage` монтирует локальную папку.
Qdrant запущен командой `docker run -p 6333:6333 qdrant/qdrant` и контейнер перезапущен. Что произошло с данными?
Qdrant Cloud - managed вариант
**Qdrant Cloud** - официальный managed сервис. Бесплатный tier: 1 cluster, 1GB RAM, 4GB диска. При размерности векторов 1536 (OpenAI `text-embedding-3-small`) - это ~100-150K векторов с учётом HNSW overhead. Регионы: AWS (US/EU), GCP, Azure.
**Когда выбирать Cloud vs self-hosted?** Cloud - когда нет DevOps ресурсов или нужен быстрый старт без настройки инфраструктуры. Self-hosted - при требованиях к data residency, кастомной конфигурации, или при наличии Kubernetes/Docker инфраструктуры.
Бесплатный tier Qdrant Cloud даёт 1GB RAM. При размерности векторов 1536 (OpenAI), сколько приблизительно векторов можно хранить?
REST API, gRPC и Web UI
**Qdrant предоставляет три интерфейса.** REST API - стандарт для большинства клиентов, curl-friendly, легко отлаживать. gRPC - для high-throughput сценариев, в 2-3 раза быстрее по latency за счёт Protocol Buffers. Web UI - для быстрой инспекции данных и отладки без единой строки кода.
**Web UI** доступен на `http://localhost:6333/dashboard`. Позволяет просматривать коллекции, исследовать точки, делать поисковые запросы через графический интерфейс и мониторить производительность.
**OpenAPI документация** автоматически доступна на `http://localhost:6333/openapi`. Импортировать в Postman или Insomnia для интерактивного изучения API.
Когда стоит использовать gRPC вместо REST API в Qdrant?
Клиентские библиотеки
**Официальные SDK** покрывают основные языки. TypeScript/JavaScript - для Node.js бэкендов и AI-приложений. Python - для ML/AI скриптов и Jupyter notebooks. Rust - для максимальной производительности. Go - для системных сервисов.
**В Python-скриптах** для генерации embeddings удобно использовать `qdrant_client` вместе с `sentence-transformers` или `openai`. В NestJS - `@qdrant/js-client-rest` с собственным сервисом-обёрткой. Урок qd-25 покрывает полную интеграцию NestJS + Qdrant.
В NestJS проекте нужен Qdrant. Какой пакет установить?
Ключевые идеи
- **Docker запуск** - `docker run -p 6333:6333 qdrant/qdrant`. Без `-v` данные эфемерные, с `-v` - персистентные
- **Три интерфейса:** REST (:6333) для обычной работы, gRPC (:6334) для высокого throughput при batch upsert, Web UI (:6333/dashboard) для отладки
- **Qdrant Cloud** - бесплатный tier 1GB RAM (~100-150K векторов при размерности 1536), быстрый старт без DevOps
- **TypeScript SDK** - `@qdrant/js-client-rest`, `QdrantClient` - единый API для self-hosted и Cloud
- 1536 float32 векторов = ~6KB на вектор; HNSW индекс удваивает потребление памяти
- Следующий шаг: создать первую коллекцию и загрузить данные
Что дальше
Qdrant запущен - теперь создадим коллекцию и разберём все параметры конфигурации.
- Первая коллекция — VectorParams, distance, HNSW config - всё что нужно знать при создании
- HNSW индекс — Алгоритм, обеспечивающий O(log n) поиск по миллиардам векторов
Вопросы для размышления
- Чем отличается docker-compose подход от docker run для production? Что добавляет docker-compose?
- Когда бесплатного tier Qdrant Cloud перестанет хватать? Какие метрики отслеживать?
- При команде из 3 разработчиков - как организовать общий dev-инстанс Qdrant?
Связанные уроки
- qd-01-intro — Что такое vector search и зачем он нужен
- qd-03-collections — Первая коллекция, VectorParams, distance metrics
- qd-06-hnsw — HNSW индекс - алгоритм за vector search в Qdrant
- aie-10-vector-databases — Сравнение Qdrant, Pinecone, Weaviate, pgvector
- qd-25-nestjs — Полная интеграция Qdrant с NestJS
- pg-02-install-config — Похожий паттерн установки и конфигурации через env переменные
- ml-01-intro