我有一个PHP脚本,在每次运行中,将一个新行插入一个Mysql数据库(具有相对少量的数据..)
我每秒有超过20个请求,这导致我的CPU尖叫寻求帮助..
我正在使用带有MyISAM引擎的sql INSERT DELAYED方法(虽然我只是注意到INSERT DELAYED不能与MyISAM一起使用).
我主要担心的是我的CPU负载,我开始寻找使用更多CPU友好解决方案来存储这些数据的方法.
我的第一个想法是将这些数据写入每小时的日志文件,每小时一次从日志中检索数据并立即将其插入数据库.
也许更好的想法是使用NoSQL DB而不是日志文件然后每小时一次将数据从NoSQL插入到Mysql中.
我没有测试任何这些想法,所以我真的不知道这是否会设法减少我的CPU负载.我想问一下是否有人可以帮我找到对我的CPU影响最小的正确解决方案.
解决方法:
我最近有一个非常类似的问题,我的解决方案是简单地批处理请求.由于减少了mysql连接的开销,并且重建索引的数量大大减少,因此加速了大约50次.将它们存储到文件中,然后立即执行一个更大的(100-300个单独插入)语句可能是个好主意.为了加快速度,可以在插入的持续时间内关闭索引
ALTER TABLE tablename DISABLE KEYS
insert statement
ALTER TABLE tablename ENABLE KEYS
执行批量插入会减少运行php脚本的实例数量,它会减少当前打开的mysql句柄数量(大幅改进),并且会减少索引量.
标签:php,mysql,nosql,performance
来源: https://codeday.me/bug/20190609/1208366.html