将大量数据保存到对象中的最佳方法

时间:2012-04-10 08:51:32

标签: symfony doctrine-orm

我正在开发一个项目,我必须解析文件(可能是非常大的文件)并将每个字符串保存在另一个实体中。该捆绑包将处理许多文件类型(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是实体。有多少数据可以处理实体管理器?我这样做是对的吗?如果没有,会bach processing 处理这个更好?另外,有没有办法只使用一次INSERT而不使用DQL?

1 个答案:

答案 0 :(得分:0)

Doctrine的实体管理器并非真正适用于大量对象。根据我的经验,成千上万的记录都很好,但是当你进入成千上万的时候,你就开始达到极限。当然,这取决于您实体的复杂程度。

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

$connection = $entityManager->getConnection();

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

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