我想要的我正在寻找的是一个无SQL的,嵌入式的,在磁盘上(即不在内存中)的数据库,可以从java访问(最好在我的实例中运行)的JVM)。这不是一个真正的数据库,我很想自己动手。基本上我正在寻找“我们应该将其保存在内存中还是将其放在磁盘上”的数据库部分。
我们的模型已增长到几千兆字节。现在这都是在内存中完成的,这意味着我们正在推动JVM达到几千兆字节。它目前全部存储在一个平面XML文件中,使用xstream进行序列化和反序列化,并使用内置的gzip库中的Java进行压缩。当我们的模型保持在100MB以下时,这种方法很有效,但现在它的大于它的问题。
松散地说,该模型可以分解为
我想做的是有一些符合guid的地图界面 - >运行模式。这个迷你数据库将保留这些对象的平面表。在我们的实验模型中,我们将使用guid列表替换运行模型列表,并在应用程序层添加对此映射的get调用,这将把它从磁盘中拉出并进入内存。
这意味着我们可以在XML中保持我们的程序配置(我非常满意)并在DBMS中保留一个大数据表,这将使我们不会消耗多GB的内存。在程序启动和退出时,我可以从存档格式加载和卸载我们模型的两个部分(XML中的配置部分和数据库格式的运行模型)。
我对此感到非常高兴,并且认为我可以使用X-Stream的一些XML检查策略和自定义地图实现来实现它,但是在我的脑海中有一个声音是告诉我,我应该找一个库来代替。
我应该自己动手还是有一个小到足以满足这个账单的数据库?
谢谢你们,
-Geoff
答案 0 :(得分:13)
答案 1 :(得分:2)
由于MapDB是您问题的可能解决方案,Chronicle Map也值得考虑。它是一个可嵌入的Java键值存储,可选地是持久的,为MapDB提供了一个非常相似的编程模型:它还通过vanilla java.util.Map
接口以及键和值的透明序列化。
主要区别在于根据第三方基准Chronicle Map is times faster than MapDB。
关于稳定性,目前没有关于Chronicle Map数据存储的错误报告数月,而它在许多项目中都在积极使用。
免责声明:我是Chronicle Map的开发者。