2

我创建了一个命令来为我的应用程序创建事件。该命令创建了 700 多个事件,一切正常。

但每场活动都应该有超过 250 位宾客。这意味着,我必须在一个 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

解决方案是在没有任何对象的情况下进行插入:

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

根据您当前设置的内容,您还可以考虑增加 php 的memory limit

于 2013-03-06T12:42:26.877 回答