php - laravel中导入excel 数据量很大的情况下 处理重复数据时如果做最好
世界只因有你
世界只因有你 2017-05-16 12:58:18
0
2
1099

用laravel excel导入用户的excel
能够预计到的一个excel大概会有几千到几万条不等。
需要判断不导入重复的用户,比如导入10000人 数据库里面已经有100人了 那么这100人需要被判断出来 做另外的逻辑处理。另外9900人导入。并且记录着9900的插入状态 比如成功8000条 失败1900条。想在想到几个方案 不知道哪个比较合理
1、传统的批量的插入方法,无法精确到每条数据是否重复或者记录返回状态。但是效率应该是比较高的。
2、用for循环 插入前 先查询然后是否存在 然后插入完再记录状态 从业务逻辑上是最能符合需求的 但是效率很低,估计很容易就要500错误或者timeout。
3、在2的基础上改进 把整个过程写进队列 chunk分组后 进队列 然后后台处理。缺点就是用户相对来说体验比较差,不能立等可取 还需要配合通知系统来做这个。
4、查了下 还有种是用事务 分块提交,不知道这种如何 还没有测试。也请各位大大指教。

不知道各位大大还有什么更好的办法。能够在效率和逻辑中都比较平衡的。感谢了

世界只因有你
世界只因有你

全員に返信 (2)
过去多啦不再A梦

質問の意味を見ると、
1. Excel のアップロード
2. Excel の分析、保存
3. データをユーザーに返す であることがわかります。

プロセス全体は非常に時間がかかります。ユーザーに[処理中]のステータスを与え、バックグラウンドで処理し、処理が完了した後に結果を出力することができます。

重複ユーザーがいるかどうかを判断し、成功と失敗のステータスを記録する場合は、最初にそれを Redis に保存することを検討できます。これにより処理が速くなり、最後にすべての結果がデータベースに保存されて処理されます

いいねを押す+0
    大家讲道理

    私の考えを教えてください。気に入らない場合はコメントしないでください。

    データベースと Excel の一意の識別子がユーザー ID 番号であると仮定します。

    • データベース内の既存のID番号を確認してください

    • Excel がアップロードされると、各行を走査し、現在のデータの ID 番号がデータベース内で見つかり、配列内にあるかどうかを判断します

    • そこにない場合は、それをデータベースに書き込み、見つかった配列に ID 番号を追加します

    • 「はい」の場合はスキップしてください

    私のオンライン環境では、一度に 50,000 行以上の Excel ファイルをアップロードしましたが、待ち時間はわずか約 6 秒です
    もちろん、各オンライン環境と Excel ファイルの単一の行と列の数は異なります。
    これは投稿者の参考用です

    いいねを押す+0
      最新のダウンロード
      詳細>
      ウェブエフェクト
      公式サイト
      サイト素材
      フロントエンドテンプレート
      私たちについて 免責事項 Sitemap
      PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!