ext4 文件系统中的一个目录中有许多文件会产生什么后果?

ext4 文件系统中的一个目录中有许多文件会产生什么后果?

我的任务是在磁盘上存储 JSON 列表(不使用任何数据库),我有以下选项:

  • 将它们存储在一个大文件中。

  • 将它们存储在单独的文件中,并通过它们的 ID 进行键入。

就我个人而言,我更喜欢第二个选项,因为它允许通过 ID 直接寻址任何 JSON,而无需接触任何其他 JSON。然而,有近 0.1 到 100 万个 JSON 条目,我担心可能会对底层文件系统(在我的例子中是 ext4)产生负面影响:

  • 这会超出文件系统对文件数量(在目录中还是在整个文件系统中)的限制吗?

  • 这会导致检索特定 ID 时速度变慢吗?

    更具体地说,我相信目录下的文件列表是由目录的 inode 结构维护的,但我不确定它使用什么数据结构(列表或映射)来保存文件列表。如果我使用目录层次结构,查找时是否会提高性能?例如,放入0123456789.jsonroot/01/0123456789.json不是root/0123456789.json?

答案1

在单个目录中包含 100 万个文件会降低速度,但解析具有 100 万个条目的聚合 JSON 也会如此。您最好的选择确实是使用散列目录,但您可能想要深入两层而不是一层。即,0123456789.json放入root/0/01/0123456789.json987654321.jsonroot/9/98/987654321.json

相关内容