- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在服务器上存储了一些高分辨率文件(如果重要的话,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/
Warning: strpos() [function.strpos]: Empty delimiter 是什么意思? 我有这个: if(strpos(''', $text) ===
我知道,有人问过这个问题,但不幸的是,没有解决这个问题的答案。 这出现在我的日志文件中: PHP 消息:PHP 警告:strpos():第 479 行中的字符串中不包含偏移量 不幸的是,我无法理解导致
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章strpos() 函数判断字符串中是否包含某字符串的方法由作者收集整理,
问题,下面是怎么执行echo的: $str = "Hello World"; if (strpos($str, 'He') !== false) { echo 'GOOD'; } 但这不是:
我使用的是 PHP 版本 5.1.6 我有一个字符串( session 文件)并且需要从中提取一个值,所以我在字符串中搜索针但它返回 false,我将代码缩减为: $string = ';SERVER
我正在使用这段代码来查找字符串中是否存在子字符串,但是当它遇到特殊字符时,即使该字符明显存在,它也会失败。 //Code out of context if (strpos($pieces[$i],
所以目前我有以下两个数组: Array ( [0] => image/jpeg [1] => image/png [2] => image/psd ) Array ( [0] => png [1] =
我需要检查字符串是否包含特定单词,但请记住,中间可能有空格(任何类型 - 空格、制表符等)。 $array1 = "name @mail lastname"; $array2 = "name @ ma
因此,我的网站收到了大量垃圾邮件。 为了过滤掉其中的一些内容,我想测试帖子的正文以确保它不包含某些词。如果他们这样做,请立即(临时)禁止用户。 包括我的代码。我添加了一条回显线来显示返回的位置,并测试
我正在尝试使用 strpos 在另一个字符串中查找字符串,但由于某种原因它不适用于某个字符串,即使它适用于另一个字符串。我究竟做错了什么? 结果: true2 预期结果: true1true2 最佳
我在 php 中有一个函数,我想对一个字符串执行简单的搜索,使用 kw 作为搜索短语,如果找到则返回 true。 这是我现在拥有的: for($i=0; $i
我一直在努力反对谷歌试图解决这个问题,但我所能找到的只是那些不明白 strpos 返回找到的字符串的位置的人,所以 0 是一个有效值。这不是我的问题......简而言之: $services=shel
我有一个巨大的 html 代码要扫描。直到现在我一直在使用 preg_match_all从中提取所需的部分。从一开始的问题就是它非常耗费 CPU 时间。我们最终决定使用其他方法进行提取。我在一些文章中
我正在尝试用 PHP 进行一些验证,其中之一是检查输入的字符串中是否有特定的单词。问题是,当我将指定的单词放在第一位时,我的代码似乎无法正常工作。 代码如下: $word = "aa bb cc dd
更新:我在查看strrpos 的文档时认为它是strpos 的文档。很抱歉犯了这个愚蠢的错误。 根据 the docs ,它表示当您提供一个负值作为偏移量参数时,该函数将从字符串末尾开始那么多字符,向
我在 stackoverflow 上找到了这个例子: if (strpos($a,'are') !== false) { echo 'true'; } 但是我如何让它搜索两个词。我需要这样的东
我需要找出一个字符串是否存在于数组值中,但不一定是实际的数组值。 $array = array( 0 => 'blue', 1 => 'red', 2 =>
仅当 $_GET['page'] 参数包含文本“mytext-”时,我才需要执行一些脚本 查询字符串是:admin.php?page=mytext-option 这将返回 0: $myPage = $
我已经为我的网络应用编写了一个基本的“安全检查程序”。我需要看一眼用户提交的代码是否包含恶意内容。 这是我现在正在运行的代码的屏幕截图:http://cl.ly/677a6dc40034f096697
我正在使用 strpos() 函数在数组键成员中查找字符串。 foreach($_POST as $k => $v){ // for all types of questions of
我是一名优秀的程序员,十分优秀!