我在寫一個應用程序,它處理大量深度節點結構的xml文件(> 1000)。用woodstox(Event API)解析一個包含22.000個節點的文件需要大約6秒的時間。Java中的並行XML解析
該算法被放置在一個用戶交互過程中,只有幾秒的響應時間是可以接受的。所以我需要改進如何處理xml文件的策略。
- 我的進程分析xml文件(只提取幾個節點)。
- 處理已提取的節點,並將新結果寫入新的數據流(生成具有已修改節點的文檔副本)。
現在我正在考慮多線程解決方案(在16核心+硬件上可以更好地擴展)。我想到了以下幾種狀態:
- 創建多個解析器並在xml源文件上並行運行它們。
- 重寫我的分析算法線程保存使用解析器只有一個實例(工廠,...)
- 分割XML源成塊,並分配到大塊多個處理線程(map-reduce xml - serial)
- 我的優化算法(更好的StAX解析器比woodstox?)/使用帶有內置的併發
我想提高這兩個解析器,整體性能和「每個文件」的表現。
您是否有這些問題的經驗?什麼是最好的方式去?
目前尚不清楚這裏需要最大化什麼...... SINGLE文件的性能或所有1000個文件的總體性能。 – 2010-11-17 20:13:38
還有一個建議:如果你可以量化文件的大小,允許計算整個(兆字節每秒處理)它可以給出預期性能的想法。在測試時,我通常會使用10到40 MB/s來解析Woodstox;但我的硬盤只能提供5 - 10 MB/s的持續速度。 – StaxMan 2010-12-21 23:17:04
你看過vtd-xml嗎?它是重載加工中的藝術狀態......它比SAX或stax更有效率嗎? – 2016-05-02 06:53:42