5

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

这些对象将根据预设数据进行实例化和构造,但如果需要,可以创建其他对象。它们可能存储在 XML 文件或类似文件中。当然,我宁愿不对整个事情进行硬连线,而使用像 SQLite 这样的本地数据库感觉有点矫枉过正。

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

In short, the idea is to easily and quickly retrieve objects with the same fields based on any field they contain. I've seen a variety of different libraries and such that may do this sort of thing, but there's a real myriad of these things out there. Whatever may work would need to be free and compatible with a variety of open licenses.

4

3 回答 3

4

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

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

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

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

于 2013-11-08T18:37:10.510 回答
0

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

于 2014-03-07T19:17:50.993 回答
-1

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

从他们的网站:

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

于 2016-01-09T01:28:06.500 回答