哪个用Java编写的嵌入式数据库用于简单的键/值存储?

Ced*_*tin 21 java database web-applications embedded-database nosql

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

然而,这是一个图形数据库,我不知道将它用作简单的键/值存储是否是一个好主意.

基本上我有一张大地图,在Java中看起来像这样:

Map<Integer,Map<String,String>>
Run Code Online (Sandbox Code Playgroud)

我在主地图中有几千万个条目,每个条目都包含一个属性/值的映射."内部"地图相对较小:约20个条目.

我需要一种方法来保持从运行webapp到另一个的映射.

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

用Java编写的哪个可嵌入数据库会用到吗?

要求是:

  • 用Java编写

  • 可嵌入(所以没什么太大)

  • 不是 SQL(*)

  • 开源

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

我的术语也可能有点不对,所以请随时帮助我/纠正我.对于我的"地图地图",最合适的是键/值对DB吗?

由于键/值对DB,文档DB,大表,图形DB等之间的差异,我有点迷失.

我也喜欢使用像Neo4J这样的图形数据库来满足我的需求(我认为性能确实不会是一个问题,因为我会看到相对少量的条目).

当然我可以自己坚持我的地图地图,但我真的不想在这里重新发明任何轮子.我想重用一个久经考验的DB ......

(*)我不想要SQL的原因是我总是会有这个"地图图",内部地图会不断发展,所以我不想要太结构化的东西.

Kir*_*ril 15

Google的LevelDB似乎有几个端口进入Java:

然后这里有一整套嵌入式Java数据库:


And*_*ejs 13

对于您的用例,我建议使用MapDB(http://www.mapdb.org)

它符合您的要求:

  • 用Java编写
  • embeddable - 没有依赖关系的单个jar
  • 不是SQL - 为您提供持久保存到磁盘的映射
  • 开源(Apache 2许可证)
  • 易于备份(少量文件)

并具有其他很好的功能,如事务,并发和性能.


lev*_*tov 8

Chronicle-Map 在这个领域是一个新的好球员.

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


Eri*_* C. 5

你可以看看berkeley DB

http://docs.oracle.com/cd/E17277_02/html/GettingStartedGuide/index.html

处理大量数据及其关键/价值非常有效.我不能真正讲述它,因为我自己发现它,但如果你有时间去研究它...