Пакетная доктрина ODM - не все документы сохраняются - PullRequest
0 голосов
/ 19 февраля 2012

У меня есть файл из 67352 строк.одна строка - это одно имя.Я вставляю эти имена в пакет, используя foreach.из этих 67352 только 52262 записей сохраняются в базе данных при использовании размера пакета 100. Если размер пакета выше, то сохраняется меньше документов, а если он меньше, то сохраняется больше документов, но я никогда не получаю все документысохранялось.

версия 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 Ответ

1 голос
/ 20 февраля 2012

Вы не упомянули, что вы используете для индекса и т. Д., Но давайте предположим, что это значение по умолчанию, и у вас нет проблем с уникальностью (особенно потому, что ваши результаты являются переменными). Похоже, что некоторые из ваших записей терпят неудачу / теряются.

Попробуйте запустить пакетные вставки с:

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

Это будет немного медленнее, но, по крайней мере, теперь оно должно выдавать исключение, когда вы видите сбой, и вы можете его оттуда извлечь.

...