哪个嵌入式数据库是用Java编写的,用于简单的键/值存储?
我最近问了一个关于Neo4j的问题,我开始工作了,看起来很不错。它是可嵌入的,并且是用Java编写的,没有太多的依赖项 然而,它是一个graph DB,我不知道是否将其用作简单的键/值存储是一个好主意 基本上,我有一个大地图,在Java中是这样的:哪个嵌入式数据库是用Java编写的,用于简单的键/值存储?,java,database,web-applications,nosql,embedded-database,Java,Database,Web Applications,Nosql,Embedded Database,我最近问了一个关于Neo4j的问题,我开始工作了,看起来很不错。它是可嵌入的,并且是用Java编写的,没有太多的依赖项 然而,它是一个graph DB,我不知道是否将其用作简单的键/值存储是一个好主意 基本上,我有一个大地图,在Java中是这样的: Map<Integer,Map<String,String>> Map 我在主映射中有几千万个条目,每个条目本身都包含一个属性/值映射。“内部”地图相对较小:大约有20个条目 我需要一种方法将该地图从运行的webapp持久
Map<Integer,Map<String,String>>
Map
我在主映射中有几千万个条目,每个条目本身都包含一个属性/值映射。“内部”地图相对较小:大约有20个条目
我需要一种方法将该地图从运行的webapp持久化到另一个
使用Neo4j,我所做的是为每个ID(整数)创建一个节点,然后在内部映射中为每个条目放置一个属性。从我早期的测试来看,这似乎是可行的,但我不确定这是否是一个好的方法
您会使用哪种用Java编写的可嵌入数据库
这些要求是:
- 用Java编写
- 可嵌入(因此不会太大)
- 非SQL(*)
- 开源
- 易于备份(我需要能够在服务器运行时进行“实时”备份)
(*)我不想要SQL的原因是我总是有这个“地图地图”,而且内部地图会不断演变,所以我不想要太结构化的东西。你可以看看berkeley DB 它在处理大量数据方面非常有效,并且是关键/价值所在。
由于我自己也发现了它,所以我不能再多说了,但是如果你有时间来研究一下它的话…谷歌似乎有几个Java端口:
为了满足您的需求,它大部分内置于Java中,易于备份,因为它只是一个文件,高度可嵌入,非常开放源代码,而不是SQL。XML有时可能有点冗长和笨拙,但它是一个众所周知的领域,周围有非常丰富的工具,因此如果需要,您可以在应用程序外部处理它。对于您的用例,我建议MapDB() 它符合您的要求:
- 用Java编写
- 可嵌入-无依赖项的单个jar
- 非SQL-提供持久化到磁盘的映射
- 开源(Apache 2许可证)
- 易于备份(文件很少)
- 它位于堆外(能够通过内存映射文件持久化到磁盘)
实现Map
- 超快--每秒支持数百万次查询/更新,即。E每个查询平均有亚微秒的延迟
- 支持并发更新(假定为替换
)ConcurrentHashMap
- 如果属性集在集合中是固定的,则对您提到的属性映射的特殊支持允许更新值的特定属性,而无需对整个值(20个字段)进行任何序列化/反序列化。在编年史/项目中,此功能称为数据值生成
- 还有更多
这是一个纯java、可嵌入的轻量级数据库,它将数据存储为文件,便于备份主地图的每个条目中的内部地图很可能不同,还是主地图的内部地图之间会有大量重叠?您可以采取多种不同的方法,但这实际上取决于结构中引用复制的数量。@cdeszaq:谢谢您的评论和帮助。。。内部映射应该大部分具有相同数量的属性和相同的属性,但每个属性的值将略有不同。我想说的是相当多的重叠,但我不认为性能会是一个很大的问题:我更追求方便/小/易于备份的东西。你认为Neo4j会在这里工作吗?我知道有几种选择:太多了以至于我有点迷茫:)@cdeszaq:我忘了提一下:在应用程序的生命周期内,内部地图的属性将“演变”:新属性将出现