filesystems - 持久性:数据树存储为目录树

标签 filesystems persistence tree-structure

我想知道将内存中的树结构存储为用于持久性目的的目录树的实用性。在我的例子中,他的目标文件系统将是 ZFS,一旦创建了结构,它将很少被多个进程访问。

使用目录树作为数据树持久化机制的性能如何?

最佳答案

为了读取和写入您的树,您将对每个节点多次调用文件系统。这比您为遍历内存图像而设计的任何合理代码都要昂贵得多。

这是否是一种明智的方法取决于您的预期使用模式。如果在典型的代码调用中,您希望读取整个树结构,对其进行处理,然后将其完整写出——您最好将其编码到一个文件中。但是,如果您希望只读取/处理/改变几个节点,而不读取树的大部分内容,遍历目录结构和进行多次查找/读取以遍历之间的性能差异存储在单个文件中的树会小得多,为了简单/清晰/避免重新发明轮子,前者很可能值得做。此外,如果多个进程同时执行此操作,则使用基于目录的方法锁定节点和子树会变得更加容易。

请注意,对于某些常用的文件系统,打开目录条目的时间取决于目录中的条目总数。

编辑:我已经用 ext3 为站点的 CGI 后端做了类似的事情;没有重新发明轮子使原型(prototype)制作更快,维护更简单,读/写/锁定缩放得很好,但是目录结构本身的非常频繁的更改 - 大约每秒数百次 - 在实际存储上效果不佳;最后,我重组了一些东西,以便经常添加/删除目录条目的目录树部分最终在 tmpfs 卷上 - 对我来说,这组状态可以(昂贵地)从存储在不太 volatile 存储中的状态重建重启后。我对 ZFS 没有什么经验,也不知道您的预期使用模式,所以不知道这对您来说是否是个问题。如果我现在为一个非常频繁使用的站点执行此操作,我可能会改为使用我自己的命名锁库。

关于filesystems - 持久性:数据树存储为目录树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/183745/

相关文章:

linux - Docker:安装/共享单个 sock 文件?

windows - NTFS-Search(一个OSS项目)可以扫描NTFS卷上的任何文件吗?

c - 在内核重启后保留文件

scala - 通过文本文件序列化保留Spark分区顺序

tabulator - 如何在制表符中过滤树结构中的子项?

c++ - 如何处理 boost::filesystem::path 的空格

java - 合并与查找以更新实体 JPA

java - 如何配置和打包简单的 Java 应用程序以使用 JPA

c# - 有 parent 和 child 的树结构

javascript - 如何将数组转换为N叉树?