長いスピーチの短い: 1 つまたはいくつかの永続的なセッションを介して、同時に実行されている何百ものプロセスがデータベースと通信するようにするにはどうすればよいですか?
全体的な話:
私はかつて、膨大な量の大きなデータ ファイルを処理する数値演算エンジンを構築しました。このエンジンは、子プロセスを次々と分岐させて、それぞれに少数のファイルを処理させました。ファイルのロック、進行状況の監視、および結果の伝播は、DBI をカプセル化するアプリケーション固有のモジュールを使用して、すべての (サブ) プロセスがさまざまな時点でアクセスする Oracle データベースで発生します。
これは最初はうまく機能していましたが、入力データの量が増えているため、データベース セッションの数 (子ごとに 1 つ、存続期間が非常に短い可能性があります) が絶えず開いたり閉じたりすることが問題になりつつあります。すべての (サブ) プロセスのすべてのデータベース アクセスを処理する固定データベース セッションが 1 つまたは少数になるように、データベース アクセスを集中化したいと考えています。データベース抽象化モジュールの存在により、ワーカー インスタンスでの関数呼び出しが同じままで済むため、変更が容易になります。私の問題は、すべてのプロセスとデータベースコネクタ間の通信を確立するために、上記のモジュールを拡張する適切な方法を考えられないことです。
メッセージ キューイングを考えましたが、大量のリクエスタを 1 つまたは少数のデータベース コネクタに接続して、双方向通信が可能になる方法 (クエリ結果を収集するため) を思いつきませんでした。
ここでは、すべてのリクエストが同じキューに書き込まれ、リクエストを処理するデータベース コネクタが「コールバック」して結果を送信する非同期アプローチが役立ちます。しかし、私の心は、コードにペイントできるほど明確なイメージを生成することができません。
フォークの代わりにスレッド化したほうが簡単に始められたかもしれませんが、これにはコード ベースに大規模な変更が必要になり、実際のシステムに対して行う準備ができていません。
考えれば考えるほど、基本的なアイデアは、Web ページではなくデータベース クエリを提供するという点だけで、事前にフォークされた Web サーバーのように見えます。何をどこで掘り下げるかについてのアイデアはありますか? 私にインスピレーションを与えるサンプル(疑似)コード、おそらく関連する記事へのリンク、CPANの既製のソリューションでしょうか?