假设在我的文件系统中有很多的目录(比如100.000 ),并且在每个目录中有相似数量的目录。 每个目录可以包含任意数量的文件,但通常不会超过几个。 这个结构进入一个不变的深度( 10 )。
我的问题是,如果我从这个目录结构中读取文件(比如: /dir-34/dir-215/dir-345/file1使用Paths.get()比较时间复杂性(在读操作)从这样一个简单的文件系统读取文件:
/dir1 /dir2 /dir3 file1 /dir4 file2
注意:这只是一个理论问题,我只想知道目录中的目录/文件的数目是否正在尝试打开文件,这对读取操作的速度有任何影响。
麻烦得到incotify工作
如何在没有pipe理员权限的情况下在Windows XP上复制locking文件(设备或资源繁忙错误)
dd中ibs / obs / bs的用途
共享分区Ubuntu和Windows
如何写一个文件,然后读回来validation它的内容,确保你得到的是磁盘而不是caching
如何在init中挂载filesystem.git目录?
如何在linux kernel 3.5编程中用null / 0s / 1sreplace文件的内容
Android文件系统日记
如果/path/to/file是可用的,(注意:性能和时间复杂性依赖于磁盘结构和底层文件系统的实现,ex btrfs,一切都是b-tree,ext4和XFS都使用H – 树)
因此,对于遍历目录结构直到叶节点(包含文件的目录),平均情况时间复杂度应该是O(logN),而最坏情况是O(N),N =树中没有目录。 最糟糕的情况是当你在N-1下创建第N个目录,在N-2中创建第N-1个目录时,依此类推…直到根目录,在树中形成一个单独的分支。 理想情况下,如果您有完整路径,则不必从根目录遍历树中的所有目录。
那么如果你的底层FS支持目录索引和哈希,每次查找都需要另外的O(1)来查找目录中的文件。 因此,O(logN)+ O(1),即忽略低阶项,它应该只有O(logN),其中N是级别。
一些流行的文件系统比旧的文件系统使用更高效的数据结构。 和XFS一样,ext4默认打开目录散列(如@ninjalj指出的那样)。 这意味着单个目录中的查找预计平均需要O(1) (如果路径具有固定的最大数量的子目录,那么恒定的时间)。 这遵循哈希函数本身的性能。
即使每个目录有大量的文件,访问单个文件的速度也非常快 – 但只有当您拥有完整的路径时。 如果没有完整的路径,而需要查看模式的目录,则目录中的条目数目将面临O(n) 。 对于默认的系统级目录读取调用,读取大小(32k)会进一步加剧。
(虽然ext4目录可以有大量的文件,但它们被限制为64000个子目录条目。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。