9

是否有任何 Java 数据库可以在嵌入式模式下运行,其中一些表存储在内存中,同时从磁盘加载其他表?H2 和 JavaDB 似乎是 Java DB 的两个领导者,我知道它们都有内存模式,但是它们是让您将整个 DB 加载到内存中,还是您可以逐表决定?

4

2 回答 2

6

这是HSQL网站中提到的缓存表FAQ。

• HSQLDB 是否将所有数据存储在内存中。结果内存不会耗尽吗?

•它仅在您需要时将所有数据存储在内存中。默认情况下,CREATE TABLE 会生成内存表,因为这是较小表的最佳类型。对于较大的表,使用 CREATE CACHED TABLE 并调整缓存大小以适应您的内存使用要求(低至 8MB 左右)。请参阅指南的系统管理和部署问题一章。没有简单的规则,也没有强加于 HSQLDB 的部分,因为仅使用几个设置就可以实现最大的灵活性。HSQLDB 的一个流行用途是用于 OLAP、ETL 和数据挖掘应用程序,其中巨大的 Java 内存分配用于在内存中保存数百万行数据。

我认为缓存表已经足够强大,可以满足您的需求。

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

缓存表和内存表的比较

MEMORY 表和 CACHED 表一般用于数据存储。两者的区别如下:

当数据库启动并存储在内存中时,所有 MEMORY 表的数据都从 *.script 文件中读取。相反,在访问表之前,缓存表的数据不会读入内存。此外,每个 CACHED 表只有部分数据保存在内存中,允许表中的数据多于内存中保存的数据。

当数据库以正常方式关闭时,MEMORY 表的所有数据都会写入磁盘。相比之下,CACHED 表中已更改的数据在操作期间和关闭时会被写出。

所有 CACHED 表的数据缓存的大小和容量都是可配置的。这使得允许将 CACHED 表中的所有数据缓存在内存中成为可能。在这种情况下,访问速度很好,但比 MEMORY 表稍慢。

对于普通应用程序,建议将 MEMORY 表用于少量数据,将 CACHED 表用于大型数据集。对于速度至关重要且有大量可用内存可用的特殊应用程序,MEMORY 表也可用于大型表。

H2 和 Derby(JavaDB) 似乎还不支持此功能。如果不是事实,请纠正我。

于 2011-08-18T23:03:27.153 回答
1

大多数内存数据库(例如HSQLDB能够将部分(或全部)数据缓存到磁盘。通常它的级别足够低,因此对程序员来说是透明的,但肯定是可配置的

于 2009-12-19T07:34:38.967 回答