MySQL插入语句队列

时间:2010-04-01 17:14:54

标签: php mysql database logging transactions

我们正在构建一个ajax应用程序,其中提交用户输入以处理到php脚本。我们目前正在将每个请求写入日志文件以进行跟踪。我想将此跟踪移动到数据库表中,但我不想在请求后运行insert语句。我想要做的是设置需要在MySQL数据库上处理的事务(插入和更新)的“队列”。然后,我将设置一个cron作业或进程来检查和处理队列中的事务。是否有我们可以构建的东西,或者我们必须只写入简单的文本日志文件并处理它们?

3 个答案:

答案 0 :(得分:2)

你想要Gearman - 它会对请求进行排队并在数据库为它们做好准备时插入它们,这样就不会使数据库服务器过载。

  

Gearman提供了一个通用的应用程序   将工作分配给其他人的框架   机器或过程更好   适合做这项工作。它允许你   要并行工作,加载   平衡处理,并打电话   语言之间的功能。有可能   用于各种应用,   从高可用性网站到   数据库复制的传输   事件。换句话说,就是这样   神经系统如何分配   处理沟通。几个强者   有关Gearman的观点:

有一篇关于使用数据库进行日志记录的最新(和质量)帖子here,其中(摘要)说:

  • 将MyISAM与并发插入一起使用
  • 每天轮换表格并使用UNION查询
  • 使用MySQL的延迟插入或像Gearman这样的作业处理代理(虽然MySQL在默默地删除它们之前会对它们排队的数量有限制!)

HighScalability write up on Gearman

如果您真的想避免这种情况,可以将原始SQL语句写入文件并使用此cronjob处理它们:

mysql loggingDB logTable < fullLog.sql && > fullLog.sql

答案 1 :(得分:0)

MySQL可以为您完成一些工作:

INSERT DELAYED

http://dev.mysql.com/doc/refman/5.1/en/insert-delayed.html

“INSERT语句的DELAYED选项是标准SQL的MySQL扩展,如果您的客户端无法或不需要等待INSERT完成,则非常有用。这是使用MySQL进行日志记录时的常见情况。 ..“

不幸的是,“DELAYED”变体仅在INSERT上可用,而不是在UPDATE上。

答案 2 :(得分:0)

我猜Zend_Queue上课是你的遗失 这里也是an example