如何最佳地将Web应用程序中的图片存储在文件系统中

3

在文件系统中存储大量与数据库相关的文件,有哪些最佳实践?

我们目前正在从一个将约14,000个文件(大约6GB的图像和文档)存储在MySQL数据库中的系统中转移。这很快变得难以管理。

我们目前计划按照它们在数据库中的主键在文件系统中保存文件。我担心在同一个文件夹中拥有如此多的文件可能会导致性能问题。此外,这些文件将由同一台服务器上的几个不同应用程序插入。

具体而言,我想知道:

  • 考虑到这些参数,这是一个好的解决方案吗?
  • 它是否留有未来进一步扩展的空间?
  • 在同一位置存储许多文件是否存在任何问题?
  • 是否有更好的方法来命名/分发文件?

将所有数据存储在数据库中?http://const.me/source-code/esent-serialization/ - Soonts
2个回答

2
我喜欢按以下方式命名文件 /* 创建目录 */ $dir = date('Y').'/'.date('m').'/'.date('d');

1

使用MD5对内容进行哈希,然后添加后缀(主键将足够)以获取文件的新文件名。创建16个文件夹,对应哈希的第一个字符。在每个文件夹下创建16个文件夹,对应哈希的第二个字符。根据哈希的前两个十六进制字符将图像存储在适当的路径中,然后将哈希添加到数据库中的适当记录中。


我认为对6GB的图像进行哈希处理并不是一件非常方便的事情;-) - zerkms
@zerkms:这不到2张DVD的容量。只需要几个小时的“工作”。 - Ignacio Vazquez-Abrams
再说一遍:为什么要花费“几个小时”来完成,如果可以使用哈希微秒几乎瞬间完成呢?;-) - zerkms
我喜欢哈希内容的概念。对于这些文件来说,时间并不是真正的因素,因为相关的元数据存储在数据库中。我假设使用MD5的原因是为了大致均匀地分布?此外,您是否了解每个文件夹的文件数量的大致性能限制? - Mathew Byrne
是的,哈希将把它们分散在目录结构中。NTFS、没有dir_index的ext3和XFS将花费几秒钟来处理所有文件在同一个目录中的情况。在相同的条件下,带有dir_index的ext3/4不会停顿(只需一小部分时间)。将文件分散到256个文件夹中是一种妥协。如果您认为有必要,也可以使用每级2个十六进制数字,这将把文件分成65,536个桶。 - Ignacio Vazquez-Abrams
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接