# Документация БД ### Интро Модуль *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 ``` --- ### Схема Актуальная схема базы данных приведена снизу: ![](https://i.imgur.com/Aai9RT1.jpg) Модели всех вышеуказанных таблиц наследуются от классов **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**