# Хранилище и кэш

Раздел описывает работу с базой данных, правила кэширования результатов провайдеров и требования к консистентности данных.

## Кэширование ответов

- Результаты запросов к провайдерам сохраняются вместе с типом индикатора и именем сервиса, что позволяет повторно использовать данные при идентичном запросе.
- Повторные обращения обновляют существующие записи для предотвращения роста дубликатов и ускорения обработки одинаковых индикаторов.
- Доступ к кэшу выполняется перед сетевыми вызовами; при наличии актуальной записи запрос к внешнему провайдеру пропускается.

## Работа с базой данных

- Используется асинхронный SQLAlchemy; соединения создаются на этапе запуска и передаются воркерам для чтения и записи.
- Таблицы содержат поля для полезной нагрузки в формате JSON, статусов и временных меток, что упрощает анализ истории запросов.
- После миграций выполняется синхронизация последовательностей идентификаторов для предотвращения конфликтов при вставке новых строк.

## Управление данными задач

- Для кэшируемых задач результаты остаются доступными через API после завершения обработки, пока сохраняются записи в БД.
- Для временных задач данные удерживаются в оперативной памяти и очищаются вместе с очередью, если не отмечены для кэширования.
- Ошибки записи фиксируются в статусе задачи и приводят к завершению с состоянием `error` с сохранением текстового описания проблемы.
