2009-12-19 30 views
8

是否有任何用於Java的數據庫,可以在嵌入式模式下運行,某些表在存儲在內存中時從磁盤加載其他數據? H2和JavaDB似乎是Java DB的兩個領導者,我知道他們都有內存模式,但是他們是否會讓您將整個數據庫加載到內存中,還是可以根據表格來決定?內存中的Java數據庫

回答

6

這是緩存表常見問題在HSQL網站提及。

•不HSQLDB在存儲器中存儲的所有數據。不內存用完結果?

•它存儲在內存中的所有數據只有當你想,通過默認情況下,CREATE TABLE結果在內存表中,因爲這是較小表格的最佳類型。對於較大的表格,使用CREATE CACHED TABLE並調整緩存大小以適應您的內存使用需求(只需8MB左右)。請參閱本指南的「系統管理和部署問題」一章。 HSQLDB沒有簡單的規則,也沒有拼版,因爲只使用幾個設置就可以實現最大的靈活性。 HSQLDB的一個流行用途是用於OLAP,ETL和數據挖掘應用程序,其中使用巨大的Java內存分配來將數百萬行數據保存在內存中。

我認爲緩存表已經足夠強大,足以滿足您的需求。

http://hsqldb.org/web/hsqlFAQ.html

緩存表和存儲器表

MEMORY表和CACHED表說的比較,通常使用用於數據存儲。兩者的區別如下:

當數據庫啓動並存儲在內存中時,將從* .script文件中讀取所有MEMORY表的數據。相反,在訪問表之前,高速緩存表的數據不會被讀入內存。而且,每個CACHED表的數據只有一部分保存在內存中,允許具有更多數據的表可以保存在內存中。

當數據庫以正常方式關閉時,MEMORY表的所有數據都寫入磁盤。相比之下,CACHED表中已更改的數據在運行和關閉期間會被寫出。

所有CACHED表的數據高速緩存的大小和容量都是可配置的。這使得可以允許將CACHED表中的所有數據緩存在內存中。在這種情況下,訪問速度很好,但比MEMORY表略慢。

對於正常的應用程序,建議MEMORY表用於少量數據,留下大數據集的CACHED表。對於速度至關重要且具有大量可用內存的特殊應用,MEMORY表也可用於大型表。

H2和Derby(JavaDB)似乎還不支持此功能。糾正我,如果這不是事實。

1

大多數內存數據庫(如HSQLDB有緩存部分(或全部)數據到磁盤的能力,通常是足夠低的水平,因此是透明的程序員,但肯定是配置

+0

是否有任何文件可以指向我?從我在H2網站上看到的內容來看,只有DB不持久時,內存纔有效。 – 2009-12-21 07:42:28

+0

你可能想看看Terracotta http://www.terracotta.org/ – Bostone 2009-12-22 05:58:02

+0

@DroidIn。網秦兵馬俑是商業?它是一種緩存而不是DB,對吧? – 2011-08-18 22:55:24