시작 또는 끝에서 데이터 스트림을 필터링하는 것이 더 낫습니까?
-
06-07-2019 - |
문제
저는 엄청난 양(수 기가바이트)의 쉼표로 구분된 값(CSV) 파일을 처리해야 하는 프로젝트를 진행하고 있습니다.
제가 기본적으로 하는 일은 다음과 같습니다.
- 모든 관련 파일을 읽는 방법을 알고있는 객체 만들기
- 데이터에 관심이 있는 리스너 세트를 이 객체에 등록합니다.
- 각 파일의 각 줄을 읽고 데이터 줄에서 각 청취자로 생성 된 개체를 발송합니다.
- 각 리스너는 이 데이터가 유용하거나 관련성이 있는지 여부를 결정합니다.
대신 소스 측에서 필터링하는 것이 더 나은지 궁금합니다.각 리스너에는 주어진 데이터 조각이 리스너에게 전달되어야 하는지 여부를 결정하는 연관된 Predicate 객체가 있습니다. 이 경우 프로세스는 다음과 같습니다.
- 모든 관련 파일을 읽는 방법을 알고있는 객체 만들기
- 이 객체에 쌍 세트를 등록하세요.
- 각 파일의 각 줄을 읽고, 관련 술처가 데이터에 대해 true가 반환되는 경우 데이터 라인에서 각 청취자로 생성 된 개체를 발송합니다.
순 효과는 동일하며 필터링이 발생하는 위치의 문제일 뿐입니다.
(다시 말하지만, 한 번에 하나의 항목을 처리하는 데이터 '스트림'이 있는 유일한 이유는 기가바이트 단위의 CSV 파일을 처리하고 컬렉션을 생성하고 필터링한 다음 처리할 수 없기 때문입니다. 그것 - 가는 동안 필터링해야 함)
해결책
수신기에 대한 호출 비용이 크지 않는 한(Remoting, WCF 등) 저는 매우 간단한 인터페이스를 유지하고 수신기가 행으로 무엇을 할지 결정하도록 할 것입니다.
제휴하지 않습니다 StackOverflow