Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java内存中的类数据库对象_Java_Database_Map_In Memory - Fatal编程技术网

Java内存中的类数据库对象

Java内存中的类数据库对象,java,database,map,in-memory,Java,Database,Map,In Memory,我正在看一个项目,它将受益于类似对象的内存数据库。我可能会有一个或两千个具有相同结构的对象,都是从一个抽象类继承的。将有两个字符串字段,一个int,可能是一个或两个枚举(甚至可能是一组枚举),然后是一组字符串。还需要一个暂时的布尔字段,但这可能不是一个问题 这些对象将根据预设数据实例化和构造,但如果需要,还可以创建其他对象。它们可能存储在XML文件或类似文件中。当然,我不想把整个事情都硬连接起来,使用像SQLite这样的本地数据库感觉太过分了 如果不是因为一件事,存储这些对象将相对简单:我希望用

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

这些对象将根据预设数据实例化和构造,但如果需要,还可以创建其他对象。它们可能存储在XML文件或类似文件中。当然,我不想把整个事情都硬连接起来,使用像SQLite这样的本地数据库感觉太过分了

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

简而言之,其思想是基于对象包含的任何字段,轻松快速地检索具有相同字段的对象。我见过很多不同的库,它们可以做这类事情,但是有很多这样的事情。任何可能起作用的东西都需要是免费的,并且与各种开放许可证兼容。

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

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

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


该项目由HSQLDB开发组管理,可在此处找到:

我建议使用Guava framework提供的缓存解决方案

有点晚,但您可以使用:

从他们的网站:

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


neo4j是一个可行的选项2K所描述的类型的对象似乎很难证明添加内存数据库是合理的。见鬼,我会把它放在XML中,并在需要查找语法分析器时遍历语法分析器返回的元素树。对我来说,这听起来像是过早的优化。为什么不使用一堆HashMap或TreeMap(排序)来进行你想要的查找呢?您可以用普通Java来完成这一切。谢谢您的提示。我想我可以遍历XML。我可以画一堆地图,但那感觉像是乱七八糟的,即使我从外面把它包得又好又整齐。我将看一看其中的一些,并尝试直接从XML中查找它,尽管即使将其存储在XML中在这一点上也不是最终的。尽管他们的博客上说,MapDB不是JDBC风格的数据库。它可以用键和索引将数据存储在表中,但它不是传统的关系数据库。因此,我觉得你的回答有误导性。另外,当我使用它时(几个主要版本之前),它的错误非常严重,只适合用作存储在其他地方的数据的索引(因为您经常被迫将其丢弃并重新构建)。希望他们已经解决了他们的问题,但由于我以前的经验,我还是会远离它。