【发布时间】:2014-04-06 19:51:40
【问题描述】:
我认为我正在寻找的是一个无 SQL、库嵌入、在磁盘上(即不在内存中)的数据库,可以从 java 访问(最好在我的实例中运行) JVM)。这并不是一个真正的数据库,我很想自己动手。基本上我正在寻找数据库的“我们应该将其保存在内存中还是将其放在磁盘上”部分。
我们的模型已增长到数 GB。现在这一切都是在内存中完成的,这意味着我们正在将 JVM 推向数 GB 以上。它目前全部存储在一个平面 XML 文件中,使用 xstream 进行序列化和反序列化,并使用 Java'a 内置 gzip 库进行压缩。当我们的模型保持在 100MB 以下时,这很有效,但现在它比这更大,它成为一个问题。
简单地说,模型可以分解为
- 项目
- 配置组件(有向无环图),对数据库完全不友好
- 十几个“实验”结构的列表
- 每个都包含大约十几个“运行模型”结构的列表。
- 每个运行模型包含数百兆的数据。一旦写入,它们就永远不会被编辑。
- 每个都包含大约十几个“运行模型”结构的列表。
我想做的是有一些符合地图接口的东西,guid -> run-model。这个迷你数据库将保留这些对象的平面表。在我们的实验模型中,我们将用 guid 列表替换运行模型列表,并在应用程序层添加对该映射的 get 调用,这会将其从磁盘中提取到内存中。
这意味着我们可以在 XML 中保留我们的程序配置(我对此非常满意),并在 DBMS 中保留一个大数据表,这将防止我们消耗数 GB 的内存。在程序启动和退出时,我可以从归档格式加载和卸载模型的两个部分(XML 中的配置部分和数据库格式的运行模型)。
我对此感到很兴奋,并认为我可能可以使用 X-Stream 的一些 XML 检查策略和自定义地图实现来实现它,但我脑海中的声音是告诉我我应该找一个图书馆来代替。
我应该自己推出还是有一个足够小的数据库来满足这个要求?
谢谢大家,
-杰夫
【问题讨论】:
-
我正在开发一个 nosql 数据库,它的 jsndb (sourceforge.net/projects/jsdbase)。 “它处于 alpha 阶段”并且它不是键/值,但您可以通过键获取对象。试一试
-
感谢您提出这个问题,尽管它已关闭。我也在使用纯文本键值存储,目前正在滚动我自己的存储,但还没有找到一种进行连接的好方法。
标签: java database performance nosql embedded-database