2

アプリケーションのイベントを作成するコマンドを作成しました。このコマンドは700を超えるイベントを作成し、すべてが正常に機能しています。

ただし、すべてのイベントには250人以上のゲストがいる必要があります。つまり、1つのphpプロセスに175000を超えるゲストを挿入する必要があります。

これを機能させるためのバッチ処理とパフォーマンスの最適化について多くのことを読みました。

しかし、ゲスト作成には多くのメモリが必要であり、作成には多くの時間がかかります。私がテストした変更は、パフォーマンスを改善しませんでした。

誰かが私のデータを作成するために私が何ができるかについての考えを持っていますか?

コードは次のとおりです。

// create Events
.
.
.
$events = array(); //List of Events load from the database
$amountG = 250;
$countGuests = 0;
foreach($events as $event){

    for($i=0;$i<$amountG;$i++){                

        $guest = null;
        $guest = $this->createGuest($event); //creates a guest object with random testdata                
        $countGuests++;
        $guest->setPublickey(PublickeyUtils::generatePublickey($countGuests));
        $em->persist($guest);
        if($countGuests%5000 == 0){            
            $em->flush();            
            $em->clear();            
            gc_collect_cycles();
        }

        $glEntry = null;
        unset($glEntry);
    }               
    $event = null;
    unset($event);
}

$em->flush();            
$em->clear();            

すべてのフラッシュには3%のメモリが必要です。つまり、メモリ制限に達したため、すべての175.000エントリがフラッシュされることはありません。

そして、5000エントリごとに10秒以上が必要です。紅潮の量を増やすと、ゆっくりとなります。

--env=prod and -no-debugまた、ロギングを防ぐためのオプションを指定してスクリプトを呼び出すことも行いました。

それをよりパフォーマンス的に機能させるための最良の方法は何ですか?

4

2 に答える 2

0

現在の設定によっては、php のメモリ制限を増やすことも検討できます。

于 2013-03-06T12:42:26.877 に答える
0

解決策は、オブジェクトなしで挿入することです。

$em->getConnection()->insert('entity', $array);
于 2013-03-07T09:15:39.883 に答える