4.0 KiB
4.0 KiB
Временное ТЗ по блоку bookings (для текущей разработки)
Внутренний файл для наставника: поясняет, как устроен источник bookings-db и генерация данных. Студентам обычно не нужен.
- Контейнер
bookings-db— отдельный сервис Postgres изdocker-compose.yml, база по умолчаниюdemo(из upstream demodb), без переименований. - Доступ снаружи не блокируем (порт
5434по умолчанию), чтобы позже читать через PXF и подключаться из Greenplum. - Инициализация (
make bookings-init): поднимает контейнер, клонирует demodb с закреплённым коммитом, накладывает патчи (engine:jobs=1синхронно +busy()игнорирует свой pid;install.sql:DROP DATABASE IF EXISTS), ждётpg_isready, ставитgen.connstrи GUCbookings.start_date/init_days/jobs, затем запускает/bookings/generate_next_day.sqlчерезpsql -f. Значения по умолчанию: стартовая дата 2017-01-01,init_days=1,jobs=1. - Генерация следующего дня:
make bookings-generate-dayпрогоняет тот же SQL (читает GUC, вызываетgenerate/continue, ждётbusy(), закрывает dblink). Приjobs=1всё синхронно, без dblink. - Исходники demodb: клонируем по требованию с фиксированным хешем, кладём в
bookings/demodb/(в.gitignore), патчи лежат вbookings/patches/и применяются автоматически. - Документация: в README описаны команды (
bookings-init, проверка данных, генерация дня), параметры.env; настройка PXF/ETL — следующий этап.
Текущее состояние
Makefileтеперь автоматически применяет патчи (engine_jobs1_sync.patch,install_drop_if_exists.patch), ждёт готовности Postgres черезpg_isready, запускаетinstall.sql, выставляетgen.connstr/GUC и вызываетgenerate_next_day.sqlчерезpsql -f.- Дефолты:
BOOKINGS_START_DATE=2017-01-01,BOOKINGS_INIT_DAYS=1,BOOKINGS_JOBS=1. Приjobs=1генерация идёт синхронно без dblink,busy()не учитывает текущую сессию. .env.example/README обновлены под новые дефолты; каталогbookings/demodb/в.gitignore.- Патчи лежат в
bookings/patches/и накладываются приbookings-clone-demodb.
Текущее состояние тестов/проблем
- Чистый прогон
make bookings-init(послеdocker compose down -vи удаленияbookings/demodb) проходит за ~1,5 минуты: база ставится,busy()→f,bookings.bookingsот2017-01-01 00:00:18до2017-01-01 23:59:59. - Ранее зависание на
busy()приjobs=1лечится патчем:process_queueтеперь синхронный, аbusy()игнорирует текущий backend. - Данных пока только на 1 день по умолчанию, чтобы генерация не занимала много времени.
Идеи/следующие шаги
- Если понадобится больше дней — увеличивать
BOOKINGS_INIT_DAYS, но помнить, что генерация может идти долго; контролировать черезSELECT busy();. - Следующий этап — PXF/ETL в Greenplum; текущая задача — лишь подготовить источник bookings.