【发布时间】:2019-10-15 19:32:48
【问题描述】:
亲爱的,
实际上,我想知道在 LARAVEL/MYSQL 中操作 BIG DATA 的最佳解决方案。
在我的系统中,我将每日 excel 文件(5K 行)上传到我的数据库中,以防我在表中找到相同的行,所以我不插入它,如果我找到相同的行,我更改了上传的我的数据库中的日期。
每次我上传 excel 时,我都会检查每一行是否存在于我的表中(表包含 > 50K),并使用如下所示的普通数组
$res = policies::where('phone', '=', $row['phone'])
->where('draft_no', '=', $row['draftno'])
->where('due_date', '=', $duedate)
->where('status', '=', $stat)
->where('bord_date', '=', $borddate)
->where('amount', '=', $row['amnt'])
->where('remarks', '=', $row['remarks'])
->exists();
if(!$res) {
// insert row ($table->save())
}
else {
//update uploaded date to this row.
}
此过程需要大量时间 bcz 每次检查表。我尝试使用 array_chunk 来插入,但是负载仍然很大(15 分钟到 20 分钟)才能完成
非常感谢您的建议。
谢谢
【问题讨论】:
-
可能在某处存储散列(如莱昂纳多建议的那样)是一种出路。也许 Redis 将是一个选择
-
也许在插入触发器之前会做一些工作。