gpt4 book ai didi

PHP 性能 strpos 文件名或 MySQL 查询

转载 作者:太空宇宙 更新时间:2023-11-03 11:49:27 25 4
gpt4 key购买 nike

我在服务器上存储了一些高分辨率文件(如果重要的话,100K+),我将它们组织在不同的画廊中。当有人访问画廊时,我只显示缩略图和图像的低分辨率版本,在某些情况下会加水印,而在其他情况下则不会。现在由于我说的是大量图片,画廊页面上显示的低分辨率版本在 X 天后从服务器中清除。如果有人确实访问了图库,并且服务器上不存在该文件的低分辨率版本,它会即时生成,但是当我生成低分辨率版本时,我可能需要为其添加水印或不添加水印。

目前,显示图像的脚本不执行任何 SQL 调用,它全部基于文件系统(如果文件存在等),是否为图像加水印的决定基于:

if (strpos($file_name,"FREE")===false){ //add watermark }else{ //just resize}

我的逻辑是,这比对文件名或文件 ID 进行 SQL 查询并检查它是否应该是无水印图像的性能更高。但是,我发现文件名中包含 FREE 一词有点不便。

如果我使用 SQL 查询而不是 strpos,我预计会有多大的性能差异?

编辑/更新

总结答案和评论:

  • 该系统被设计为可以使用几年,随着时间的推移添加的所有画廊仍然可以访问。这意味着存储需求非常巨大,旧相册的高分辨率图像将被移动到缓慢且廉价的专用存储设备上,因此建议不要使用所有缩略图的额外开销,这是一个严重的不可行选项。去年我需要存储超过 3TB 的图像(这只是高分辨率大小)。

  • 我在使用 Lighttpd,我打算使用 rewrite-if-not-file 来获得现有缩略图的最佳性能。

  • 我知道 I/O 写惩罚,我打算将它保持在最低限度,只在必要时写,最好是读。然而@N.B.的评论实际上确实让我想到了将低分辨率图像存储在 SSD 上,因此即使我需要创建它们并将它们写入磁盘,也比普通 HDD 具有更好的 I/O 性能。

  • 做一些测试实际上会很困难 (@Steve E.) 我落后于计划,系统必须在本月底之前上线。 (我今天刚收到炸弹,他们正在拔掉旧系统的插头)。是的,灵 active 是我想使用 SQL 的主要原因,但我希望 SQL 数据库能够显着增长,除了文件信息之外,还有大量其他信息需要存储,标记,购买,下载等,所以我也试图确保我不会对 SQL 施加太大压力,当我实际上可以利用其中的一些具有良好的结构和文件系统访问权限时。

最佳答案

如果不进行测试,就很难确定哪种方法会更快。简单的逻辑可能表明 PHP 访问磁盘更快,但这是基于许多假设。

在配置良好的系统中,经常需要的变量将在 RAM 缓存中而不是在磁盘上。这适用于文件系统的缓存以及 MySQL 缓存索引。缓存和其他机制的影响可能会产生与预期不同的结果。

在许多情况下,任何一种解决方案都可以工作并且足够,因为在设计良好的系统中,任何一种请求所花费的时间都应该是最少的,并且一种方法的额外性能可能不值得您在中使用“免费”时发现的不便文件名。试用这两种方法并衡量性能并不会太难。

从长远来看,还应考虑 MySQL 为添加附加功能提供了更大的灵 active ,如果所有状态都存储在文件名中,这些功能会变得复杂。

如果性能确实是一个重要问题,那么考虑使用网络服务器检查磁盘上的文件(或在像 memcache 这样的缓存中)并在将请求传递给 PHP 之前返回它是否存在。 Nginx和Apache都可以做到这一点,这是一种常见的高流量网站加速方式。

关于PHP 性能 strpos 文件名或 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36426078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com