我正在开发一个项目,我必须解析文件(可能是非常大的文件)并将每个字符串保存在另一个实体中。该捆绑包将处理许多文件类型(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?
答案 0 :(得分:0)
Doctrine的实体管理器并非真正适用于大量对象。根据我的经验,成千上万的记录都很好,但是当你进入成千上万的时候,你就开始达到极限。当然,这取决于您实体的复杂程度。
看一下Doctrine的数据库访问层(DBAL)。基本上是:
$connection = $entityManager->getConnection();
为您提供一个包含精简的PDO对象,该对象直接与数据库对话。准备一个INSERT语句,然后用不同的参数调用它。这样做让我在一个请求中处理成千上万条记录。没有必要走得更远。
考虑在不进行任何数据库交互的情况下测试解析器。如果你不小心,很容易达到PHP的内存限制。