检测语言; CakePHP updateAll 性能不佳
Detect Languages; CakePHP updateAll Bad Performance
更新:我认为 cakePhp updateAll 是问题所在。如果我取消注释 updateAll 并 pr 结果,我会在 1-2 秒内得到如此多的语言检测,就像在 5 分钟内!!!!我只需要更新一行,就可以确定那一行的作者和标题……有没有更好更快的方法???
我正在使用 detectlanguage.com 来检测我的 sql 数据库中的所有英文文本。我的数据库包含大约 500.000 行。我尝试了很多方法来更快地检测所有文本的语言。现在需要很多天... :/
- 我只发送了 20% 的文本(看我的代码)
- 我多次尝试复制我的函数和 运行 函数。复制的代码显示了标题以 A
开头的所有文本的函数
我只能同时 运行 6 个功能...(本地主机)...我在新选项卡中尝试了第 7 个功能,但是
Waiting for available socket....
public function detectLanguageA()
{
set_time_limit(0);
ini_set('max_execution_time', 0);
$mydatas = $this->datas;
$alldatas = $mydatas->find('all')->where(['SUBSTRING(datas.title,1,1) =' => 'A'])->where(['datas.lang =' => '']);
foreach ($alldatas as $row) {
$text = $row->text;
$textLength = round(strlen($text)*0.2);
$text = substr($text,0,$ltextLength);
$title = $row->title;
$author = $row->author;
$languageCode = DetectLanguage::simpleDetect($text);
$mydatas->updateAll(
['lang' => $languageCode], // fields
['author' => $author,'textTitle' => $title]); // conditions*/
}
}
我希望有人对我的问题有所了解...现在我所有文本的语言检测将花费一周以上的时间:/ :/
我的电脑 运行 超过 20 小时,几乎没有中断......但我只检测到大约 13.000 条文本的语言......而在我的数据库中有 500.000 条文本......
- 现在我尝试批量发送文本,但它也很慢...我总是在一个数组中发送 20 条文本,我认为这是最大值...
难不成cakePhp 3.X updateAll-function做的这么慢吗?
问题出在 CAKEPHP updateAll
现在我正在使用:http://book.cakephp.org/3.0/en/orm/saving-data.html#updating-data 和 for 循环,一切都又快又好
use Cake\ORM\TableRegistry;
$articlesTable = TableRegistry::get('Articles');
for ($i = 1; $i < 460000; $i++) {
$oneArticle = $articlesTable->get($i);
$languageCode = DetectLanguage::simpleDetect($oneArticle->lyrics);
$oneArticle->lang = $languageCode;
$articlesTable->save($oneSong);
}
更新:我认为 cakePhp updateAll 是问题所在。如果我取消注释 updateAll 并 pr 结果,我会在 1-2 秒内得到如此多的语言检测,就像在 5 分钟内!!!!我只需要更新一行,就可以确定那一行的作者和标题……有没有更好更快的方法???
我正在使用 detectlanguage.com 来检测我的 sql 数据库中的所有英文文本。我的数据库包含大约 500.000 行。我尝试了很多方法来更快地检测所有文本的语言。现在需要很多天... :/
- 我只发送了 20% 的文本(看我的代码)
- 我多次尝试复制我的函数和 运行 函数。复制的代码显示了标题以 A 开头的所有文本的函数
我只能同时 运行 6 个功能...(本地主机)...我在新选项卡中尝试了第 7 个功能,但是
Waiting for available socket....
public function detectLanguageA()
{
set_time_limit(0);
ini_set('max_execution_time', 0);
$mydatas = $this->datas;
$alldatas = $mydatas->find('all')->where(['SUBSTRING(datas.title,1,1) =' => 'A'])->where(['datas.lang =' => '']);
foreach ($alldatas as $row) {
$text = $row->text;
$textLength = round(strlen($text)*0.2);
$text = substr($text,0,$ltextLength);
$title = $row->title;
$author = $row->author;
$languageCode = DetectLanguage::simpleDetect($text);
$mydatas->updateAll(
['lang' => $languageCode], // fields
['author' => $author,'textTitle' => $title]); // conditions*/
}
}
我希望有人对我的问题有所了解...现在我所有文本的语言检测将花费一周以上的时间:/ :/
我的电脑 运行 超过 20 小时,几乎没有中断......但我只检测到大约 13.000 条文本的语言......而在我的数据库中有 500.000 条文本......
- 现在我尝试批量发送文本,但它也很慢...我总是在一个数组中发送 20 条文本,我认为这是最大值...
难不成cakePhp 3.X updateAll-function做的这么慢吗?
问题出在 CAKEPHP updateAll
现在我正在使用:http://book.cakephp.org/3.0/en/orm/saving-data.html#updating-data 和 for 循环,一切都又快又好
use Cake\ORM\TableRegistry;
$articlesTable = TableRegistry::get('Articles');
for ($i = 1; $i < 460000; $i++) {
$oneArticle = $articlesTable->get($i);
$languageCode = DetectLanguage::simpleDetect($oneArticle->lyrics);
$oneArticle->lang = $languageCode;
$articlesTable->save($oneSong);
}