我需要處理大Excel
文件。我的問題是heap space
,尤其是XLS
格式。即使我有一個Apsose LighCells
API來順序解析它,我需要從chunck中的數據庫中檢索文件。將Excel文件(保存在多個Blob中)順序讀入一個InputStream中
到目前爲止,我在數據庫中的文件大小爲40kb。我有一個Import
表(存儲與導入有關的一般信息,例如開始和結束時間,數據類型等)和一個ImportData
表(包含數據塊作爲斑點)。我有Import
和ImportData
之間一對多的關係:
<hibernate-mapping> <class name="com.company.import.pojos.Import
table="IMPORT_TABLE">
<id name="id" type="integer">
<column name="ID" />
<generator class="some.id.generator.IdGenerator"></generator>
</id>
<property name="startTime" type="timestamp">
<column name="START" />
</property>
<property name="endTime" type="timestamp">
<column name="END" />
</property>
<property lazy="false" name="datatzpe" type="com.company.import.enums.ImportDataType">
<column name="DATATYPE" />
</property>
<bag name="importDataList" table="IMPORT_DATA" lazy="true" cascade="all" inverse="false">
<key column="IMPORT_TABLE_ID"/>
<one-to-many class="com.company.import.pojos.ImportData"/>
</bag>
</class> </hibernate-mapping>
<hibernate-mapping> <class
name="com.company.import.pojos.ImportData" table="IMPORT_DATA">
<id name="id" type="integer">
<column name="ID" />
<generator class="some.id.generator.IdGenerator"></generator>
</id>
<property name="importTableID" type="integer">
<column name="IMPORT_TABLE_ID" />
</property>
<property name="data" type="binary">
<column name="DATA" />
</property>
<property name="order" type="integer">
<column name="ORDER" />
</property> </class> </hibernate-mapping>
我用Hibernate (4.2.3.Final)
,但不是一種選擇,甚至lazy loading
因爲那時我會在內存中有這就是爲什麼我得到一個OutOfMemoryError ImportData
對象的整個列表我想避免這種情況。
提供更多內存不是一種選擇(應用程序運行在運行其他應用程序的容器上,同時多個用戶可能同時處理文件,因此堆空間問題最終會發生),因此我正在尋找總是讀取下一塊數據並將其提供給給Aspose API
的流。
創建我在閱讀Aspose工作簿只是這樣的:
InputStream inStream = ....;// get the input stream somehow
Workbook workbook = new Workbook(inStream);
我們想要支持至少100 MB的文件(XLS和XLSX格式)。 XLS格式很難順序處理,我不知道'Aspose'是否可以做到這一點。現在我試着用一個可以處理多個blob的'InputStream'來處理API。 – Atticus