我創建了一個命令來爲我的應用程序創建事件。該命令創建超過700個事件,一切都很好。symfony2命令太多的數據內存限制
但每個事件應該有超過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
以防止日誌記錄。
什麼是使其工作更高效的最佳途徑?
我不明白,爲什麼在事件實體的負荷 - 他們不是在循環中使用的 - 我會建議他們採取了很多的內存 - 查看[this](http://www.doctrine-project.org/blog/doctrine2-batch-processing.html#mass-object-processing)處理對象 - 當它們加載和分離對象時已被使用 – ManseUK 2013-03-05 09:24:09
對不起,我忘記了客人與事件有關係。所以我需要這個實體。 – 2013-03-05 09:27:51
你可以在每個循環中跨越一個php進程,或者使用Messaging(MQ; ..) – mpm 2013-03-05 09:36:46