database - 内存中 Java DB

标签 database in-memory in-memory-database javadb

<分区>

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

最佳答案

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

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

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

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

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

缓存表和内存表的对比

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

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

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

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

对于一般应用程序,建议将 MEMORY 表用于少量数据,将 CACHED 表用于大型数据集。对于速度至上且有大量空闲内存可用的特殊应用程序,MEMORY 表也可用于大型表。

H2 和 Derby(JavaDB) 似乎还不支持这个特性。如果事实并非如此,请纠正我。

关于database - 内存中 Java DB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1932254/

相关文章:

java - 与 Java 中的数据表作斗争

Java 嵌入式数据库比较

nhibernate - 在内存中的 SQLite 数据库上使用 NHibernate 进行测试时出现随机错误

hsqldb - 在内存数据存储中使用 SQL

Java:将二进制文件 blob 保留在内存中以供多次使用(byte[]?ByteBuffer?...?)

redis - 与中央数据库同步的内存数据库

javascript - 如何使用JAVA在MONGODB中存储值?

php - 最快的缓存数据库引擎?

database - 过期的数据库密码和仍然存在的连接