将树布局保留为文件。如何有效实施?

时间:2012-01-20 11:55:31

标签: java performance file tree structure

我的appplication中有一个树结构,需要在本地持久保存到文件中。我正在寻找一些关于实现这一目标的好方法的一些意见。

树基本上是一个文件树,FileNode和FolderNode对象扩展了Node对象。所有节点都有对其父节点的引用,而FolderNodes也有一组子节点。根是一个FolderNode,父级设置为null。

树可以有2到10万个节点之间的任何东西。宽度和深度可以是文件树的合理范围(通常比深度更宽)。

申请工作流程

  • 将整个树加载到内存中(通过从文件中读取根并递归填充树)
  • 虽然树仍然有节点:
    • 处理然后删除叶节点
    • 将树写入文件(更新文件以反映内存中的树)
  • 删除文件

正如您所知,该文件只读取一次,但在每次更改后都会写入,因此性能显然是一个问题。

对此有什么好的解决方案?感觉像JPA这样的嵌入式数据库如SQLite,Derby或ObjectDB将是最佳选择。是吗?在这种情况下,我应该如何建模数据库?

2 个答案:

答案 0 :(得分:2)

其实我应该把这个放在评论bcos中这不是你问题的正确答案,但很抱歉让它回答。

  

树基本上是一个文件树,带有FileNode和FolderNode   扩展Node对象的对象。所有节点都有他们的参考   parent,FolderNodes也有一组子项。根是一个   将父级设置为null的FolderNode。

我建议你不要重新发明轮子并自己实现。看看JCR(Java Content Repository),Apache Jackrabbit是JCR的一个实现,它既有文件系统又有层次结构,还有版本控制等其他功能。

此外,它还有一个内置的持久性管理器,它将负责持久保存您的树。

答案 1 :(得分:0)

正确答案取决于您之后要对文件执行的操作。正如这里所解释的那样,最好的方法是将事物保存到/dev/null(不保存),因为之后你没有使用它。

首先尝试看看是否真的需要单独保存。 java.io.File只使用100个字节,因此将整个内容保留在内存中并且只写出一次可能是值得的。