我不觉得用二叉树来管理文件有什么优势。
目录树就算再复杂,也不会复杂到需要用到二叉树这种方式来遍历,线性表遍历方式足够了。
如果目录真的非常复杂了,几百万个文件了,第一时间想的应该是能不能把一些业务分摊到另一台服务器上,而不是能不能换一个更好的文件系统。文件系统再优秀,你的硬盘也是一个盘片只有一个磁头的吧?文件系统再优秀,硬盘的 IO 依然是瓶颈。当然土豪会用 ssd 做服务器,这里不谈。
至于 PC,你 PC 里的目录结构不可能比服务器更复杂吧?
而且二叉树遍历更复杂,btrfs 节省下来的时间很容易就被文件遍历抹去,如果我删除一个文件,线性表里直接删掉这个文件的 inode 就可以了,而二叉树就必须要在删除这个文件后,同时更改子树上的文件的索引号。虽然 btrfs 可以在一些小功能上可以给你点“惊喜”,比如说自带压缩,自带子卷这些功能,但是总体性能上上不及 ext4,而这些脱了性能后腿的,不是这些新奇的小功能,而是自身的添加文件,删除文件必须修改其他文件的二叉树索引号,这方面使其性能低于 ext4 等文件系统,而一个基础功能没做好的文件系统,其新奇的小功能就没啥吸引力了。
而且据我所知,btrfs 出错的概率,相比 ext4,并不算低。
请看这些帖子:
http://tieba.baidu.com/p/2970677443http://tieba.baidu.com/p/3009418285http://tieba.baidu.com/p/3009817485http://tieba.baidu.com/p/3009796469我个人估计就是因为文件太多,于是造成遍历表过于复杂,btrfs 面对这样的复杂的二叉树就挂了。