1

ユーザーが Excel スプレッドシートをアップロードしてテーブルにデータをロードできる Web サイトがあります。Excel スプレッドシートには 10 万行が数行ある場合があります。彼がファイルをアップロードするとき、Web サイトはデータベース テーブルに同量の行を挿入する必要があります。

これを行うにはどのような戦略をとるべきですか?操作が完了するまで「お待ちください」のページを表示させようと思っていたのですが、そのままサイトを閲覧できるようにしたいです。また、そのときはデータベースが忙しくなるので、Web サイトの作業が滞ってしまうのではないでしょうか?

私のデータ アクセス層は NHibernate にあります。

ありがとう、Y

4

3 に答える 3

4

お待ちくださいページを表示することは、ユーザーがかなり長い間待っている可能性があり、Web サーバー上のスレッドをブロックする可能性があるため、かなり不親切です。

ファイルをアップロードして保存し、キューにエントリを作成して (これには別のテーブルが必要です)、処理を待っているファイルがあることを示します。次に、このキュー テーブルからタスクを取得し、独自の時間に xls ファイルを処理する別のプロセス (独自のサーバー上で実行することもできます) を作成できます。

于 2010-10-27T12:39:20.130 に答える
1

このリクエストを送信するアップロード キューを作成します。その後、ユーザーは時々キューにチェックインすることができます。行が処理されるときに、バッチ操作の進行状況をキューに格納できます。

また、データベース サーバーは堅牢で強力なマルチタスク システムです。挿入が行われている間にウェブサイトに問題が発生したことがない限り、人々がウェブサイトで作業できなくなるとは思わないでください。

ただし、挿入または同時読み取り/書き込みのパフォーマンスに関する限り、これに対処するメカニズムがあります。MySQL で「INSERT LOW PRIORITY」構文を使用するか、アプリケーションで各挿入の間に 1 ミリ秒スリープして挿入を調整することができます。また、insert ステートメントをどのように作成するか、バインドされたパラメーターを使用するかどうか、および複数値の挿入を使用するかどうかは、挿入のパフォーマンスとそれがクライアントに与える影響に大きく影響する可能性があります。

于 2010-10-27T12:40:31.753 に答える
0

送信時に、DB 操作を非同期 RequestHandler に渡し、完了時にセッション値を設定できます。

非同期プロセスの進行中に、各リクエストのセッション値を確認し、設定されている (操作 = 完了) 場合は、モーダルまたは任意のメッセージ メカニズムでメッセージを表示できます。

于 2010-10-27T12:44:42.127 に答える