2010-03-12 2 views
3

나는 수천 줄의 잠재적으로 여러 파일을 파싱 할 수있는 자바 프로젝트를 만들고있다. 파싱 ​​된 정보는 다른 객체에 저장되고 컬렉션에 추가됩니다.파일에서 주문형 컬렉션으로 데이터를로드하는 가장 효율적인 방법은 무엇입니까?

GUI는 이러한 모든 개체를 한꺼번에로드하여 메모리에 보관할 필요가 없으므로 파일에서 데이터를로드/언로드하는 효율적인 방법을 찾고 있으므로 데이터가 컬렉션에만로드됩니다. 사용자가 요청합니다.

지금은 평가 옵션입니다. 또한 데이터 컬렉션의 일부를로드하고 GUI에 표시 한 후 이전에 관측 된 데이터를 다시로드하는 가장 좋은 방법을 생각했습니다. 파서/Populate collection/Populate GUI를 다시 실행하십시오. 또는 아마도 컬렉션을 메모리로 유지하거나 컬렉션 자체를 직렬화/비 직렬화하는 방법을 찾으십시오.

일종의 데이터 필터링을 수행하면 데이터 하위 집합로드 /로드가 까다로워 질 수 있습니다. ID를 필터링한다고 가정하면, 새 하위 집합에는 이전에 분석 된 두 개의 하위 집합의 데이터가 포함됩니다. 메모리에 전체 데이터의 마스터 복사본을 보관하는 것은 문제가되지 않습니다.

많은 양의 데이터를 처리 할 때 Google 콜렉션이 우수하고 효율적이며 많은 것을 단순화하는 메소드를 제공하므로 컬렉션을 메모리에 보관할 수있는 대안을 제공 할 수 있습니다. 이것은 단지 일반적인 이야기입니다. 어떤 컬렉션을 사용해야하는지에 대한 질문은 분리되고 복잡한 것입니다.

이 유형의 작업에 대한 일반적인 권장 사항을 알고 있습니까? 비슷한 시나리오를 통해 무엇을했는지 들어보고 싶습니다.

필요한 경우 더 자세한 정보를 제공 할 수 있습니다.

+0

문제가 보이지 않습니다. 요청시 파일에서 데이터를로드하려고합니다. 그렇게해라. 뭐가 문제 야? – Roman

+0

문제가되지 않습니다.더 효율적인 것은 무엇입니까? 데이터를 다시 방문해야하거나 필요에 따라 콜렉션에서 데이터를로드/언로드해야 할 경우를 대비하여 콜렉션에서 데이터의 마스터 사본을 메모리 내/메모리 부족 상태로 유지 하시겠습니까? – Dan

답변

4

HSQLDB과 같이 응용 프로그램에 데이터베이스를 내장 할 수 있습니다. 그렇게하면 처음에는 파일을 구문 분석 한 다음 SQL을 사용하여 간단하고 복잡한 쿼리를 수행합니다. (HyperSQL 데이터베이스)

HSQLDB는 주요 SQL 관계형 데이터베이스 엔진 자바로 작성된 것입니다. JDBC 드라이버는 이고 거의 모든 ANSI-92 SQL (BNF 트리 형식)과 많은 SQL : 2008 개선 사항을 지원합니다. 및 디스크 기반 테이블을 제공하고 내장 및 서버 모드을 지원하는 작고 빠른 데이터베이스 엔진을 제공합니다. 또한이 도구에는 명령 줄 SQL 도구와 GUI 쿼리 도구 인 같은 도구가 포함되어 있습니다.

+0

흥미로운 옵션을 고려해보십시오. 질문은 내 텍스트 데이터를 db로 변환하고 JDBC를 사용하여 텍스트에 액세스하거나 텍스트로 유지하고 언어에서 스캔/구문 분석 기능 + 구조를 사용하고자하는 것이라고 생각합니다. 어떤 종류의 앱을 사용 했습니까? – Dan

+0

+1 거대한 플랫 파일을 처리 할 때 우아한 접근 방식입니다. – Joset

3

많은 양의 파일과 많은 메모리가있는 경우 파일의 초기 스캔을 수행하여 색인을 생성 할 수 있습니다. 파일이 줄 바꿈으로 레코드로 나누어지고 레코드를 읽는 방법을 알고 있다면 바이트 위치별로 레코드를 인덱싱 할 수 있습니다. 나중에 특정 indeces를 읽으려면 빠른 검색을 수행하여 읽을 바이트 범위를 찾고 File의 InputStream에서 읽어야합니다. 더 이상 그 항목이 필요하지 않으면 GCed됩니다. 필요한 것보다 더 많은 항목을 힙에 보관하지 않습니다.

이것은 간단한 해결책 일 것입니다. 더 많은 기능을 제공 할 수있는 라이브러리를 찾을 수있을 것입니다.