2016-08-08 6 views
0

Я думаю об инфраструктуре процесса, где много рабочих процессов будет создано из одного мастер-процесса. Каждый рабочий выполнит одну длинную задачу и будет убит после того, как закончит свою задачу. В течение 24 часов будет около 100000 задач. Это не будет проблемой, пока мне не нужно будет записать результат задач в базу данных postgres, потому что это приведет к 100000 отдельных подключений к базе данных в день.Ruby Multi Process Postgress Connections

Итак, мой вопрос: есть ли способ обработать что-то вроде пула соединений в основном процессе и передать подключение к дочернему процессу? И это будет возможно, что ребенок не закроет соединение, пока он не закончит (потому что владелец процесса является мастер-процесс)

ответ

0

PostgreSQL имеет по крайней мере два часто используемых соединений poolers:

pgbouncer - https://pgbouncer.github.io/features.html

и

PGPool - http://www.pgpool.net/mediawiki/index.php/Documentation

Оба из которых имеют свои собственные наборы функций. Оцените и то, и другое, что наиболее подходит вам. Например, вы можете использовать пул транзакций pgbouncer, чтобы вы только порождали соединение, пока один из дочерних работников обрабатывает. Как только этот процесс будет завершен, он вернет соединение обратно в пул. Похоже, вам понадобится несколько пулов соединений для обработки этого количества параллелизма.