php - 将大量点击记录到 MySQL 数据库中的最佳实践

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

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

最佳答案

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

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

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

https://stackoverflow.com/questions/6031263/

相关文章:

php - MySQL 查询随机滞后

php - 一次查询 MySQL 插入多行

c# - 将C#中的DateTime转换为yyyy-MM-dd格式并存储到MySql DateTim

mysql - 使用 mysql 查询获取字符串的最后 5 个字符

mysql - 如何同步开发和生产数据库

mysql - 错误 2002 (HY000) : Can't connect to local M

php - Doctrine2 迁移向下迁移并从浏览器而不是命令行迁移

php - 如何使用 laravel 连接 mysql?

mysql - 在 Postgresql 中模拟 MySQL 的 ORDER BY FIELD()

php - Laravel OrderBy 关系计数