【问题标题】:Saving lot of my files in a one directory on NTFS [closed]将我的大量文件保存在 NTFS 上的一个目录中[关闭]
【发布时间】:2013-02-04 20:28:14
【问题描述】:

我有一个共享服务,我在 Windows 2008 服务器的一个 NTFS 目录上有 100,000 多个文件。

问题是,关于性能,将所有文件添加到 mysql blob 是否更好?

【问题讨论】:

  • 这真的取决于这些文件的使用方式——它们是否经常被写入/读取?由不同的用户?
  • 没有。数据库中的文件通常是一个愚蠢/坏主意。很少有使用案例需要这样做。如果访问时间成为问题(例如单个目录中的所有 100k 文件),您可以尝试将负载拆分到多个子目录中,例如基于文件名的第一个字符。但与所有事情一样,您必须对每个解决方案进行基准测试,并找出哪个解决方案“最便宜”。
  • 文件的大小也会产生巨大的影响。您可能不想在数据库中存储大文件。
  • 这是图片文件,每个 200K-9MB。
  • 一台服务器上有这么多文件,如果你有足够的流量,你很可能会遇到 IO 问题。数据库也是如此,因为 blob 将存储在磁盘上。您将需要查看分布式存储系统(如果您设置使用物理托管,则类似于 amazon s3 或 NAS)

标签: php mysql ntfs windows-server


【解决方案1】:

在文件系统与数据库上存储文件将详细讨论here。在一个目录中存储那么多 文件绝对是个坏主意。您可能会遇到性能问题。

更好的办法是在该目录下创建子目录。它们可以按以下方式组织:

  • 年/月
  • 文件名的前 x 个字符
  • 文件名的 MD5 哈希的前 x 个字符

【讨论】:

  • 您知道任何用于创建目录和移动文件的解决方案吗?我可以为新文件功能做到这一点,但也许有一个现成的源代码......
  • 你可以为此编写一个 vbscript/jscript 或 powershell 脚本。
  • 我假设你在 PHP 中有一些 getPath(filename) 函数,你应该编写一个小的 PHP-CLI 脚本来调用它,例如getpath.php myfile 回显路径。因此,您可以使用 mkdir -p getpath filename 创建并使用 mv filename getpath filename/filename 来完成剩下的工作。
  • 高度推荐 MD5 选项,它会给你最好的分布。我发现使用前 8 个字符(分成 2 个一组,例如:11/22/33/44/)给了我们最好的性能
猜你喜欢
  • 2023-03-03
  • 2013-05-23
  • 2019-09-04
  • 2021-12-10
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
  • 2018-10-08
  • 1970-01-01
相关资源
最近更新 更多