用laravel excel导入用户的excel
能够预计到的一个excel大概会有几千到几万条不等。
需要判断不导入重复的用户,比如导入10000人 数据库里面已经有100人了 那么这100人需要被判断出来 做另外的逻辑处理。另外9900人导入。并且记录着9900的插入状态 比如成功8000条 失败1900条。想在想到几个方案 不知道哪个比较合理
1、传统的批量的插入方法,无法精确到每条数据是否重复或者记录返回状态。但是效率应该是比较高的。
2、用for循环 插入前 先查询然后是否存在 然后插入完再记录状态 从业务逻辑上是最能符合需求的 但是效率很低,估计很容易就要500错误或者timeout。
3、在2的基础上改进 把整个过程写进队列 chunk分组后 进队列 然后后台处理。缺点就是用户相对来说体验比较差,不能立等可取 还需要配合通知系统来做这个。
4、查了下 还有种是用事务 分块提交,不知道这种如何 还没有测试。也请各位大大指教。
不知道各位大大还有什么更好的办法。能够在效率和逻辑中都比较平衡的。感谢了
过去多啦不再A梦2017-05-16 13:00:18
質問の意味を見ると、
1. Excel のアップロード
2. Excel の分析、保存
3. データをユーザーに返す であることがわかります。
重複ユーザーがいるかどうかを判断し、成功と失敗のステータスを記録する場合は、最初にそれを Redis に保存することを検討できます。これにより処理が速くなり、最後にすべての結果がデータベースに保存されて処理されます
大家讲道理2017-05-16 13:00:18
私の考えを教えてください。気に入らない場合はコメントしないでください。
データベースと Excel の一意の識別子がユーザー ID 番号であると仮定します。
データベース内の既存のID番号を確認してください
Excel がアップロードされると、各行を走査し、現在のデータの ID 番号がデータベース内で見つかり、配列内にあるかどうかを判断します
そこにない場合は、それをデータベースに書き込み、見つかった配列に ID 番号を追加します
「はい」の場合はスキップしてください
私のオンライン環境では、一度に 50,000 行以上の Excel ファイルをアップロードしましたが、待ち時間はわずか約 6 秒です
もちろん、各オンライン環境と Excel ファイルの単一の行と列の数は異なります。
これは投稿者の参考用です