2012-05-02 23 views
0

我有一个PHP的图像服务脚本,我一直在优化。我一直在优化服务器端工作了很多,但我也想确保我优化了MySQL的一面。我目前在每次加载这个图片服务脚本时都使用MYSQL进行以下操作。如何用图像服务脚本优化MySQL查询?

  1. 连接到数据库
  2. 检查,看是否提供的ID是有效的,并返回该行,如果它是
  3. 更新的图像由1
  4. 增加hits列的数量统计递增统计表1的特定的控制器和行动以及
  5. 我不关闭连接,有人告诉我,让它坐,因为它需要较少的时间,它会死在它自己的

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

我的目标是让我的服务器处理432万图像,每天服务没有问题(即每秒50个/秒的apache)。

+0

建立你自己的imgur? –

+0

哎呀我的坏,是的,它的MySQL不是微软的SQL。谢谢:) – MasterGberry

+1

返回行的内容是什么? –

回答

1

每次,你可能会被写入磁盘。相反,您可以尝试将内存中的点击数缓存几分钟,并且每隔几分钟将缓存转储回数据库。这将减少您对数据库的写入和读取次数。

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

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

此外,您可能希望最终离开MySQL。 MySQL并不是最适合高性能的产品,因为MySQL和存储过程不能很好地结合在一起。存储过程在数据库上编译,不需要解析SQL即可执行。如果你要切换到某些东西,比如Oracle,那么整个事务可以通过编译存储过程来完成。如果有的话,MySQL不会轻易提供这种灵活性。

0

你应该有多个副本的读取服务器,并用这些服务你的数据,以及一个统计服务器,只是做了:

INSERT DELAYED INTO stats (image) VALUES (:image); 

这会给你一个横向扩展阅读服务,以及快速的统计计数器。

或者以图像形式(一些事情的影响):你增加计数器,并提交到DB

enter image description here

+0

不错的pc ......... – dynamic

+0

此刻我没有这种钱,但这是更多的长期目标 :) – MasterGberry