2012-11-17 74 views
4

我有一個任務是將一些數據從mysql加載到h2。我們必須在UI級別渲染一棵樹,樹中有大約50000個節點。所以認爲從H2讀取可能會減少延遲。爲此,我必須將約1M(每個客戶都有自己的樹)記錄加載到MySQL的H2中。加載部分由應用程序處理。它從MySQL讀取數據並對H2執行批量更新。它在執行時處理40000條記錄。但隨着遷移過程的繼續,服務器將停止運行。H2數據庫批量上傳

我試過使用「SET LOG 0,SET LOCK_MODE 0,SET UNDO_LOG 0」來有效地加載數據,但仍然是服務器內存不足。

我已經爲堆設置了512M內存。

H2文檔說使用「create table ... as select ...」來加載數據的速度更快,但我認爲這不會減少加載時間,因爲應用程序必須讀取1M記錄並創建一個CSV文件。

有人可以提出一種方法嗎?

回答

2

爲避免創建CSV文件,可以使用CREATE LINKED TABLE語句或使用CALL LINK_SCHEMA創建linked tables。然後使用CREATE TABLE ... AS SELECT複製數據。

至於內存問題,你是否創建了內存數據庫?如果是的話,如果您使用in-memory file system, or the compressed in-memory file systemjdbc:h2:memFS:testjdbc:h2:memLZF:test而不是jdbc:h2:mem:test,則可以節省內存(以某種速度爲代價)。如果你沒有使用內存數據庫,那麼我不確定問題是什麼。

+0

嗨托馬斯。感謝您的寶貴意見。我正在使用嵌入式數據庫。我修改了代碼以支持鏈接表中的加載數據。幸運的是,通過鏈接表和我目前的實現加載的時間大致相同。我也爲未來的情況整合了鏈接表的支持。謝謝。 – dharshan