私は現在、データベースから大量のデータをロードし、状況に応じてさまざまな計算によってはるかに小さなセットに削減する 1 つのモジュールを持つアプリケーションを設計しています。
より集中的な操作の多くは決定論的に動作し、並列処理に適しています。
データベースから到着する多数のデータチャンクを反復処理するループがあり、それぞれが副作用なしで決定論的関数を呼び出す場合、プログラムが関数が戻るのを待たずに設定するようにするにはどうすればよいですか次の呼び出しが行われるので、それらを並行して処理できますか? 原則を実証するための単純なアプローチは、今のところ私に適しています。
私は Google の MapReduce の論文を読みました。全体的な原則をさまざまな場所で使用できますが、今のところ、大規模なクラスターをターゲットにすることはしません。バージョン 1.0 の単一のマルチコアまたはマルチ CPU マシンになる予定です。 . そのため、現在、ライブラリを実際に使用できるかどうか、または自分でレベルを下げた基本バージョンを作成する必要があるかどうかはわかりません。
私は設計プロセスの初期段階にあり、これまでのところ言語として C 言語 (速度が重要な部分) と Python (生産性が重要な部分) をターゲットにしています。やむを得ない理由があれば乗り換えるかもしれませんが、今のところ自分の選択に満足しています。
現在のチャンクを処理するよりもデータベースから次のチャンクを取得する方が時間がかかり、プロセス全体が I/O バウンドになる可能性があるという事実を認識していることに注意してください。ただし、現時点ではそうではなく、実際には db クラスターまたはメモリ キャッシュなどを使用して、この時点で I/O バウンドにならないようにします。