INSERT INTO required_data (
keyword_id, search_engine_id, date, " . $periodType . "
) VALUES (
:keyword_id, :search_engine_id, :date, TRUE
) ON DUPLICATE KEY UPDATE " . $periodType . " = TRUE, received = FALSE
这个特殊的查询目前在一个典型的日子里插入了大约260-280万行,它处理得很好。在这些情况下,任务每小时检查并执行一次。但我们也有每周和每月的插页。这是在这些情况下插入的另一个非常大的数据块,当这些运行时,由于它们需要多长时间才能完成,我们会遇到问题。
当这些任务占用的时间太长时,它会锁定其他任务,我计划将这些任务分解成更易于管理的块,以便更好地分散负载,并在需要时保持所有任务在一天/一周/一个月内运行,但这并不理想。如果有人知道我怎样才能提高效率那就太好了。它在一个大型ec2示例上运行。
1条答案
按热度按时间mm9b1k5b1#
如果可以将数据批处理到一个导入文件中,那么可以使用mysql load data infle命令。它会以最快的速度到达。
https://dev.mysql.com/doc/refman/8.0/en/load-data.html
编辑
你可能用错了工具。如果要对大量数据执行特定任务,则通用数据库可能不是合适的工具。
例如,如果要汇总日志数据,则可以在低功耗硬件上轻松处理100gb/天的数据,这些硬件可以使用多种编译语言中的任意一种直接执行文件i/o。