현재 대규모 데이터 세트에서 여러 정보 검색 및 분류 작업을 수행해야하는 Java 프로젝트에서 작업하고 있습니다. 소규모 컬렉션에는 10K 개의 문서가 있습니다. 각 문서에서 복식의 150 개의 차원 벡터를 약 100 개. 약 150 만화 소 또는 150M 복식입니다. 저장 한 후에는 전체 또는 일부를 불러 와서 클러스터링 (예 : KMEANS)을 수행해야합니다. 실제 컬렉션에는 더 많은 문서가 있습니다 (현재 200,000 개의 문서를 다루고 있습니다).Java로 대용량 데이터 세트를 저장하고 검색하는 가장 좋은 방법
물론 OutOfMemoryError를 여러 번 처리했으며이 문제에 대한 마지막 해결책은 총 크기가> 5GB 인 10 개의 거대한 XML 파일에 저장하는 것이 었습니다. DOM Writer가 메모리를 가득 채 웠기 때문에 파일은 10이어야했습니다. 나는 SAX Parser를 사용하여 메모리에로드하지 않고 작업을 수행했습니다. 또한 어떤 종류의 텍스트에 두 배를 저장하면 실제 크기가 곱해지고 파싱 및 변환의 계산 비용이 추가됩니다. 마지막으로 클러스터링 알고리즘은 일반적으로 반복적이므로 동일한 데이터를 반복해서 필요로합니다. 내 방법은 아무 것도 캐시하지 않았고 디스크에서 여러 번 읽습니다.
이제 데이터 양을 데이터베이스 (원시 이진 파일 등)와 효율적인 방법으로 저장하는보다 간단한 방법을 찾고 있습니다. 누구든지 제안 할 아이디어가 있습니까?
JDBM3이 [MapDB] (http://www.mapdb.org/)로 더 잘 알려진 JDBM4로 업그레이드되었습니다. –