База данных
Data.Rentgen использует реляционную базу данных для хранения сущностей происхождения данных и связей между ними.
В настоящее время Data.Rentgen поддерживает только PostgreSQL, поскольку полагается на партиционирование таблиц, полнотекстовый поиск и специфические функции агрегации.
Миграции
После запуска базы данных необходимо выполнить скрипт миграции. Если база данных пуста, он создаст все необходимые таблицы и индексы. Если база данных не пуста, будет выполнено обновление структуры базы данных.
Скрипт миграции — это тонкая обертка над Alembic cli, параметры и команды точно такие же.
Внимание
Другие контейнеры (consumer, server) должны быть остановлены во время выполнения миграций, чтобы предотвратить вмешательство.
Партиции
После выполнения миграций необходимо запустить create-partitions-cli, который создает партиции для некоторых таблиц в базе данных.
По умолчанию он создает ежемесячные партиции для текущего и следующего месяца. Это можно изменить, переопределив аргументы команды.
Этот скрипт должен выполняться по расписанию, в зависимости от гранулярности партиций. Планирование можно выполнить, добавив специальную запись в crontab.
Настоятельно рекомендуется также добавить в cron скрипт очистки старых партиций cleanup-partitions-cli.
Настройка планирования такая же, как и для создания партиций.
Аналитические представления
Вместе с миграциями создается несколько аналитических представлений. Они управляются через refresh-analytic-views-cli и должны выполняться по расписанию.
Заполнение данными
По умолчанию база данных создается без данных. Для заполнения базы данных примерами используйте db-seed-cli.
Требования
- PostgreSQL 12 или выше. Рекомендуется использовать последнюю версию Postgres.
Установка и запуск
С Docker
-
Установите Docker
-
Установите docker-compose
-
Выполните следующую команду:
$ docker compose --profile analytics,cleanup,seed up -d
...
docker-compose загрузит образ PostgreSQL, создаст контейнер и том, а затем запустит контейнер.
Точка входа образа создаст базу данных, если том пуст.
После этого запустится несколько одноразовых контейнеров:
db-create-partitionsсоздаст необходимые партиции в БД.db-cleanup-partitionsочистит старые партиции.db-refresh-viewsобновит аналитические представления.db-seedзаполнит базу данных примерами (необязательно, можно пропустить).
Параметры можно установить через файл .env или секцию environment в docker-compose.yml
docker-compose.yml
1 | |
.env.docker
1 | |
- Добавьте скрипты в crontab:
$ crontab -e
...
0 0 * * * docker compose -f "/path/to/docker-compose.yml" start db-create-partitions db-refresh-views db-cleanup-partitions
Без Docker
-
Для установки PostgreSQL следуйте инструкции по установке.
-
Установите Python 3.10 или выше
-
Создайте виртуальное окружение
$ python -m venv /some/.venv
...
$ source /some/.venv/activate
- Установите пакет
data-rentgenсо следующими дополнительными зависимостями:
$ pip install data-rentgen[postgres]
...
- Настройте
подключение к базе данныхиспользуя переменные окружения, например, создав файл.env:
$ export DATA_RENTGEN__DATABASE__URL=postgresql+asyncpg://data_rentgen:changeme@localhost:5432/data_rentgen
...
А затем прочитайте значения из этого файла:
$ source /some/.env
...
- Выполните миграции:
$ python -m data_rentgen.db.migrations upgrade head
...
Примечание
Эта команда должна выполняться после каждого обновления до новой версии Data.Rentgen.
- Создайте партиции:
$ python -m data_rentgen.db.scripts.create_partitions
...
- Создайте аналитические представления:
$ python -m data_rentgen.db.scripts.refresh_analytic_views
...
- Заполните базу данных примерами данных (необязательно, можно пропустить):
$ python -m data_rentgen.db.scripts.seed
...
- Добавьте скрипты в crontab:
$ crontab -e
...
# читаем настройки из файла .env и запускаем скрипт используя определенное venv со всеми необходимыми зависимостями
0 0 * * * /bin/bash -c "source /some/.env && /some/.venv/bin/python -m data_rentgen.db.scripts.create_partitions"
0 0 * * * /bin/bash -c "source /some/.env && /some/.venv/bin/python -m data_rentgen.db.scripts.cleanup_partitions truncate --keep-after $(date --date='-1year' '+%Y-%m-%d')"
0 0 * * * /bin/bash -c "source /some/.env && /some/.venv/bin/python -m data_rentgen.db.scripts.refresh_analytic_views"
См. также
Конфигурация CLI создания партиций CLI очистки партиций CLI обновления аналитических представлений CLI заполнения данными Структура