是否有任何可以在嵌入模式下运行的Java数据库,其中一些表存储在内存中,同时从磁盘加载其他表?H2和JavaDB似乎是Java DB的两个领导者,我知道它们都有内存模式,但它们是否会让你将整个数据库加载到内存中,还是可以逐个表决?
这是HSQL网站中提到的缓存表FAQ.
•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)还不支持此功能.如果这不是事实,请纠正我.