将大量命中记录到MySQL数据库的最佳实践

liv*_*een 40 php mysql caching

嗯,这就是事情.假设我未来的PHP CMS需要每天驱动500k访问者,我需要将它们全部记录在MySQL数据库中(引用者,IP地址,时间等).这样我需要每分钟插入300-500行并更新50行.主要问题是每次我想插入新行时脚本都会调用数据库,这是每次有人点击一个页面时.

我的问题是,有没有办法首先在本地缓存传入的命中(对于那个apc,csv ......最好的解决方案是什么?)并定期每隔10分钟将它们发送到数据库?这是一个很好的解决方案吗?这种情况的最佳做法是什么?

OZ_*_*OZ_ 22

每天500k,每秒只有5-7个查询.如果每个请求将在0.2秒内提供,那么您将同时拥有几乎0个查询,因此无需担心.
即使你的用户数量增加了5倍 - 一切都应该可以正常工作.
您可以使用INSERT DELAYED并调整您的mysql.
关于调优:http://www.day32.com/MySQL/ - 有非常有用的脚本(不会改变任何内容,只是向您展示如何优化设置的提示).

您可以使用内存缓存或APC写日志有第一,但使用的延迟插入MySQL会做几乎同样的工作,并会做的更好:)

不要使用文件.DB将比PHP更好地提供锁.编写有效的互斥锁并不是那么简单,所以让DB(或memcache,APC)完成这项工作.


Wes*_*orp 18

经常使用的解决方案:

您可以在memcached中实现一个计数器,您可以在访问时增加该计数器,并将每次100(或1000)次点击的更新推送到数据库.

  • 拥有内存缓存而不是文件缓存(如在其他答案中)要快得多!+1 (4认同)