将大量命中记录到 MySQL 数据库中的最佳做法

2022-08-30 12:28:18

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

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


答案 1

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

你可以先使用memcache或APC在那里写日志,但是使用INSERT DELAYED MySQL几乎可以完成相同的工作,并且会做得更好:)

请勿为此使用文件。DB将比PHP更好地为锁服务。编写有效的互斥体并不是那么微不足道,所以让DB(或memcache,APC)来完成这项工作。


答案 2

常用的解决方案:

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


推荐