大量(数ギガバイト)のコンマ区切り値(CSV)ファイルを処理する必要があるプロジェクトに取り組んでいます。
私が基本的に行うことは次のとおりです。
- 関連するすべてのファイルの読み取り方法を知っているオブジェクトを作成します
- データに関心のあるリスナーのセットをこのオブジェクトに登録します
- 各ファイルの各行を読み取り、データの行から作成されたオブジェクトを各リスナーにディスパッチします
- 各リスナーは、このデータが有用/関連性があるかどうかを判断します
ソース側で代わりにフィルタリングする方がよいかどうか疑問に思っています。たとえば、各リスナーには、特定のデータをリスナーにディスパッチするかどうかを決定する述語オブジェクトが関連付けられています。この場合、プロセスは次のようになります。
- 関連するすべてのファイルの読み取り方法を知っているオブジェクトを作成します
- このオブジェクトにペアのセットを登録します
- 各ファイルの各行を読み取り、関連する述語がデータに対してtrueを返した場合、データの行から作成されたオブジェクトを各リスナーにディスパッチします
正味の効果は同じです、それはフィルタリングが行われる場所の問題です。
(繰り返しますが、一度に1つのエントリを処理するこの「ストリーム」データがある唯一の理由は、ギガバイトのCSVファイルを処理しており、コレクションを作成してフィルタリングしてから処理できないためです。それ-私は行くにつれてフィルタリングする必要があります)