1

我必须编写一个函数,并且想知道哪个会更快。

在数据库表中使用getimagesize()或存储图像大小并从那里获取?

我承认在编写应用程序时还有其他因素需要考虑。但我确实需要知道这一点,谢谢。

4

3 回答 3

3

怀疑 getimagesize实际上取决于图像的大小。宽度/高度通常存储为元数据,这意味着只需要处理图像标题。因此,它应该是一个“相对快速”的操作,并且应该花费 [大部分] 恒定的挂钟时间。

话虽如此,我暂时倾向于数据库调用总体上“更快”。(为了有利于我的论点,我将一个无阻塞的数据库投影在具有适当连接池和适当模式/索引的低延迟连接上。)

  1. 数据库具有更热的缓冲区和略少的 IO 的潜力。维度信息被压缩到更少的位上,并且数据库可能能够避免额外的系统调用(getimagesize每次都必须打开文件)。

  2. 将尺寸存储在数据库中可以避免重复的图像标题处理。尽管我声称“相对较快”,但该操作确实需要时间,这可能会增加许多调用。

  3. 如果从数据库访问任何其他图像元数据,则可以将尺寸信息作为“零成本”添加简单地包括在内。

或者,缓存提供程序(例如 memcached)可以完全破坏传统 RDBMS 数据库的性能,以便进行简单的关联/获取,并且可以根据getimagesize需要提供支持。

正如 zerkms 所说,在实际使用环境中测量不同方法是了解哪种方法更快的唯一方法。有些因素可能会使“性能”倾向于一种方法而不是另一种方法。当然,这甚至可能无关紧要:专注于让慢 3% 更快:)

于 2013-09-30T22:28:40.270 回答
2

更有可能的是,存储在数据库中会更快。

getimagesize()根据图像的大小,可能会非常慢。您可能需要使用一次来获取大小,然后存储在数据库中。之后,查询数据库以获取大小

于 2013-09-30T22:17:33.053 回答
1

一切都取决于大小。

我相信数据库查询会更快,尤其是当图像可能很大时。

于 2013-09-30T22:17:57.397 回答