開始時または終了時にデータのストリームをフィルタリングする方が良いですか?

StackOverflow https://stackoverflow.com/questions/1625401

  •  06-07-2019
  •  | 
  •  

質問

私は、膨大な量(複数ギガバイト)のコンマ区切り値(CSV)ファイルを処理する必要があるプロジェクトに取り組んでいます。

基本的に私がやることは次のとおりです。

  1. 方法を知っているオブジェクトを作成する 関連ファイルをすべて読む
  2. このオブジェクトに、データに関心のあるリスナーのセットを登録します
  3. 各ファイルの各行を読み取り、データ行から作成されたオブジェクトをディスパッチします 各リスナーへ
  4. 各リスナーは、このデータが有用であるか関連性があるかを判断します

代わりにソース側でフィルタリングする方が良いかどうか疑問に思っています。各リスナーには、特定のデータをリスナーにディスパッチするかどうかを決定する関連付けられたPredicateオブジェクトがあります。この場合、プロセスは次のようになります

  1. 方法を知っているオブジェクトを作成する 関連ファイルをすべて読む
  2. このオブジェクトにペアのセットを登録します
  3. 各ファイルの各行を読み取り、データ行から作成されたオブジェクトをディスパッチします 関連付けられたPredicateがデータに対してtrueを返す場合、各リスナーに

最終的な効果は同じです。フィルタリングがどこで行われるかだけです。

(繰り返しますが、一度に1つのエントリを処理するデータのこの「ストリーム」を持っている唯一の理由は、ギガバイトのCSVファイルを扱っているためです。コレクションを作成したり、フィルタリングしたり、それに対処する-私は行くようにフィルタリングする必要があります)

役に立ちましたか?

解決

リスナーへの呼び出しのコストが莫大でない限り(リモーティング、WCF、...)、私は本当にシンプルなインターフェースのままで、リスナーに行の処理を決定させます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top