我有一个 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 - 每秒大量插入导致大量 CPU 负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9330734/