開始時または終了時にデータのストリームをフィルタリングする方が良いですか?
-
06-07-2019 - |
質問
私は、膨大な量(複数ギガバイト)のコンマ区切り値(CSV)ファイルを処理する必要があるプロジェクトに取り組んでいます。
基本的に私がやることは次のとおりです。
- 方法を知っているオブジェクトを作成する 関連ファイルをすべて読む
- このオブジェクトに、データに関心のあるリスナーのセットを登録します
- 各ファイルの各行を読み取り、データ行から作成されたオブジェクトをディスパッチします 各リスナーへ
- 各リスナーは、このデータが有用であるか関連性があるかを判断します
代わりにソース側でフィルタリングする方が良いかどうか疑問に思っています。各リスナーには、特定のデータをリスナーにディスパッチするかどうかを決定する関連付けられたPredicateオブジェクトがあります。この場合、プロセスは次のようになります
- 方法を知っているオブジェクトを作成する 関連ファイルをすべて読む
- このオブジェクトにペアのセットを登録します
- 各ファイルの各行を読み取り、データ行から作成されたオブジェクトをディスパッチします 関連付けられたPredicateがデータに対してtrueを返す場合、各リスナーに
最終的な効果は同じです。フィルタリングがどこで行われるかだけです。
(繰り返しますが、一度に1つのエントリを処理するデータのこの「ストリーム」を持っている唯一の理由は、ギガバイトのCSVファイルを扱っているためです。コレクションを作成したり、フィルタリングしたり、それに対処する-私は行くようにフィルタリングする必要があります)
解決
リスナーへの呼び出しのコストが莫大でない限り(リモーティング、WCF、...)、私は本当にシンプルなインターフェースのままで、リスナーに行の処理を決定させます。
所属していません StackOverflow