2016-12-19 79 views
0

我正在解析&獨立的java應用程序(spring引導),它處理3〜4個左右的幾個大xml文件轉到生成一個文件合併3個文件中的數據(第一個文件是產品的規格,第二個產品的細節,第三個文件prodect的其他信息),以便獲得一個節點的全部信息,我必須讀取所有文件;解析並處理XML大文件

我的問題,我們沒有RAM(客戶),所以我試圖存在分貝(只加載文件&寫它),它是一種快速,但內存使用仍然過於HIGHT 1.5轉到xml文件,它將消耗1.6〜1.7去 所以有能降低RAM使用預先

由於任何溶液

+4

的可能的複製[如何分析大(50 GB)的XML文件中的Java(http://stackoverflow.com/questions/26310595/how-to-parse- big-50-gb-xml-files-in-java) – DimaSan

+0

你已經使用了流解析器嗎?另請參閱:http://stackoverflow.com/questions/3969713/java-xml-parser-for-huge-files糟糕的是:您可能會多次傳輸每個文件,但這種方式是您的最大。在讀取所有內容並將其保存在內存中時,內存消耗會更低。 – Roland

+0

謝謝你的答案,是的,我使用流解析器,你提出的解決方案將工作,但對於處理時間將爆炸,所以我不能真正使用此解決方案 –

回答

0

所以最佳的解決方案是分割節點,對於每個節點i將生成一個文件,該文件的文件名是我們將要壓縮的節點的ID,所以下一次我想要訪問一個節點時,它會非常快速地導致壓縮索引

output.zip : 
--> id_nodes1 
--> id_nodes2 
--> id_nodes3 
--> id_nodes4 
--> .... 

感謝所有的回答

+0

不知道確切的項目數量,只能猜測,但是當我在數十萬個節點(以及文件)上構建這個文件系統調用時,文件系統調用是一個真正的瓶頸(再加上它會創建很多sysadmin問題,比如不可能做ls *因爲這個清單太大了......)。這是*方式,方式*更快,更「系統友好」的組合項目1000左右,比創建一個文件每個項目。 – GPI

+0

如果在每個文件中對節點進行排序,則不需要每個文件在內存中具有多於1個節點。 –