java嵌入式库磁盘键值数据库

时间:2014-03-05 00:36:01

标签: java database performance nosql embedded-database

我想要的我正在寻找的是一个无SQL的,嵌入式的,在磁盘上(即不在内存中)的数据库,可以从java访问(最好在我的实例中运行)的JVM)。这不是一个真正的数据库,我很想自己动手。基本上我正在寻找“我们应该将其保存在内存中还是将其放在磁盘上”的数据库部分。

我们的模型已增长到几千兆字节。现在这都是在内存中完成的,这意味着我们正在推动JVM达到几千兆字节。它目前全部存储在一个平面XML文件中,使用xstream进行序列化和反序列化,并使用内置的gzip库中的Java进行压缩。当我们的模型保持在100MB以下时,这种方法很有效,但现在它的大于它的问题。

松散地说,该模型可以分解为

  • 项目
    1. 配置组件(有向非循环图),并非所有数据库友好
    2. 十几个“实验”结构的列表
      • 每个都包含大约十二个“运行模型”结构的列表。
        1. 每个运行模型包含数百兆的数据。一旦编写,他们永远不会编辑。

我想做的是有一些符合guid的地图界面 - >运行模式。这个迷你数据库将保留这些对象的平面表。在我们的实验模型中,我们将使用guid列表替换运行模型列表,并在应用程序层添加对此映射的get调用,这将把它从磁盘中拉出并进入内存。

这意味着我们可以在XML中保持我们的程序配置(我非常满意)并在DBMS中保留一个大数据表,这将使我们不会消耗多GB的内存。在程序启动和退出时,我可以从存档格式加载和卸载我们模型的两个部分(XML中的配置部分和数据库格式的运行模型)。

我对此感到非常高兴,并且认为我可以使用X-Stream的一些XML检查策略和自定义地图实现来实现它,但是在我的脑海中有一个声音是告诉我,我应该找一个库来代替。

我应该自己动手还是有一个小到足以满足这个账单的数据库?

谢谢你们,

-Geoff

2 个答案:

答案 0 :(得分:13)

http://www.mapdb.org/

另请看一下这个问题:Alternative to BerkeleyDB?

答案 1 :(得分:2)

由于MapDB是您问题的可能解决方案,Chronicle Map也值得考虑。它是一个可嵌入的Java键值存储,可选地是持久的,为MapDB提供了一个非常相似的编程模型:它还通过vanilla java.util.Map接口以及键和值的透明序列化。

主要区别在于根据第三方基准Chronicle Map is times faster than MapDB

关于稳定性,目前没有关于Chronicle Map数据存储的错误报告数月,而它在许多项目中都在积极使用。

免责声明:我是Chronicle Map的开发者。