gpt4 book ai didi

PHP 脚本运行缓慢,但服务器 CPU 空闲

转载 作者:行者123 更新时间:2023-11-29 00:42:05 26 4
gpt4 key购买 nike

我有一个 PHP 脚本可以从文本文件中导入各种数据。

导入非常复杂,我的测试文件有 32.000 个条目。这些条目必须被解析并插入到 mysql 数据库中。

如果我要运行我的脚本,它需要 30 分钟才能完成...此时我的服务器 CPU 空闲率为 99%。

是否有机会优化 php 和 mysql,使它们使用机器的更多功能?

代码:

if ($handle = @fopen($filename, "r")) {

$canceled = false;
$item = null;
$result = null;

while (!feof($handle)) {
$buffer = fgets($handle, 4096);
$line = $buffer;

if (substr($line, 0, 2) == '00') {

continue;
}
else if (substr($line, 0, 2) == '99') {
continue;
}
else if (strlen($line) < 75) {
continue;
}

Reread:
if ($canceled) {
break;
}

if ($item == null) {
$item = new DA11_Item();
$item->boq_id = $boq_id;
}
$result = $this->add_line_into_item($item, $line);

if ($result == self::RESULT_CLOSED) {
$this->add_item($item);
$item = null;
}
else if ($result == self::RESULT_REREAD) {
$this->add_item($item);
$item = null;
goto Reread;
}
else if ($result == self::RESULT_IGNORD) {
if (count($item->details()) > 0) {
$this->add_item($item);
}
$item = null;
}
}

if ($item !== NULL) {
$this->add_item($item);
}

fclose($handle);
}

add_item 将执行 $item->save() 并将其保存到数据库。

谢谢和亲切的问候,蝰蛇

最佳答案

您遇到的一个问题是,每个插入都是对您的数据库服务器的单独请求,包括它的响应。对于 32.000 条记录,您可能会觉得这是一个相当大的开销。一次对(比方说)1000 条记录使用批量插入

INSERT INTO foo (col1, col2) VALUES
(1,'2'),
(3,'4')
-- 997 additional rows
(1999, '2000');

额外的交易可能会有所帮助

更新,因为您提到了事件记录:我建议避免为此类批量导入任务添加任何额外的抽象层。

关于PHP 脚本运行缓慢,但服务器 CPU 空闲,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11845224/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com