![ext4 文件系统中的一个目录中有许多文件会产生什么后果?](https://linux22.com/image/99323/ext4%20%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E4%B8%AD%E7%9A%84%E4%B8%80%E4%B8%AA%E7%9B%AE%E5%BD%95%E4%B8%AD%E6%9C%89%E8%AE%B8%E5%A4%9A%E6%96%87%E4%BB%B6%E4%BC%9A%E4%BA%A7%E7%94%9F%E4%BB%80%E4%B9%88%E5%90%8E%E6%9E%9C%EF%BC%9F.png)
我的任务是在磁盘上存储 JSON 列表(不使用任何数据库),我有以下选项:
将它们存储在一个大文件中。
将它们存储在单独的文件中,并通过它们的 ID 进行键入。
就我个人而言,我更喜欢第二个选项,因为它允许通过 ID 直接寻址任何 JSON,而无需接触任何其他 JSON。然而,有近 0.1 到 100 万个 JSON 条目,我担心可能会对底层文件系统(在我的例子中是 ext4)产生负面影响:
这会超出文件系统对文件数量(在目录中还是在整个文件系统中)的限制吗?
这会导致检索特定 ID 时速度变慢吗?
更具体地说,我相信目录下的文件列表是由目录的 inode 结构维护的,但我不确定它使用什么数据结构(列表或映射)来保存文件列表。如果我使用目录层次结构,查找时是否会提高性能?例如,放入
0123456789.json
而root/01/0123456789.json
不是root/0123456789.json
?
答案1
在单个目录中包含 100 万个文件会降低速度,但解析具有 100 万个条目的聚合 JSON 也会如此。您最好的选择确实是使用散列目录,但您可能想要深入两层而不是一层。即,0123456789.json
放入root/0/01/0123456789.json
和987654321.json
中root/9/98/987654321.json
。