0

我正在做一个项目,我必须解析文件(可能是非常大的文件)并将每个字符串保存在另一个实体中。该捆绑包将处理很多文件类型(CSV、XML、JSON 等)。我将为这些类型中的每一种创建一个解析器,它返回一个字符串数组

  $em2 = $this->getDoctrine()
      ->getEntityManager();

  foreach ($Parser as $key => $value) {  

      $str_or[] = new StringOrigin();
      $str_or[$key]->setSTORString($value);
      /..
      $em2->persist($str_or[$key]);
   }

 $em2->flush();

$Paser 这里是从文件中解析出来的字符串数组。StringOrigin 是实体。实体管理器可以处理多少数据?我这样做对吗?如果不是,巴赫处理会 更好地处理这个问题吗?另外,有没有一种方法可以在不使用 DQL 的情况下只执行一次 INSERT?

4

1 回答 1

0

Doctrine 的实体管理器并不是真正为大量对象设计的。以我的经验,数千条记录都很好,但是当您进入成千上万条记录时,您就会开始达到极限。当然,这取决于您的实体的复杂性。

看看 Doctrine 的数据库访问层 (DBAL)。基本上:

$connection = $entityManager->getConnection();

为您提供一个直接与数据库对话的薄包装 PDO 对象。准备一个 INSERT 语句,然后使用不同的参数继续调用它。这样做让我可以在一个请求中处理成千上万条记录。没有必要走得更远。

并考虑在不进行任何数据库交互的情况下测试您的解析器。如果您不小心,很容易达到 PHP 的内存限制。

于 2012-04-10T13:54:44.373 回答