b

JAXP DOM4J, JDOM2의 성능 비교 본문

spring framework/spring-batch

JAXP DOM4J, JDOM2의 성능 비교

dev.bistro 2013. 11. 13. 20:52

DZONE의 Java&XML에 관련된 글 3개가 마무리된 듯하다.

http://java.dzone.com/articles/java-and-xml-part-1

http://java.dzone.com/articles/java-and-xml-part-2

http://java.dzone.com/articles/java-and-xml-part-3-jaxb


기존의 RDB에 데이터를 저장하는것으로는 한계에 부딪쳐서, Key-Document 형태로  저장한다. 이 Document는 XML이며 여기에서 XPath기반으로 데이터를 추출해야한다. 뭐 몇건안되면 문제가 안되겠지만.. 몇건이 된다는 거다. 
6core * cpu 2개, 메모리16G  2대로 이 키워드 추출 부분을 소화해내야 하는데 하루에 몇억건이므로 성능을 무시할 수는 없다

현재는 StAX을 커스텀 마이징한 XML리더와, XPATH를 사용하기 위한 DOM(Java6)을 사용하고 있다. 여기에서 JDOM2으로 변경을 확인해보고 싶어서. 실제로 사용하는 1.2GB XML파일 아.. 다운받는데도 몇분이야 130MB의 welformed XML을 가지고 테스트 하였다.


XPath 표현식은 1개/ 3개일 경우를 테스트 했고, 가능한 로직은 동일하게 했다


1. DOM

for(int index=0; index<expres.size(); index++){

NodeList nodes = (NodeList) xPath.compile( expres.get(index) ).evaluate(document, XPathConstants.NODESET);

total = total + nodes.getLength(); 

}


2. JDOM2 (2.0.2)

for(int index=0; index<exps.size(); index++){

List<Object> nodes = xpathFactory.compile( exps.get(index) ).evaluate(document);

total = total + nodes .size();

}




 

 TOTAL

  DOM4J

 JDOM2 

 XPATH 1건 

 127286

  약 25 - 30초

  약 5-6초

 XPATH 3건

 636430

  안끝나... 

  약 20초


현재 알파버전이다 JDK 기본 파서를 이용하고 있지만, 고려하고 있던 VTD와, JDOM2등... 적용로직마다 최적의 파서를 선택하는게 중요한 일임을 다시 한번 깨닫는다 (안끝나...) , 물론 이번에 만든 파서도 개량하는것도 중요하고...


ps, 쓰고보니.. 사내 위키에 VTD, JDOM, StAX등의 성능 비교글이 있네... ㅠㅠ; 단 2011년 글이고 내가 정말 필요한 XPath글은 아니라 참고만 하면될듯하다.

'spring framework > spring-batch' 카테고리의 다른 글

Spring Batch Admin  (0) 2013.01.11
JobLauncher, SimpleJobLauncher  (0) 2012.08.28
JobParametersIncrementer의 사용.  (0) 2012.08.25
Comments