Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用symfony导入bigdata_Php_Database_Symfony_Csv_Import - Fatal编程技术网

Php 如何使用symfony导入bigdata

Php 如何使用symfony导入bigdata,php,database,symfony,csv,import,Php,Database,Symfony,Csv,Import,我有一个从csv导入数据到数据库的问题 目前,我的代码如下所示: public function run() { $this->startProgressBar(); foreach ($this->elements as $element) { $this->insertCity($element); $this->advanceProgressBar(); } $this->finishProgre

我有一个从csv导入数据到数据库的问题

目前,我的代码如下所示:

public function run()
{
    $this->startProgressBar();
    foreach ($this->elements as $element) {
        $this->insertCity($element);
        $this->advanceProgressBar();
    }
    $this->finishProgressBar();
}

/**
 * @param array $item
 */
private function insertCity(array $item = [])
{
    $repository = $this->getDoctrine()->getRepository(Commune::class);
    $commune = $repository->findOneByTerc($this->getTerc($item));

    $district = $item['uid'] == $item['district_uid'] ? null : $item['district_uid'];

    $city = new City();
    $city->setName($item['name']);
    $city->setCommuneId($commune->getId());
    $city->setDistrictUid($district);
    $city->setType($item['city_type']);
    $city->setUid($item['uid']);

    $this->getDoctrine()->getManager()->persist($city);
    $this->getDoctrine()->getManager()->flush();
}
我选择并插入的每一行。我的csv文件有100k行。在1小时内,此代码仅导入10k行:(

任何想法,我如何优化它

Filip.

使用SQL

从学说网站:

ORM工具主要不适合大规模插入、更新或删除


在循环中尽可能少做,不要在循环中获取存储库和实体管理器,并且不要每次刷新。我只考虑使用简单的DQL查询并执行它。应该在循环之外准备查询并在循环内执行。并且不刷新这些更改。often@JimL你说准备查询是什么意思t跳过循环?你能提供一个例子吗?你应该坚持每次迭代,但只有当你排队(相当多)几个实体要坚持时才刷新(更新数据库)。太好了:)始终记住在循环内尽量少做,请记住,您正在运行该代码10万次^^如果您在循环中调用一个函数来循环某些内容等,情况会变得更糟。请保持简单:)对唯一正确的答案投赞成票。有什么有用的评论吗?不确定,因为不是我,但我猜是因为你只是简单地说了“使用SQL”,没有解释如何使用或为什么使用,然后你链接到了文档,实际上展示了一种方法,可以在仍然使用原则的情况下进行批量插入并提高速度,但跳过了这一点,只是简单地引用了这句话。我可能会把你的答案修改得更具体一点。