Java内存数据库类对象

时间:2013-11-08 18:29:30

标签: java database map in-memory

我正在研究一个将受益于内存数据库类对象的项目。我可能有一两千个具有相同结构的对象,都是从一个抽象类继承而来的。会有一些字符串字段,一个int,也许是枚举或两个(甚至可能是一组枚举),然后是一组字符串。还需要一个瞬态布尔字段,但这可能不是一个问题。

这些对象将根据预设数据进行实例化和构建,但如果需要,可以创建除此之外的其他对象。它们可以存储在XML文件或类似的东西中。当然,我宁愿不用硬连接整个东西,使用像SQLite这样的本地数据库感觉有些过分。

如果不是一件事,存储这些对象会相对简单:我希望用户能够轻松地从任何值中找到他们想要的对象,其中大多数值都是唯一的。这排除了一个HashMap,除非我想包装大量的HashMap,这几乎不是理想的。这让我寻找一种索引的内存数据库类对象,它支持通过对象的任何字段进行检索。它可能不必直接存储对象,但可以在检索时组装它们,或者基于一个字段检索“行”,从作为一种键的相同“行”获取另一个字段,然后检索对象来自基于该密钥的单个HashMap。

简而言之,我们的想法是根据它们包含的任何字段轻松快速地检索具有相同字段的对象。我已经看过各种不同的库,可能会做这类事情,但那里有很多这些东西。任何可行的工作都需要免费并与各种开放许可兼容。

3 个答案:

答案 0 :(得分:3)

对于“内存类数据库对象”,请不要重新发明轮子。无论您的需求多么简单或复杂,使用已经过多年(或数十年)调试和优化的库,如果能够满足您的需求,绝对是正确的做法。

SQLite是一个不错的选择。但是,它不是Java,需要单独的JDBC驱动程序(SQlite项目不维护SQLite的JDBC驱动程序)。

另一个占用空间小,重量轻且功能强大的RDBMS是HSQLDB,它包含一个版本4.1 JDBC驱动程序作为项目的一部分。它是100%Java。它为内存表提供本机支持。每当我使用“数据库”和“数千个对象”这个词时,我的想法立即转到HSQLDB。

该项目由HSQLDB开发组管理,可在此处获取:http://www.hsqldb.org

答案 1 :(得分:0)

我建议使用Guava框架提供的缓存解决方案 https://code.google.com/p/guava-libraries/wiki/CachesExplained

答案 2 :(得分:-1)

有点晚但你可以使用:http://www.mapdb.org

从他们的网站:

  

MapDB是Java的嵌入式数据库引擎。它提供由磁盘或堆外内存存储支持的映射和其他集合。 MapDB在Apache License下是免费的。