質問

私は、ユーザーがテーブルにロード・データへのExcelスプレッドシートをアップロードすることができ、ウェブサイトを持っています。 Excelのスプレッドシートにいくつかの100kの行が存在する場合があります。彼は、ファイルをアップロードすると、ウェブサイトは、データベーステーブル内の行の同量を挿入する必要があります。

どのような戦略で、私はこれを実行するために取るべき?私は操作が完了するまで、「ページをお待ちください」しかし、私は彼がウェブサイトを閲覧し続けることができるようにしたいの表示を考えていました。また、その時点でのデータベースは一種忙しいのだろうので、 - ?でしょうではない、そのウェブサイト上で作業からストップ人

私のデータアクセス層は、NHibernateのである。

おかげで、 Y

役に立ちましたか?

解決

あなたのユーザーはかなり時間がwatingすることができ、Webサーバー上のスレッドをブロックするようしてください待機ページを表示することはかなり無愛想になります。

私は、処理されるのを待っているファイルがあることを示すために(あなたはこのためにanoutherテーブルが必要になります)、ファイルをアップロードし、それを保存し、キューにエントリを作成します。あなたは、このキュー表からタスクをピックアップし、それ自身の時間にXLSファイルを処理し(それは自分のサーバの上でも実行できる)別のプロセスを持つことができます。

他のヒント

私はこの要求を提出するアップロードキューを作成します。その後、ユーザーはただしばらく一度のキュー上でチェックすることができ。行が処理されているとして、あなたは、キュー内のバッチ処理の進行状況を保存することができます。

また、データベースサーバは堅牢で強力な、マルチタスクシステムです。インサートは負いませんが起こっているときに、ウェブサイトの問題を観察している場合を除き、それはウェブサイト上で働いてから人々を停止します。

しかし、限り挿入または同時読み取り/書き込みパフォーマンスが行くようにこれに対処するためのメカニズムがあります。あなたは、MySQLで「INSERT LOW PRIORITY」構文を使用するか、各インサートとの間のミリ秒を眠っていることにより、挿入スロットルあなたのアプリケーションを持つことができます。また、あなたがバインドされたパラメータを使用するかどうか天気をあなたは、あなたのINSERT文を作る方法を、あなたは挿入のパフォーマンスに影響を与えることができ、多値のインサートを使用して、それが大幅に顧客にどのような影響を与えるか。天気を

オンを使用すると、非同期のRequestHandlerにDB操作を渡し、その完了時にセッション値を設定することができ提出してください。

非同期プロセスの進行中にあなたが要求ごとにセッションの値を確認することができますし、それが設定されている場合(オペレーション=完了)モーダルまたは任意のメッセージメカニズムをお持ちでメッセージ、例えばを表示します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top