2017-03-21 4 views
0

XML 파일을 처리해야하므로 단일 테이블의 기본 키를 사용하여 ~ 4k 개의 객체를 처리해야합니다. 나는 EhCache를 사용하고있다. 다음과 같은 쿼리가 몇 가지 있습니다.데이터베이스에서 여러 개의 (많은) 객체를로드하고 ehcache에 저장하고 기본 키를 사용하여 쿼리합니다.

1) ID를 기반으로 행 단위로 쿼리하고 캐시에 저장하는 데 시간이 오래 걸립니다. 초기 시점에서 쿼리를 수행하고 EHCache에서 전체 테이블을 저장할 수 있으며 나중에 처리에서 기본 키를 사용하여 쿼리 할 수 ​​있습니까?

2) 쿼리 캐시를 사용하지 않겠습니까? 한 번에 4k 개의 객체를로드 할 수 없으므로 올바른 객체를 찾기 위해 반복합니다. 내가 지금 내 프로세스가 약 2 시간 걸리는 등 최적의 솔루션을 찾고

이 당신의 친절한 도움을 주셔서 감사합니다 (그것은 다른 처리도 포함됩니다).

답변

0

전체 테이블을 읽고 Map<primary-key, table-row>에 저장하면 DB 연결의 오버 헤드를 줄일 수 있습니다.

아마 TreeMap이 최선의 선택 일 것입니다. 요소 검색이 빠릅니다.

Ehcache은 동의를 처리하는 데 적합하지만 단일 프로세스로 xml을 읽는 경우 메모리가 필요하지 않습니다 (메모리에 Map 만 저장하면됩니다).

+0

사실, 특정 목적으로 데이터를 한 번 사용하는 경우 캐싱이 필요하지 않습니다. 지도가 필요합니다. 그러나 'TreeMap'이 아닙니다. 그것은 훨씬 더 느려질 것입니다. ID로 쿼리하고 있습니다. HashMap은 훌륭하고 빠릅니다. 또는 병렬 처리를 수행하고있는 ConcurrentHashMap을 사용하십시오. 그것에 addAll을하십시오. Ehcache의 경우 loadAll 기능이 있습니다. 하지만 다시 캐싱 프레임 워크가 필요하다고 느끼지 않습니다. – Henri

+0

4k 개체가 메모리에로드되어있는 것이 좋은 해결책이 아닙니다. – Khushi