2011-11-08 8 views
0

나는 적당한 양의 데이터를 CSV 형식으로 앱에 입력해야하는 매핑 유틸리티를 개발 중이다. 이 CSV 파일에는 약 50 개의 항목이 포함 된 각 레코드가있는 100,000 개 이상의 레코드가 포함될 수 있습니다. 한 번에 여러 파일을 열어야 할 수도 있습니다. 데이터는 배정 밀도가 필요하지만 레코드의 모든 항목에는 필요하지 않습니다. 이러한 항목은 int로 캐스팅되거나 toString이 호출 될 수 있습니다.Java Collection Lib 또는 사용자 정의 클래스?

내 질문은 이것입니다. 첫 번째 생각은 double []의 ArrayList를 만드는 것이 었습니다. 두 번째 생각은이 데이터를 필요한 형식으로 유지할 수있는 사용자 지정 데이터 개체 (MyDataClass의 ArrayList)를 만드는 것입니다. 이것은 약 45-50 개의 인스턴스 변수를 가진 클래스를 생성하게합니다. 나는이 규모에서 한 번도 해 본 적이 없으며 그런 작업을위한 모범 사례에 대한 약간의 지침을 사용할 수 있습니다!

+1

"앱에 입력 하시겠습니까?" 데이터베이스로 가져 왔습니까? 그러면 모든 것을 메모리에 저장할 필요가 없습니다. – Kent

+0

CSV 파일을 데이터 구조 (메모리)로 읽습니다. 데이터베이스는 아직 실제로 옵션이 아닙니다. –

답변

0

두 개의 aproaches가 정상입니다. 그것은 모두 당신이 데이터로 무엇을 할 것인가에 달려 있습니다. 데이터 만이고 getter를 제외한 메소드가없는 경우이를 유지할 클래스를 만드는 것은 과도한 작업 일 수 있습니다. 행에 일부 비헤이비어를 추가하려면 클래스를 작성하십시오. 고유 한 클래스의 50 개 필드가 너무 많습니다. 클래스를 논리적 그룹으로 나눌 수 있지만 모두 데이터가 나타내는 내용에 따라 다릅니다.

10 개의 파일이 열리고 각 파일의 크기가 100000 * 50 인 것으로 가정하면 약 380MB가됩니다. 두 배의 배열과 ArrayLists에 대해 메모리를 추가해야합니다. 이러한 메모리 양은 너무 많거나 괜찮을 수 있습니다. 그것은 모두 JVM에있는 메모리에 달려 있습니다. 모든 것을 메모리에 저장할 수 없다면 필요에 따라 파일을 읽거나 데이터베이스에 데이터를 저장하십시오.

+0

좋은 거래. 그렇습니다. 모델링하려는 일부 동작 (집계, 합병 등)이 있습니다. 논리적 인 부분으로 나누는 것이 좋습니다. 한 섹션은 트랙 매핑을위한 것이고, 다른 섹션은 신호의 품질 매핑을위한 섹션이고, 다른 섹션은 일반적인 정보를위한 섹션입니다. 그래서 이것은 좋은 제안입니다! –