laravel Excel を使用してユーザーの Excel をインポートします
Excel には数千から数万のエントリが含まれることが予想されます。
たとえば、10,000 人がインポートされ、データベースにすでに 100 人が存在する場合、これらの 100 人を判断し、追加の論理処理を実行する必要があります。さらに9,900人が輸入された。また、8000 件の成功と 1900 件の失敗など、9900 件の挿入ステータスを記録します。いくつかの解決策を考えていますが、どれがより合理的であるかわかりません
1. 従来のバッチ挿入方法では、各データが繰り返されるかどうかを正確に判断したり、戻りステータスを記録したりすることができません。しかし、効率は比較的高いはずです。
2. ビジネス ロジックからは、for ループを使用してクエリを実行し、挿入後にステータスを記録します。ただし、効率は非常に低く、500 件のエラーやタイムアウトが発生しやすいと推定されます。 。
3. 2. をベースに改善します。プロセス全体をキューに書き込み、チャンクをキューにグループ化し、バックグラウンドで処理します。欠点は、ユーザーエクスペリエンスが比較的低く、これを行うには通知システムと連携する必要があることです。
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 ファイルの単一の行と列の数は異なります。
これは投稿者の参考用です