СервераNEURO CORE
Хранилища
MongoDB и Qdrant — что где лежит, как связаны и почему их два.
Данные разделены между двумя хранилищами по типу нагрузки: документы и агрегации — MongoDB, векторный поиск — Qdrant.
Векторы только в Qdrant
Поля embedding в MongoDB нет. Векторы живут только в Qdrant. Связь —
общий chunk_id / doc_id.
MongoDB
Все бизнес-данные, обезличенные: ключ пользователя — технический / анонимный ID, полей ФИО и контактов в схеме нет.
| Коллекция | Ключевые поля | Заметки |
|---|---|---|
users | technical_id, school_code, class_code, role | без ПДн |
courses | title, modules[], schedule, status | контент и расписание |
progress | technical_id, course_id, module, status | прохождение |
sessions | session_id, anonymous_user_id, scenario | диалоги ассистента |
messages | session_id, role, text, ts | растёт → отдельная коллекция |
recommendations | profiles[], professions[], routes[] | результат профориентации |
analytics_events | tags[], sabotage_score, period | обезличенная аналитика |
documents | doc_id, source, format, status, chunk_count | реестр ingest |
knowledge_chunks | chunk_id, doc_id, chunk_index, text, source | текст и мета, без вектора |
Индексы заводятся миграциями под реальные запросы дашбордов — уровни агрегации описаны в Аналитике.
Qdrant
Коллекция knowledge: одна точка = один чанк.
collection: knowledge
vector: { size: <размерность Qwen3-Embedding>, distance: Cosine }
point:
id: chunk_id // тот же, что в MongoDB
vector: [...] // Qwen3-Embedding
payload: { doc_id, chunk_index, text, source, section, format }- Текст чанка дублируется в payload — ретрив не ходит в MongoDB за текстом.
- Payload-поля для фильтрации (
doc_id,source,format) — с индексом. - Смена модели эмбеддингов → пересоздание коллекции и полный реиндекс.
Правила работы с хранилищами
| Правило | Причина |
|---|---|
| Пишет только NEURO CORE Service | Единая точка контроля и аудита |
| Ingest идемпотентен в обеих базах | Задача очереди может повториться |
Сначала удаление по doc_id, потом запись | Иначе дубли чанков в выдаче |
| Обе базы слушают localhost | Снаружи сервера не существует |
Аудит и ретеншн
- Бизнес-журналы (действия, диалоги ИИ, аудит) — MongoDB; технические логи — Loki.
- Аудит: архив после 90 дней, хранение один год.
- Бэкапы: цикл 30 дней, глубина не менее года. Snapshot Qdrant — вместе с бэкапом MongoDB; при рассинхроне векторы восстановимы реиндексом.