将大量数据库插入PHP中的多个表(具有相互关联)

时间:2019-01-23 11:19:11

标签: php sql doctrine-orm doctrine

我要插入到数据库中的数据很多(我使用的顺序是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();
}

我的第一个问题是: 有没有办法使学说方法可行?

我尝试过的事情:

(即请勿提出以下建议)

  • 增加内存限制。(我已经尽力了。)
  • 禁用SQL记录器(有所帮助,但还不够。)
  • 取消设置/取消设置(我已经覆盖了父函数中的参数,可以放心地进行gc操作了。)
  • 直接与GC联系(这毫无意义,如果GC中有任何内容,引擎将在内存不足时这样做。)

替代方法:

当这不起作用时,我尝试寻找其他解决方案。并发现了LOAD DATA INFILE

但是我不确定如何实现。原则有助于处理自动增量列和关联。

我可以轻松地为上面保留的两个实体编写一堆.csv,但是如何创建它们之间的关联?

ComparedProduct实体具有一个到Product实体(例如product_id)的连接列。我还不知道product_id,因为尚未插入。

如果无法使用教义,我该如何使这种方法起作用?

0 个答案:

没有答案