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