长话短说:如何让数百个同时运行的进程通过一个或几个永久会话与数据库通信?
整个故事:
我曾经构建了一个数字处理引擎,它通过一个接一个地分叉一个子节点来处理大量的大数据文件,给每个子节点少量的文件来处理。文件锁定、进度监控和结果传播发生在 Oracle 数据库中,所有(子)进程使用封装 DBI 的特定于应用程序的模块在不同时间访问。
起初这很有效,但现在随着输入数据量的增加,不断打开和关闭的数据库会话数量(每个孩子一个,而且它们的寿命可能很短)已成为一个问题。我现在想集中数据库访问,以便只有一个或几个固定数据库会话处理所有(子)进程的所有数据库访问。数据库抽象模块的存在应该使更改变得容易,因为工作实例中的函数调用可以保持不变。我的问题是我想不出一种合适的方法来增强所述模块,以便在所有进程和数据库连接器之间建立通信。
我想到了消息队列,但无法想出一种方法将一大群请求者与一个或几个数据库连接器连接起来,以便可以进行双向通信(用于收集查询结果)。
异步方法在这里可以提供帮助,因为所有请求都写入同一个队列,并且为请求提供服务的数据库连接器将“回调”以提交结果。但是我无法生成足够清晰的图像以便我可以将其绘制成代码。
线程而不是分叉可能让我更容易开始,但这现在需要对代码库进行大量更改,而我不准备对实时系统进行更改。
我想得越多,基本想法对我来说就越像是一个预分叉的 Web 服务器,只是它不提供网页而是提供数据库查询。关于挖掘什么以及在哪里挖掘的任何想法?启发我的示例(伪)代码,可能相关文章的链接,CPAN 上的现成解决方案可能吗?