2009-12-19 69 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