php - 如何使用图像服务脚本优化 MySQL 查询?

标签 php mysql sql apache

我有一个 PHP 图像服务脚本,我一直在优化它。我在服务器端优化方面做了很多工作,但我也想确保优化 mysql 方面的事情。目前,我在每次加载此图像服务脚本时都使用 MYSQL 执行以下操作。

  1. 连接到数据库
  2. 检查提供的 ID 是否有效,如果有效则返回行
  3. 通过将点击数列增加 1 来更新图像的统计信息
  4. 将包含特定 Controller 和操作的统计表也加 1
  5. 我没有关闭连接,我被告知让它静置,因为它需要更少的时间,而且它会自行消失

我在我的服务器上运行“mysqladmin status”,发现目前有 63.8997 avg 正在运行。目前,我有大约 17 个请求/秒通过 apache 加载此脚本。我还在服务器上配置了 eaccelerator,以保持该脚本的编译版本可供使用。我的问题是有什么方法可以进一步优化我可以处理的查询数量?我正在努力确保我将所有#s 保持在尽可能低的水平并尽可能快地移动?

我的目标是让我的服务器每天毫无问题地处理 432 万个图像服务(在 apache 中相当于每秒 50 个请求)。

最佳答案

每次增加计数器并将其提交到数据库时,您可能都会写入磁盘。相反,您可以尝试将命中数缓存在内存中几分钟,然后每隔几分钟将缓存转储回数据库中。这将减少对数据库的写入和读取次数。

您还可以更进一步,将整行缓存在内存中。仅当数据不经常更改并且数据被经常请求时,这才实用。此外,如果您开始缓存大量数据,内存限制可能会成为一个问题。

我知道在一些非常高性能的数据库环境中,整个数据库实例将存储在内存中,并且写入磁盘只会定期发生。这也将大大减少查询时间,并减少缓存的需求,因为所有内容都已经在内存中了。但这需要一些严格的硬件。

此外,您可能希望最终放弃 MySQL。 MySQL 并不是高性能的最佳选择,因为 MySQL 和存储过程不能很好地结合在一起。存储过程在数据库上编译,不需要解析 SQL 即可执行。如果您要切换到某些东西,例如 Oracle,则整个事务可以使用编译的存储过程来完成。 MySQL 根本无法提供这种灵 active (如果有的话)。

关于php - 如何使用图像服务脚本优化 MySQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10419768/

相关文章:

mysql - 使用 mysql IN 和 not In 运算符时的奇怪行为

sql - AdventureWorks db 有教程/练习吗?

c# - 参数绑定(bind) : What happens under the hood?

php - 如果用户位于 50m 半径内,如何比较 db 的值

PHP 命名空间和要求

javascript - 通过 Javascript SDK 登录 Facebook 可在移动设备和本地主机上使用,但不适用于台式计算机

php - MySQL 从数组中获取行

php - 本地主机中日期值的差异

SQLite:LIKE 'searchstr%' 应该使用索引吗?

php - Kohana 3分页