2012-02-18 55 views
0

我有67352行文件。一行是一個名字。我使用foreach在批處理中插入這些名稱。在這些67352中,只有52262條記錄在使用批量大小爲100時被持久保存到數據庫中。如果批量大小較高,則保留的文檔較少,如果較低,則會有更多文檔被保留,但我從未獲取所有文檔持續存在。doctrine odm批量插入 - 並非所有文檔都保存

odm的版本是1.0.0beta3,我也試過這也與1.0.0rc1,具有相同的結果。

的代碼如下所示:

$batchSize = 100; 
foreach ($data as $name) 
{ 
    $doc = new \SomeDocument; 
    $doc->setName($name); 

    $dm->persist($doc); 
    $i++; 

    if ($i % $batchSize == 0) 
    { 
     $dm->flush(); 
     $dm->clear(); 
    } 
} 
$dm->flush(); 

誰能告訴我有什麼不對?謝謝

回答

1

你沒有提到你正在使用的索引等,但讓我們假設它是默認的,你沒有遇到唯一性問題(特別是因爲你的結果是可變的)。這聽起來像你的一些寫作失敗/迷路。

嘗試與運行批量插入:

$dm->flush(array('safe'=>true)); 

這將是一個有點慢,但至少,當你看到一個失敗的它現在應該拋出一個異常,你可以把它從那裏。