快速向有关系的表中插入 200 多个数据 - Laravel 5.6
Posted
技术标签:
【中文标题】快速向有关系的表中插入 200 多个数据 - Laravel 5.6【英文标题】:Fastly insert 200+ data to the tables with relationship - Laravel 5.6 【发布时间】:2021-12-08 02:36:29 【问题描述】:表格:空缺职位
id int 无符号自动增量 code varchar(191) NULLstart_time timestamp NULLend_time timestamp NULLbusiness_unit_id int unsignedjob_id int unsignedon_date datebreak int NULLshift_id int unsignedtotal_numbers int
表格:vacancy_details
id int 无符号自动增量 vacancy_id int unsignedday_id int unsignedshift_id int unsignedrate_type enum(' flat_rate','hourly_rate') [hourly_rate]start_time 时间戳 NULLend_time 时间戳 NULLbreak int NULLtotal_hours 十进制(10,2) NULL client_rate 十进制(8,2) NULL
表格:vacancy_staff_rates
id int 无符号自动增量 vacancy_id int unsignedvacancy_detail_id int unsigned NULLemployment_type_id int unsignedstaff_rate decimal( 8,2) 空
public function store_multiple($subdomain, Request $request)
if($request)
$payloads = $request->data;
foreach($payloads as $payload)
$payload = (object) $payload;
//insertion(3 tables) and all the calculations and logic are doing in this add_vacancy()
$vacancy = Vacancy::add_vacancy($payload);
这是 3 张桌子。当我添加 10 或 20 时,插入速度很快,但 100 或更多则需要更多时间。任何人都可以建议一种更胖的方法吗?
【问题讨论】:
尝试实现作业和队列。它会将您的工作分成更小的块。参考 - laravel.com/docs/8.x/queues. 但是如果我需要每条记录的即时验证结果怎么办? @VivekPawar “太慢”有多慢?即使以最慢的方式,我预计 200 次单行插入也不会超过 2 秒。有多种方法可以加快速度。磁盘是 HDD 还是 SSD? @RickJames 不是 200 单行插入,在插入每一行之前应该有一些验证和计算。表示为每个空位行获取每天的费率。 【参考方案1】:建议:
将 200 行收集到一个单独的表中(可能是一个TEMPORARY
表)。然后在此表中根据需要调整值。一些(全部?)按摩可以批量进行;也就是说,同时所有 200 行。如果您需要“规范化”(将一些字符串转换为 id),现在是这样做的好时机。
然后,作为最后一步,执行单个 INSERT INTO real SELECT ... FROM temp
将它们放在它们所属的位置。
【讨论】:
以上是关于快速向有关系的表中插入 200 多个数据 - Laravel 5.6的主要内容,如果未能解决你的问题,请参考以下文章