php 性能 文件名,关于性能:多个小目录或一个巨大的目录,文件命名为php mysql...

这是一个完全理论化的问题。

我有一个照片存储网站,其中照片由网站上注册的用户上传。

问题

哪种方法更快?

当我需要使用大量计算机时,长期更好

硬盘?

有没有其他方法更好?

现在我想到了两种完成这些东西的方法。

上传到我的服务器的文件预计会超过?> 1亿

方法1

这两个/pictures/hd/&/pictures/low/目录将包含用户上传的所有文件。

$newfilename  =  $user_id.time().$filename; //$filename = actual filename of uploaded file

$src = '/pictures/hd/'.$newfilename; //for hd pics

将其插入到mysql中

insert into pics(`user_id`,`src`)VALUES('$user_id','$newfilename')

方法2

这两个/pictures/hd/&/pictures/low/目录将包含用户上载的文件的子目录。

这将创建许多子目录,其名称为user_id,正在将文件上载到服务器中。

if (!is_dir('/pictures/hd/'.$user_id.'/')) {

mkdir('/pictures/hd/'.$user_id.'/');

}

$newfilename  =  $user_id.'/'.$user_id.time().$filename; //$filename = actual filename of uploaded file

$src = '/pictures/hd/'.$newfilename; //for hd pics

将其插入到mysql中

insert into pics(`user_id`,`src`)VALUES('$user_id','$newfilename')

恢复

检索图像时,我可以使用pics表的src列获取文件名,并使用'/pictures/hd/'.$src_of_picstable和lowq文件使用'/pictures/low/'.$src_of_picstable浏览hd文件

回答问题的正确方法是测试它。

哪个更快将取决于文件的数量和underlyng文件系统; ext3,4将很乐意处理单个目录中的大量文件(dentry atr在HTree索引中管理)。有些文件系统只使用简单列表。其他人有不同的方法来优化文件访问。

您的第一个扩展问题是如何跨多个磁盘管理文件集。只是将单个文件系统扩展到许多磁盘上是一个坏主意。如果你有很多目录,那么你可以有很多挂载点。但是当你得到数据的数据时,这并不是那么好用。

但是,内容的索引与文件存储无关,这意味着您现在为文件存储选择的内容并不重要,因为您可以在以后轻松更改文件到位置的映射,而无需移动现有数据集。

我不建议单目录方法有两个原因。首先,如果您计划拥有大量图像,那么您的目录将变得非常大。手动搜索单个图像需要更长的时间。在调试测试新功能时需要这样做。

多个目录的第二个原因是您可以对图库的一部分进行较小的备份。如果你有一个非常大的画廊(比方说几兆兆字节)单个硬盘驱动器可能不足以容纳它们。使用多个目录,您可以将每个目录安装在单独的硬盘驱动器上,这样处理几乎无限大小的库。

我最喜欢的方法是YYYY / MM /图像类型目录结构。通过这种方式,您可以通过逐月查看来确定何时引入了一些错误。此外,您可以进行每月备份而无需复制冗余文件。同时制作所有图库的季度快照以防万一。

关于图像类型,我可能需要几种类型的图像,如原始图像,小缩略图,缩略图,普通图像等。这样我只需交换图像类型并获得不同的图像大小。

至于你我会建议YYYY / MM / type-of-image / user_id方法,你可以在一个地方轻松找到所有用户上传的文件。

哟,如果我像type-of-image/YYYY/MM/user_id一样做饭怎么办?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值