更新:我认为cakePhp updateAll是问题所在。如果我取消注释updateAll和pr结果我会在1-2秒内得到如此多的语言检测,如5分钟!我只需更新一行,并确定具有作者和标题的行......是否有更好更快的方式???
我正在使用detectlanguage.com来检测我的sql数据库中的所有英文文本。我的数据库包含大约500,000行。我尝试了很多东西来更快地检测我所有文本的语言。现在需要很多天......:/
我只能同时运行6个函数...(localhost)...我在新标签中尝试了第7个函数,但是
等待可用的套接字....
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种文本......
cakePhp 3.X updateAll-function是否可能使它变得如此缓慢?
答案 0 :(得分:0)
问题是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);
}