java 嵌入式库磁盘键值数据库 [已关闭]

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

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

从广义上讲,该模型可以分解为

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

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

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

我对此感到很无聊,并认为我可能会用一些X-Stream的XML检查策略和自定义映射实现来实现它,但是我脑海中有一个声音告诉我,我应该找一个库来做这件事。

我应该自己滚动还是有一个足够小的数据库来满足这个要求?

谢谢你们,

-杰夫


答案 1

答案 2

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

主要区别在于,根据第三方基准测试,Chronicle Map比MapDB快几倍

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

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


推荐