2016-04-25 87 views
2

我們的應用程序目前使用H2作爲嵌入式數據庫,我們有以下情形:H2數據庫是否適合作爲大型表的嵌入式數據庫?

  • 的H2被用作「臨時數據庫」。插入到H2中的數據通過應用程序任務每30分鐘定期發送/插入Oracle數據庫(「官方」數據庫),並從H2中刪除;

  • 這個主要的「臨時表」在一張表中每小時平均插入183行。

  • 我們還有另外兩個大表(分別爲2100萬和150萬條記錄),主要用於查詢。還有另一個應用程序任務從Oracle逐步更新這些表,在上一次同步後在H2行中更新Oracle中創建/更新/刪除的位置。它也會在每30分鐘發生一次。

我們一直在使用H2。5年,到目前爲止,沒有任何問題,但我們發現在Red Hat official documentation約H2以下警告:

但是,它不應該在生產中使用環境。它是一個非常小的自包含數據源,支持測試和構建應用程序所需的所有標準,但不足以滿足生產使用的要求。

H2是否被設計和可靠地用於像這樣的場景中的生產環境?

有沒有支持這個的基準? H2 official performance benchmark顯示執行時間和性能使用情況,但不說數據量。

回答

1

嵌入式H2數據庫是內存還是持久?我主要關心的是故障轉移。如果您的JVM發生故障,自上次Oracle同步點以來將丟失任何數據。

除此之外,嵌入式H2數據庫只能在與您的應用程序相同的JVM中使用。因此,您將無法擴展到具有多個JVM的高可用性體系結構,每個JVM都有自己的H2數據庫,並且無法跨JVM共享這些數據。

最後,還有堆的問題。如果您使用的是內存中的JVM,那麼隨着數據量的增加,您的堆將會增長,甚至可能會耗盡內存,並導致垃圾收集器試圖阻止堆不足。

其他限制可以在這裏找到: http://www.h2database.com/html/advanced.html#limits_limitations

+0

嗨,院長。謝謝你的回答。我們將它用作一個持久的數據庫(文件系統)。 –

+0

因此,如果你不需要擴展一個JVM,那麼你仍然會遇到擴展問題,因爲它們不能共享一個嵌入式數據庫。如果沒有其他限制影響你,我想我只是說謹慎行事。 –

+0

@DeanClark 在內存模式下運行時,H2是否共享用於數據存儲的JVM堆內存? – manu