AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 43133
In Process
bugmenot77
bugmenot77
Asked: 2009-07-21 10:45:51 +0800 CST2009-07-21 10:45:51 +0800 CST 2009-07-21 10:45:51 +0800 CST

文件系统 单个目录中的大量文件

  • 772

好的,不是那么大,但我需要使用大约 60,000 个平均大小为 30kb 的文件存储在单个目录中的东西(这是一项要求,因此不能简单地分成文件数量较少的子目录)。

这些文件将被随机访问,但一旦创建,将不会写入同一个文件系统。我目前正在使用 Ext3,但发现它非常慢。有什么建议么?

linux ext3
  • 12 12 个回答
  • 52652 Views

12 个回答

  • Voted
  1. Kamil Kisiel
    2009-07-21T11:44:40+08:002009-07-21T11:44:40+08:00

    您应该考虑 XFS。它在文件系统和目录级别都支持非常大量的文件,并且由于 B+ 树数据结构,即使在大量条目的情况下,性能也保持相对一致。

    他们的 wiki 上有一个页面,其中包含大量详细介绍设计的论文和出版物。我建议您试一试,并根据您当前的解决方案对其进行基准测试。

    • 14
  2. nelaaro
    2012-08-28T02:59:33+08:002012-08-28T02:59:33+08:00

    Linux 上的 10 亿个文件

    本文的作者深入研究了具有大文件数量的文件系统的一些性能问题,并对各种文件系统 ext3、ext4 和 XFS 的性能进行了一些很好的比较。这以幻灯片放映的形式提供。https://events.static.linuxfound.org/slides/2010/linuxcon2010_wheeler.pdf

    是时候运行 mkfs 创建 1M 50kb 文件的时间 文件系统修复时间 删除 1m 个文件

    • 14
  3. Ludwig Weinzierl
    2009-07-21T10:57:56+08:002009-07-21T10:57:56+08:00

    ext3 目录中的许多文件已在姊妹站点stackoverflow.com上进行了详细讨论

    在我看来,ext3 上一个目录中的 60 000 个文件远非理想,但根据您的其他要求,它可能就足够了。

    • 8
  4. bugmenot77
    2009-07-21T14:07:04+08:002009-07-21T14:07:04+08:00

    好的。我使用 ReiserFS、XFS、JFS、Ext3(启用 dir_hash)和 Ext4dev(2.6.26 内核)做了一些初步测试。我的第一印象是一切都足够快(在我强大的工作站上)——事实证明,远程生产机器的处理器相当慢。

    即使在最初的测试中,我也对 ReiserFS 感到有些奇怪,所以排除了这一点。似乎 JFS 的 CPU 需求比其他所有低 33%,因此将在远程服务器上进行测试。如果它表现得足够好,我会使用它。

    • 6
  5. Kyle Brandt
    2009-07-21T11:54:20+08:002009-07-21T11:54:20+08:00

    使用 tune2fs 启用 dir_index 可能会有所帮助。要查看它是否已启用:

    sudo tune2fs -l /dev/sda1 | grep dir_index
    

    如果未启用:

    sudo umount /dev/sda1   
    sudo tune2fs -O dir_index /dev/sad1
    sudo e2fsck -D /dev/sda1
    sudo mount /dev/sda1
    

    但我有一种感觉,你可能会走错路……为什么不生成一个平面索引并使用一些代码根据它随机选择。然后,您可以使用子目录来获得更优化的树结构。

    • 4
  6. hookenz
    2011-02-24T17:34:11+08:002011-02-24T17:34:11+08:00

    我正在编写一个应用程序,它还存储大量文件,尽管我的文件更大,并且我有 1000 万个文件,我将在多个目录中拆分。

    ext3 很慢,主要是因为默认的“链表”实现。因此,如果您在一个目录中有很多文件,则意味着打开或创建另一个目录会变得越来越慢。有一种叫做 htree 索引的东西可用于 ext3,据报道它大大改进了事情。但是,它仅在文件系统创建时可用。见这里: http: //lonesysadmin.net/2007/08/17/use-dir_index-for-your-new-ext3-filesystems/

    由于无论如何您都将不得不重建文件系统并且由于 ext3 的限制,我的建议是您考虑使用 ext4(或 XFS)。我认为 ext4 使用较小的文件会更快一些,并且重建速度更快。据我所知,Htree 索引在 ext4 上是默认的。我对 JFS 或 Reiser 没有任何经验,但我听说过有人推荐过。

    实际上,我可能会测试几个文件系统。为什么不试试 ext4、xfs 和 jfs,看看哪一个提供了最好的整体性能?

    开发人员告诉我,可以在应用程序代码中加快速度的方法不是执行“stat + open”调用,而是执行“open + fstat”。第一个明显比第二个慢。不确定您是否对此有任何控制或影响。

    请参阅我在 stackoverflow 上的帖子。 在 Linux 中存储和访问多达 1000 万个文件, 那里有一些非常有用的答案和链接。

    • 4
  7. koenigdmj
    2009-07-21T11:18:04+08:002009-07-21T11:18:04+08:00

    ext3 及以下支持每个目录最多 32768 个文件。ext4 在文件的实际计数中最多支持 65536 个,但允许您拥有更多(它只是不会将它们存储在目录中,这对于大多数用户而言并不重要)。

    此外,目录存储在 ext* 文件系统上的方式本质上是一个大列表。在更现代的文件系统(Reiser、XFS、JFS)上,它们被存储为 B 树,这对于大型集合更有效。

    • 2
  8. kolypto
    2009-07-21T12:12:49+08:002009-07-21T12:12:49+08:00

    您可以存储文件 inode 而不是文件名:访问 inode 编号应该比解析文件名快得多

    • 1
  9. Marcin
    2009-07-25T09:26:07+08:002009-07-25T09:26:07+08:00

    你不想在一个目录中塞满那么多文件,你想要某种结构。即使它像拥有以文件的第一个字符开头的子目录一样简单,也可以改善您的访问时间。我喜欢使用的另一个愚蠢的技巧是强制系统使用元信息更新其缓存,即定期运行 updatedb。在一个窗口中运行slabtop,在另一个窗口中运行updatedb,你会看到很多内存将被分配给缓存。这种方式要快得多。

    • 0
  10. Gediz GÜRSU
    2021-08-17T01:36:32+08:002021-08-17T01:36:32+08:00

    BTRFS将非常实用。这里的问题似乎是小文件。NVME和 SSD 具有4K 块,非常适合该文件大小和非常快速地访问小文件。30Kb*60000 个文件平均为 1.7 GB,甚至不是 TB 级。因此,我建议使用带有 UPS 的ramdisk并使用rsync每 10 秒将其同步到 nvme 。它只同步更改的文件。重启后保持100 个左右的版本重新平衡。每 1 小时同步到一个单独的备份。

    请记住,BTRFS 使用小文件会浪费大量空间 (%70),但空间并不是您需要担心的。

    请注意,我在没有深入检查第一个答案的情况下写了这个。检查后,它证实了我的逻辑。

    • 0

相关问题

  • 多操作系统环境的首选电子邮件客户端

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve