大佬教程收集整理的这篇文章主要介绍了如何高效地将批量数据集插入到mysql数据库中,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一些关于 symfony5 命令类以及如何有效插入 ca 的问题。 1000 万个条目(只有一个实体具有 UuID 字段并且与其他实体没有任何关系)。整个噱头没有任何目的,只是为了使用 elasticsearch 运行一些测试。
现在,在插入数据时,到目前为止一切正常,但持续数小时(20k / h)。
for ($i = 0; $i < $numberOfVochers; $i++) {
$voucher = new Voucher();
$voucher->setCode(UuID::v4());
$voucher->SETVALID(new datetiR_837_11845@e());
$this->em->persist($voucher);
$this->em->flush();
}
我应该做什么(除了摆脱我的硬件:MACBook Pro 2,3 GHz Intel Core i5,8GB)以更快地完成这项工作?
一方面,您应该执行批量更新,例如像这样:
for ($i = 0; $i < $numberOfVochers; $i++) {
$voucher = new Voucher();
$voucher->setCode(Uuid::v4());
$voucher->SETVALid(new datetiR_837_11845@e());
$this->em->persist($voucher);
if ($i % 100) {
$this->em->flush();
}
}
$this->em->flush(); // just in case the last badge was not added
此外,您应该在每次刷新后调用 $this->em->clear()
,以确保不会遇到内存问题。在您的情况下,$voucher
不依赖于先前插入的数据,因此 clear()
不应造成任何问题。
由于此操作是批量执行的,您现在可以更新您的命令以对创建进行分区,即您可以为 1/4 的优惠券启动该过程 4 次,而不是为所有优惠券调用一次您的命令。然后您有 4 个进程进行插入,这通常会提高性能,因为每个进程都可以在不同的处理器上运行。在您的情况下,由于每个凭证都可以独立创建,因此工作量不大。在其他情况下,您可能必须调整您的命令才能正确地划分工作。
或者,您也可以在您的命令中使用线程(不推荐)或使用类似 messenger 之类的东西将任务分成批次,为每个批次发送一条消息,然后使用多个工作人员来处理消息。
以上是大佬教程为你收集整理的如何高效地将批量数据集插入到mysql数据库中全部内容,希望文章能够帮你解决如何高效地将批量数据集插入到mysql数据库中所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。