use*_*413 5 java database map in-memory
我正在研究一个将从类似内存数据库的对象中受益的项目。我可能会有一两千个具有相同结构的对象,它们都继承自一个抽象类。将有几个字符串字段,一个 int,可能是一两个枚举(甚至可能是一组枚举),然后是一组字符串。还需要一个瞬态布尔字段,但这可能不是问题。
这些对象将根据预设数据进行实例化和构造,但如果需要,可以在此之外创建其他对象。它们可能存储在 XML 文件或类似文件中。当然,我宁愿不硬连线整个事情,而且使用像 SQLite 这样的本地数据库感觉有点矫枉过正。
如果不是为了一件事,存储这些对象将相对简单:我希望用户能够轻松地从任何值中找到他们想要的对象,其中大多数是唯一的。这排除了 HashMap 除非我想包装一大堆它们,这并不理想。这让我寻找一种索引的、类似内存数据库的对象,它支持通过对象的任何字段进行检索。它可能不必直接存储对象,但可以在检索时组合它们,或者根据一个字段检索“行”,从作为一种键的同一“行”中获取另一个字段,然后检索对象来自基于该键的单个 HashMap。
简而言之,其想法是根据对象包含的任何字段轻松快速地检索具有相同字段的对象。我见过各种不同的库,它们可能会做这种事情,但是那里有无数这样的东西。任何可能的工作都需要是免费的,并且与各种开放许可证兼容。
对于“内存中类似数据库的对象”,请不要重新发明轮子。无论您的需求是简单还是复杂,如果可以满足您的需求,使用已经经过数年(或数十年)调试和优化的库绝对是正确的选择。
SQLite 是一个不错的选择。然而,它不是 Java,并且需要单独的 JDBC 驱动程序(SQlite 项目不维护 SQLite 的 JDBC 驱动程序)。
另一个占用空间小、相当轻量且健壮的 RDBMS 是 HSQLDB,它包含一个版本 4.1 的 JDBC 驱动程序作为项目的一部分。它是 100% Java。它为内存表提供本机支持。每当我使用“数据库”和“数千个对象”这个词时,我的思绪就会立即转到HSQLDB。
该项目由 HSQLDB 开发组管理,可在此处获取:http://www.hsqldb.org