2013-06-20 4 views
2

다른 파서 파서 X (XOM)와 파서 Y (DOM)를 사용하여 Java에서 동일한 XML 구문 분석 알고리즘을 작성했습니다. 필자는 200 만 회 루프 내에 코드를 임베드하여 수행해야하는 연산 수를 모방하고 Java 프로파일 러를 사용하여 성능을 모니터링했습니다. 측정 값은 아래와 같습니다.XML 구문 분석 DOM 대 XOM

     Parser X (XOM)      Parser Y (DOM) 

Heap Memory    6.82         7.9 
Non-heap memory   14         15 
Garbage Collector  617 collections \ 2 sec    523 collections \ 1 sec 
Up time     1 m 53 s        1 m 54 s  
CPU time     1 m 2 s        44.8 s 

나는 몇 가지 질문이 있습니다.

  1. 크기가 100MB에 달하는 약 2 백만 개의 XML을 처리하려면 어떻게해야합니까? 어떤 것이 더 나은 성능을 위해 더 좋습니다. 성능은 시간에 대해 측정됩니다 (이 프로세스를 위해 전용 머신을 사용함에 따라 머신 활용에 관계없이 모든 XML을 더 빨리 처리하는 작업). 짧게 말해서 메모리 VS CPU 시간 VS 가동 시간이 더 우수합니다.

  2. 전체 CPU 전력을 빠르게 사용하는 것이 가능합니까? 멀티 스레딩?

  3. 성능을 측정하고 싶습니다. CPU 시간 또는 가동 시간을 사용해야합니까? 나는 CPU 시간이 CPU가 프로세스를 끝내는 데 전념하는 시간이라는 것을 알고 있습니다. 가동 시간은 프로세스를 끝내기 위해 컴퓨터가 감시하는 총 시간입니다.

  4. 왜 파서 Y는 파서 X와 동일한 가동 시간을 가지지 만,이 측정은 한 번 실행 한 결과가 아니라는 사실에도 불구하고 CPU 시간이 훨씬 짧습니다.

  5. 파서 Y의 가동 시간을 짧게 설정하면 CPU 시간 성능의 차이가 실생활에 반영됩니다. 빠르게 XML을 처리하려면

+0

최상의 성능을 얻으려고합니까? 그렇다면 그것은 아마 dom이나 xom이 아닙니다. vtd-xml입니다. –

답변

1

다양한 연산을 처리하기 위해 두 알고리즘의 코드를 확장 한 후 XOM 파서가 동일한 CPU 시간 및 메모리 발 인쇄로 업 (Up) 시간에서 훨씬 빠르다는 것이 밝혀졌습니다. XOM 파서가 나를 위해 이긴다.

+1

제공하신 두 가지 선택 중에서 가장 빠른 것에 대한 귀하의 결론은 정확할 수 있지만 그렇게 좋은 선택은 아닙니다. 수백만 건의 문서를 읽으려는 사람에게 적합합니다. "XON.nu"에서 볼 수있는 내용 (실제로 사용하는 XOM 인 경우)에 따라 사용자 지정 XML 판독기의 성능에 영향을 미칠 수 있습니다. XMLBooster의 "벤치 마크"수치를 확인 했습니까? –

2

직접 스키마에서 사용자 정의 XML 리더를 생성하는 도구를 사용해야합니다. 이것들은 DOM의 일반적인 오버 헤드를 피한다. 또한 자연스럽게 표현 된 데이터 (예 : 실수 데이터의 텍스트 문자열이 아닌 float)를 비롯하여 특정 XML 콘텐츠에 대한 직접 액세스 API를 애플리케이션에 제공하는 경향이 있습니다.

는 여기에 몇 가지 있습니다 (일부 벤치 마크)

  • CodeSynthesis
  • XMLBooster
  • Altova

    나는 이러한 도구 특별한 경험이 없다. (나는 이들 중 하나를 내부 목적으로 썼다.)

    +0

    귀중한 정보를 제공해 주신 Ira에게 감사드립니다. – mowienay