2016-02-25 2 views
1

UPDATE: Я думаю, что проблема cakePhp updateAll является проблемой. Если я раскомментирую updateAll и pr результаты, я получаю через 1-2 секунды так много детектирования языка, как через 5 минут !!!! Я должен только обновить одну строку и определить эту строку с автором и названием ... есть лучший и быстрый способ?Определить языки; CakePHP updateAll Bad Performance

Я использую detectlanguage.com, чтобы обнаружить все английские тексты в моей базе данных sql. Моя база данных состоит из 500 000 строк. Я пробовал многое, чтобы быстрее обнаружить язык всех моих текстов. Теперь это займет много дней ...:/

  • я только отправить 20% текста (смотрите на мой код)
  • я попытался скопировать мою функцию и запустить функцию много раз. скопированный код показывает функцию для всех текстов с заголовком, начинающимся с A

Я могу одновременно запускать 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 тексты ...

  • Теперь я пытался посылать тексты партии, но его также замедлить ... Я всегда отправить 20 текстов в одном массиве и я думаю будет максимум ...

возможно ли, что UpdateAll-функция CakePHP 3.X делает так медленно?

+0

Какой план вы используете? Вы попадаете в пределы API? –

+0

Текущий план - Плюс 1M запросов/день 200 МБ/день Я не нажимаю на границы ... –

+0

Вы пытались отправить тексты по партии? Это должно быть быстрее: https://github.com/detectlanguage/detectlanguage-php#batch-detection –

ответ

0

ПРОБЛЕМА БЫЛА CakePHP UpdateAll

Сейчас я использую: http://book.cakephp.org/3.0/en/orm/saving-data.html#updating-data с цикл и все быстро и хорошо

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); 
    }