Перейти к содержанию

Хранилища данных

Серверная часть использует два внешних хранилища: базу данных MongoDB для структурированных сведений и хранилище MinIO для файлов.

MongoDB

Подключение

Подключение к MongoDB выполняется через асинхронную библиотеку Motor. При запуске приложения создаётся единственный экземпляр клиента, который используется всеми маршрутами и сервисами.

Адрес и имя базы данных задаются переменными MONGODB_URL и MONGODB_DATABASE (подробнее --- в разделе Конфигурация).

При подключении автоматически создаются индексы во всех коллекциях для ускорения частых запросов.

Коллекции

Коллекция Назначение Основные индексы
jobs Задания на обработку (каждый загруженный файл) status, created_at
documents Распознанные документы с извлечёнными полями job_id, doc_type, (job_id + page_start)
templates Шаблоны типов документов doc_type, (doc_type + doc_subtype)
archive_files Записи о файлах в архиве path, status, (path + file_size)
archive_folders Записи о папках в архиве path
folder_processing Состояние обработки папок process_id, status, folder_path
registries Реестры (загруженные файлы Excel) (создаются при использовании)
registry_rows Строки реестров с данными сопоставления registry_id, (registry_id + status)
settings Настройки программы (единственный документ app_settings) (без специальных индексов)
yandex_imports Записи об импортах с Яндекс.Диска (создаются при использовании)

Как используются коллекции

jobs --- каждый загруженный PDF-файл создаёт одно задание. Задание проходит через статусы: pending (ожидает обработки) → processing (обрабатывается) → completed (завершено) или error (ошибка). В задании хранятся имя исходного файла, путь в хранилище, количество страниц, время создания и обновления.

documents --- результат обработки задания. Один PDF-файл может содержать несколько документов. Для каждого хранятся: тип и подтип документа, извлечённые поля (номер, дата, контрагент, сумма и другие), номера страниц, ссылки на изображения страниц в MinIO.

registries --- каждый загруженный файл Excel создаёт один реестр. В реестре хранятся: имя файла, настройки маппинга (какие колонки Excel соответствуют каким полям документа), правила сопоставления, статус обработки, статистика по совпадениям.

registry_rows --- строки реестра с исходными и приведёнными значениями. Для каждой строки хранятся: ссылка на реестр, исходные значения ячеек, приведённые значения, найденные совпадения с документами, балл совпадения, статус подтверждения.

settings --- единственный документ с идентификатором app_settings, содержащий текущий режим обработки, выбранную модель распознавания, список полей для поиска, список месторождений с ключевыми словами.

Доступ из разных частей системы

  • Серверная часть (FastAPI) обращается к MongoDB асинхронно через библиотеку Motor. Все операции неблокирующие.
  • Фоновый обработчик (Celery) работает в отдельном процессе и использует синхронный драйвер PyMongo. При запуске обработчика выполняется сброс зависших задач (подробнее --- в разделе Структура серверной части).

MinIO

Подключение

MinIO --- S3-совместимое хранилище объектов. Серверная часть подключается к нему через официальную библиотеку minio.

При запуске создаются два клиента:

  • Внутренний --- для операций загрузки и скачивания файлов. Использует внутренний адрес контейнера (MINIO_ENDPOINT).
  • Публичный --- для формирования временных ссылок на скачивание. Использует публичный адрес (MINIO_PUBLIC_ENDPOINT), чтобы подпись ссылки была действительна при обращении из браузера пользователя.

Все операции с MinIO выполняются в отдельном пуле из четырёх потоков, чтобы синхронные вызовы библиотеки не блокировали асинхронный цикл обработки событий FastAPI.

Хранилища (buckets)

Хранилище Назначение
uploads Исходные загруженные PDF-файлы. Файл попадает сюда сразу после загрузки пользователем
documents Изображения отдельных страниц после разделения PDF. Каждая страница сохраняется как отдельное изображение
previews Миниатюры страниц для быстрого предпросмотра в интерфейсе
originals Архив оригиналов файлов. Используется при работе с деревом папок архива

Все четыре хранилища создаются автоматически при первом запуске приложения, если их ещё не существует.

Операции с файлами

Серверная часть предоставляет набор асинхронных функций для работы с MinIO:

Операция Описание
Загрузка файла Сохраняет данные в указанное хранилище, возвращает путь вида bucket/object_name
Скачивание файла Возвращает содержимое файла в виде массива байтов
Получение временной ссылки Формирует ссылку на скачивание, действующую 24 часа. Используется для просмотра оригиналов в браузере
Удаление файла Удаляет один файл из хранилища
Удаление по префиксу Удаляет все файлы с заданным префиксом (например, все страницы одного задания)
Список файлов Возвращает список имён файлов в хранилище с заданным префиксом
Проверка существования Проверяет, существует ли файл, без скачивания его содержимого

Путь файла в хранилище

Файлы организованы по идентификатору задания. Например, для задания с идентификатором abc123:

  • исходный PDF: uploads/abc123.pdf
  • изображение страницы 1: documents/abc123/page_001.png
  • миниатюра страницы 1: previews/abc123/page_001.png