内存中的 Java DB [关闭]
Posted
技术标签:
【中文标题】内存中的 Java DB [关闭]【英文标题】:In-memory Java DB [closed] 【发布时间】:2010-12-28 06:48:23 【问题描述】:是否有任何 Java 数据库可以在嵌入式模式下运行,其中一些表存储在内存中,同时从磁盘加载其他表? H2 和 JavaDB 似乎是 Java DB 的两个领导者,我知道它们都有内存模式,但是它们是让您将整个 DB 加载到内存中还是您可以逐表决定?
【问题讨论】:
【参考方案1】:这是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) 似乎还不支持此功能。如果不是事实,请纠正我。
【讨论】:
【参考方案2】:大多数内存数据库(例如 HSQLDB 能够将部分(或全部)数据缓存到磁盘。通常它的级别足够低,因此对程序员来说是透明的,但肯定是可配置的
【讨论】:
有什么文档可以指点我吗?从我在 H2 网站上看到的情况来看,内存仅在数据库不是持久化的情况下才有效。 你可能想看看兵马俑terracotta.org @DroidIn.net 兵马俑是商业的吗?而且它是一种缓存而不是数据库,对吧? Terracota 肯定不是 db,而且有免费与企业级的产品以上是关于内存中的 Java DB [关闭]的主要内容,如果未能解决你的问题,请参考以下文章