我要插入到数据库中的数据很多(我使用的顺序是1e+5
-1e+6
)。我正在使用教义,而我的第一种方法遵循以下准则:
https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/batch-processing.html
但是我内存不足(令人恐惧的Allowed memory size of ## bytes exhausted.
)。似乎有内存泄漏或教义之内的东西。
导致这种情况的函数非常简单:
private function insertCompareBatch($comparedProducts)
{
foreach ($comparedProducts as $comparedProduct) {
$this->entityManager->persist($comparedProduct->getProduct());
$this->entityManager->persist($comparedProduct);
}
$this->entityManager->flush();
$this->entityManager->clear();
}
我的第一个问题是: 有没有办法使学说方法可行?
(即请勿提出以下建议)
当这不起作用时,我尝试寻找其他解决方案。并发现了LOAD DATA INFILE
。
但是我不确定如何实现。原则有助于处理自动增量列和关联。
我可以轻松地为上面保留的两个实体编写一堆.csv
,但是如何创建它们之间的关联?
ComparedProduct
实体具有一个到Product
实体(例如product_id
)的连接列。我还不知道product_id
,因为尚未插入。
如果无法使用教义,我该如何使这种方法起作用?