簡體   English   中英

處理包含大量數據的 XML 文件

[英]Processing XML file with Huge data

我正在開發具有以下要求的應用程序 -

  1. 從服務器下載 ZIP 文件。
  2. 解壓ZIP文件,將文件中的內容(XML格式)轉化為String。
  3. 將此內容傳遞給另一種方法進行解析和進一步處理。

現在,我擔心的是 XML 文件可能很大,比如“100MB”,而我的 JVM 的內存只有 512 MB,那么我如何將這些內容放入 Chunks 並傳遞給 Parsing,然后將數據插入 PL /SQL 表。

由於可以同時運行多個請求,並且考慮到 512MB 的內存,什么是最好的處理方式。

我如何將數據放入 Chunks 並將其作為 Stream 傳遞以進行 XML 解析。

Java 的XMLReader是一個 SAX2 解析器。 DOM 解析器讀取整個 XML 文件並創建一個(通常很大)數據結構(通常是一棵樹)來表示其內容,SAX 解析器允許您注冊一個處理程序,當 XML 文檔的各個部分被調用時,該處理程序將被調用。認可。 在該回調代碼中,您只能保存足夠的數據來執行您需要的操作——例如,您可以將所有字段保存為數據庫中的單行,插入該行然后丟棄數據。 使用這種類型的設計,您的程序的內存消耗取決於文件大小,而不是取決於單個邏輯數據項的復雜性和大小(在您的情況下,將成為數據庫中一行的數據)。

即使您確實使用了 DOM 樣式的解析器,事情也可能沒有您預期的那么糟糕。 XML 非常冗長,因此(取決於它的結構方式等)一個 100 MB 的文件通常只表示 10-20 MB 的數據,而少至 5 MB 的數據不會特別罕見或令人難以置信。

任何 SAX 解析器都應該可以工作,因為它不會像 DOM 解析器那樣將整個 XML 文件加載到內存中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM