Skip to content

База данных

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

$ python -m venv /some/.venv
...
$ source /some/.venv/activate
  • Установите пакет data-rentgen со следующими дополнительными зависимостями:
$ pip install data-rentgen[postgres]
...
/some/.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 заполнения данными Структура