哪个嵌入式数据库是用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持久

我最近问了一个关于Neo4j的问题,我开始工作了,看起来很不错。它是可嵌入的,并且是用Java编写的,没有太多的依赖项

然而,它是一个graph DB,我不知道是否将其用作简单的键/值存储是一个好主意

基本上,我有一个大地图,在Java中是这样的:

Map<Integer,Map<String,String>>
Map
我在主映射中有几千万个条目,每个条目本身都包含一个属性/值映射。“内部”地图相对较小:大约有20个条目

我需要一种方法将该地图从运行的webapp持久化到另一个

使用Neo4j,我所做的是为每个ID(整数)创建一个节点,然后在内部映射中为每个条目放置一个属性。从我早期的测试来看,这似乎是可行的,但我不确定这是否是一个好的方法

您会使用哪种用Java编写的可嵌入数据库

这些要求是:

  • 用Java编写

  • 可嵌入(因此不会太大)

  • SQL(*)

  • 开源

  • 易于备份(我需要能够在服务器运行时进行“实时”备份)

我的术语可能也有点错误,所以请随时帮助我/纠正我。对于我的“地图地图”,最合适的是一个键/值对,对吗

由于键/值对数据库、文档数据库、大表、图形数据库等之间的差异,我有点不知所措

我还想知道,根据我的需要使用像Neo4J这样的图形数据库是否是一个好主意(我认为性能真的不会成为一个问题,因为我会有相对较少的条目)

当然,我可以自己坚持我的地图地图,但我真的不想在这里重新发明任何轮子。我想重用一个经过测试的数据库


(*)我不想要SQL的原因是我总是有这个“地图地图”,而且内部地图会不断演变,所以我不想要太结构化的东西。

你可以看看berkeley DB

它在处理大量数据方面非常有效,并且是关键/价值所在。
由于我自己也发现了它,所以我不能再多说了,但是如果你有时间来研究一下它的话…

谷歌似乎有几个Java端口:

这里有一个完整的嵌入式Java数据库列表:

您可以只使用XML或JSON文件。这两种方法都不需要架构,而且在磁盘和内存之间来回切换相当容易,特别是在性能真的不太重要的情况下。(例如,您仅偶尔加载配置)

优点是XML和JSON都非常简单,可以很好地处理映射

应用程序上的依赖性负载也要轻得多。如果您只是在需要时持久化/取消持久化一个大数据结构,而不使用大多数嵌入式解决方案将添加的任何查询或类似功能,那么整个嵌入式DB类型系统将相当沉重


为了满足您的需求,它大部分内置于Java中,易于备份,因为它只是一个文件,高度可嵌入,非常开放源代码,而不是SQL。XML有时可能有点冗长和笨拙,但它是一个众所周知的领域,周围有非常丰富的工具,因此如果需要,您可以在应用程序外部处理它。

对于您的用例,我建议MapDB()

它符合您的要求:

  • 用Java编写
  • 可嵌入-无依赖项的单个jar
  • 非SQL-提供持久化到磁盘的映射
  • 开源(Apache 2许可证)
  • 易于备份(文件很少)
还有其他一些不错的特性,比如事务、并发性和性能

在这个领域是一个新的优秀球员

  • 它位于堆外(能够通过内存映射文件持久化到磁盘)
    Map
    实现
  • 超快--每秒支持数百万次查询/更新,即。E每个查询平均有亚微秒的延迟
  • 支持并发更新(假定为替换
    ConcurrentHashMap
  • 如果属性集在集合中是固定的,则对您提到的属性映射的特殊支持允许更新值的特定属性,而无需对整个值(20个字段)进行任何序列化/反序列化。在编年史/项目中,此功能称为数据值生成
  • 还有更多

迟到零件,但您可以使用Tayzgrid。它的开源和进程内缓存可以嵌入到您的应用程序中。它基本上是一个内存中的数据网格,但也具有您想要的功能,即成为一个简单的进程内嵌入式键值存储。

Checkout www.jsondb.io


这是一个纯java、可嵌入的轻量级数据库,它将数据存储为文件,便于备份

主地图的每个条目中的内部地图很可能不同,还是主地图的内部地图之间会有大量重叠?您可以采取多种不同的方法,但这实际上取决于结构中引用复制的数量。@cdeszaq:谢谢您的评论和帮助。。。内部映射应该大部分具有相同数量的属性和相同的属性,但每个属性的值将略有不同。我想说的是相当多的重叠,但我不认为性能会是一个很大的问题:我更追求方便/小/易于备份的东西。你认为Neo4j会在这里工作吗?我知道有几种选择:太多了以至于我有点迷茫:)@cdeszaq:我忘了提一下:在应用程序的生命周期内,内部地图的属性将“演变”:新属性将出现