# Документация БД
### Интро
Модуль *Aggregator* использует **PostgreSQL** как основую реляционную базу данных. Образ `postgres:13` собирается и запускается в контейнере `pgdb` общего нетворка`local_net`. Параметры запуска определяются `.env`файлом, содержимое которого приведено ниже:
```
POSTGRES_PASSWORD=password12345
POSTGRES_USER=postgres
POSTGRES_DB=aggregator
```
Активировать терминальный клиент **psql** внутри контейнера `pgdb` удобно с помощью следующей команды:
```
$ docker exec -it pgdb psql -U postgres
```
---
### Схема
Актуальная схема базы данных приведена снизу:

Модели всех вышеуказанных таблиц наследуются от классов **IDModelMixin** и **CoreRecord**, которые присваивают им поля **id** `SERIAL NOT NULL PRIMARY KEY` и **camera_id** `VARCHAR(50) NOT NULL` соответственно
---
Таблица **traffic_aggregation_queue** хранит в себе *traffic flow* данные, получаемые с модулей EV-Traffic. *Traffic flow* запись определяется следующими полями:
* **car_intensity** *INTEGER* - интенсивность потока
* **avg_velocity_km_h** *FLOAT* - средняя скорость потока
* **queue_length_cars** *JSONB* - количество транспортных средств на полосе движения находящихся в пробке
Таблица **matrix_aggregation_queue** хранит в себе *correspondance matrix* данные, получаемые с модулей EV-Matrix. *Correspondance matrix* запись определяется единственным полем **car_flow_distribution** типа *JSONB*, которое фиксирует распределение потока транспортных средства на перекрестке
Таблица **cv_logs** сохраняет все данные, приходящие от модуля *MMCV*
---
### Celery-задачи
* **grab_redis_data** — достает *N* последних сообщений от *MMCV* модуля из брокера сообщений и сохраняет их в БД, разделяя их на **traffic** и **matrix** данные
* **aggregate_{traffic/matrix}_data** — достает необработанные данные из таблицы **{traffic/matrix}_aggregation_queue**, аггрегирует их, и сохраняет как обработанные
* **clear_processed_data** — удаляет обработанные (`processed = 't'`) записи, **timestamp** которых устарел более чем на 24 часа (**CLEARING_DELTA**) у таблиц ***_aggregation_queue**