Короткая речь: Как заставить сотни одновременно запущенных процессов взаимодействовать с базой данных через один или несколько постоянных сеансов?
Вся история:
Однажды я создал механизм обработки чисел, который обрабатывает огромное количество больших файлов данных, отбрасывая одного ребенка за другим, давая каждому небольшое количество файлов для работы. Блокировка файлов, мониторинг прогресса и распространение результатов происходят в базе данных Oracle, к которой все (под) процессы обращаются в разное время, используя специальный модуль приложения, который инкапсулирует DBI.
Поначалу это работало хорошо, но теперь при больших объемах входных данных, количество сессий базы данных (по одному на каждого ребенка, и они могут быть очень кратковременными), постоянно открытых и закрытых, становится проблемой. Теперь я хочу централизовать доступ к базе данных, чтобы был только один или несколько фиксированных сеансов базы данных, которые обрабатывают весь доступ к базе данных для всех (под) процессов. Наличие модуля абстракции базы данных должно облегчить внесение изменений, поскольку вызовы функций в рабочих экземплярах могут оставаться неизменными. Моя проблема в том, что я не могу придумать подходящий способ усовершенствования указанного модуля, чтобы установить связь между всеми процессами и соединителем (ями) базы данных.
Я думал об организации очереди сообщений, но не смог придумать способ соединения большого стада запрашивающих с одним или несколькими соединителями базы данных таким образом, чтобы была возможна двунаправленная связь (для сбора результата запроса).
Асинхронный подход может помочь здесь в том, что все запросы записываются в одну и ту же очередь, а соединитель базы данных, обслуживающий запрос, будет «перезванивать» для отправки результата. Но мой разум не позволяет мне генерировать достаточно четкое изображение, чтобы я мог рисовать в коде.
Потоки вместо разветвления могли бы дать мне более легкое начало, но теперь это потребовало бы значительных изменений в кодовой базе, которые я не готов сделать с живой системой.
Чем больше я об этом думаю, тем больше базовая идея выглядит для меня как предварительно разветвленный веб-сервер только в том, что он обслуживает не веб-страницы, а запросы к базе данных. Любые идеи о том, что копать, и где? Образец (псевдо) кода, чтобы вдохновить меня, ссылки на возможные связанные статьи, готовые решения по CPAN, может быть?