大家对PHP多进程与MySQL的高并发瓶颈是怎么处理的


需求

  • 每天 执行一个定时任务,把一个具有千万条数据的日志分割成一些小的日志文件;
  • 然后启动多个PHP进程,分别对这些小日志文件中的每行数据进行处理,处理过程是这样的:每个PHP进程从各自负责的日志文件中逐行读取,然后根据该行中的一个标识去数据库中查找是否有了该记录,如果没有则插入该行,如果已经存在了就更新(该行的数据与数据库中的数据进行合并);

引发的问题

这样就出现了一个问题,就是可能存在多个PHP进程对同一条数据都在做处理,如果用Mysql锁机制可以避免这个问题,但是这样的话,就出现另一个问题,就是MySQL的高并发瓶颈,因为我是多个PHP进程同时在进行,一个进程要等待另一个进程解锁后,才能操作数据库。

这样我前面所做的分割日志、启动多个进程这些操作就失去意义了,因为我在前面做日志分析时,启的进程再多,运行的再快,到最后全都会卡在高并发操作数据库这个瓶颈上,不知道大家对这类问题是怎么处理的?

apache php mysql nginx Linux

日、后再见 10 years, 11 months ago

写过类似的东西,像这种需要多次更新同一账号数据的时候,我们的做法是处理完数据后不立即存入mysql,
而是放在了redis中,后面的数据更新都在redis修改,
在redis积累了数千条数据后在异步的写一次数据到mysql,效果不错
卤煮的场景多进程处理建议只负责数据处理,处理完的放redis,在单独用一个脚本定时检测redis
达到条件的时候(一定条数或时间)存一次数据到mysql

lyhlyh answered 10 years, 11 months ago

Your Answer