[英]How to process large no of xml files and write into text file in java faster
我一天有數百萬個xml文件。 xml文件的大小從10KB到50 MB。
我已經編寫了SAX解析器來解析xml文件並寫入文本文件。 我正在從數百萬個xml文件中創建35個唯一的文本文件。 我必須以先到先得的基本方式來解析這些xml文件,以便保持記錄的順序。
我必須非常快速地處理文件。
xml文件的總大小約為1 TB。 我尚未實現處理XML文件的多線程,因為我必須先到先得來處理它。
如何快速處理所有xml文件?
在將代碼移入產品之前,我只想檢查是否需要重新考慮實現。
這就是我讀取xml文件並進行處理的方式。
public static void main(String[] args) {
File folder = new File("c://temp//SDIFILES");
File[] files = folder.listFiles();
Arrays.sort(files, new Comparator<Object>() {
public int compare(Object o1, Object o2) {
if (((File) o1).lastModified() > ((File) o2).lastModified()) {
return -1;
} else if (((File) o1).lastModified() < ((File) o2).lastModified()) {
return +1;
} else {
return 0;
}
}
});
for (File file : files) {
System.out.println("Started Processing file :" + Arrays.asList(file));
new MySaxParser(file);
}
}
我不確定我的處理是否可用於數百萬個xml文件。
如您所說,您必須先到先得來處理它。 您可以將每個xml文件都視為java方法,然后可以實現多線程處理xml文件。我認為這樣可以節省很多時間。
立即:
return Long.compareTo(((File) o1).lastModified(), ((File) o2).lastModified());
您最后要避免的是XML解析器(StaX)或Xalan / Xerces或純文本解析。 所以對此沒有評論。
Arrays.sort(files, new Comparator<File>() {
@Override
public int compare(File o1, File o2) {
return Long.compareTo(o1.lastModified(), o2.lastModified());
}
});
有很多事情要考慮...
當所有文件都已經存在於c://temp//SDIFILES
文件夾中時,這是一個批處理過程,還是一種等待下一個文件出現在其中的事件偵聽器?
所有這些XML都有XSD模式嗎? 如果是這樣,您可能會考慮預先使用JAXB解組器而不是自定義SAX解析器
恕我直言...
如果是批處理-將結果組合到文本文件中的單獨解析過程。 然后,您可以通過使用一些臨時/階段文件/對象將多線程分析應用於文件,然后再將其放入文本文件。 即
如果它是一個偵聽器,它也可以使用多線程進行解析,但可能僅需要一點。 例如,周期性地(例如,每10秒)將結果組合成文本文件,這將選擇標記為就緒的臨時結果文件
無論如何,這都是“部分過程”。 假設您可以為按時間戳文件列表排序的下5個文件運行5個解析線程,然后等待所有5個解析線程完成(結果可能不是臨時文件,但可以保留在內存中),然后合並進入文本文件。 ...然后選擇下5個文件,依此類推...
像那樣的東西
肯定地,順序處理需要花費大量時間,而且大部分時間都是從XML解析它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.