2013-02-15 80 views
2

我正在使用H2數據庫 - 以嵌入模式運行 - 當我的應用程序啓動時,我使用mySQL數據庫中的數據加載H2數據庫。我使用鏈接表來指向mySQL表。H2數據庫 - 創建索引

我的問題是,我試圖加快H2在表上創建索引的時間,特別是對於較大的表(500萬+)。

有誰知道是否可以安全地在單獨的線程中運行CREATE INDEX命令,同時我將下一個表的數據加載到H2中? 例如: 線程1:負載表1 - >告訴線程2開始創建索引,然後線程1個負載表2等

我不能,因爲我後來加載表時使用MVCC模式當我做我的選擇時需要使用MULTI_THREADED模式。當我嘗試使用MULTI_THREADED模式時,即使我正在將數據加載到離散表中,我也會收到鎖定錯誤。

非常感謝!

+0

爲什麼不加載數據和「正常」後創建索引? – twillouer 2013-02-15 17:02:39

+0

創建索引需要很長時間,所以我正在尋找一種方法來分配跨線程的時間。目前,我正在做所有事情,因爲鎖定問題,但我會嘗試Thomas的建議。 – joechip 2013-02-15 18:06:43

+0

我明白了,但我不確定比許多線程會改善。如果你有統計資料,我會接受採訪。 – twillouer 2013-02-15 21:25:37

回答

2

什麼可能工作(但我不知道它是否更快)是先創建表和索引,然後並行加載表。這應該避免系統表中的鎖定問題。

+0

非常感謝 - 我會盡力的!另外,感謝您創建這樣一個驚人的軟件:) – joechip 2013-02-15 15:49:20

0

我還想添加rst.findColumn(「columnName」)方法來查找獲取表結果集後的索引。 rst是一個ResultSet對象。這是我用過的。

0

的另一種方式顯着改善H2加載和特別是索引性能是將初始內存設置接近預期的內存要求。舉一個例子,這個改變允許一個約1.5GB的應用程序在47秒內啓動,而不是在15-20分鐘後失敗。在此之前,我們看到GC開銷超出限制和JVMTI錯誤。

以下內容添加到您的VM參數(作爲一個例子):

-Xms2g 
-Xmx4g