Template processing: на Postgres + PHP показать работоспособность

Цена договорная
20 января 2020, 09:22 • 4 отклика • 41 просмотр
Здравствуйте!

СИСТЕМА:
~~~~~~~~~
Система из себя представляет Apache-сервер, на который из "интернетов" прилетает bulk-сообщения (вы будете генерить моковые данные на сервере) по нажатию кнопки на HTML-форме.
Сервер процессит их и записывает себе в БД. Процессинг может быть разный (см. таблицы table_processed_step1, table_processed_step2, ...)

ЗАДАЧА:
~~~~~~~
Задача состоит в демонстрации сконфигурированной связки Postgres + Apache (php): для получения макс. скорости обработки десяти тысяч INSERT-ов, которые затем post-процессятся текстовым шаблонизатором (это долгая операция: по 0.5 секунды на 1 строку БД).
Вообще таких postprocessing-ов может быть несколько последовательных, и потому для запуска долгого постпроцессинга нужен единый механизм/подход/архитектура.

Т.о.:
[10.000 rows] -> table_input -> table_processed_step1 [ -> table_processed_step2 -> ... ]

Юзер, нажавший "кнопку", чтобы не заскучал, должен видеть некий feedback: progress bar/крутилка/ счётчик отпроцессенных записей - чтобы знать, что процесс идёт и сервер "не помер".


Мои мысли (могу ошибаться):
- CRON для постпроцессинга неэффективен: ежесекундно CRON вызвать - глупо, а если реже - можно пропустить момент INSERT-ов, Предполагаю запуск POSTPROCESSING-а делать через триггеры, т.к. простой системы в 1 минуту недоспустим.


Поясню на псевдокоде (предлагайте лучший вариант!):
1. $new_rows = insert into TABLE_INPUT ...
2. foreach ($new_rows as $chunk) // как насчёт заюзать триггеры для запуска postprocessing-а?
{
foreach ($chunk as $row) // chunk-и можно обрабатывать транзакцией - как атомарную единицу
{
$text = template_process($row, $template)
insert into TABLE_PROCESSED_STEP1 ($row->id, $text);
}
}


10.000 insert-ов вроде не космос. Также я расчитываю на horizontal scalability по возможности: рекомендуйте, где и как подключить load-балансер (и чем за это придётся заплатить) и т.п.


Схема БД в аттаче. Демо делаете на своём сервере и мне показываете, как сконфигурировать такой же. Можно также просто "поговорить по душам" и чтобы было концептуально, убедительно и обоснованно :)

P.S. нанять сисадмина не интересно: хочу разобраться сам и знать сильные и слабые стороны решения и потенциал развития. По-крайней мере, не на этом этапе.
Файлы