2011-02-08 6 views
0

ユーザーがサイト上でデータをインポートできるようにする必要があります(mysqlデータベース内)。ログインしたすべてのユーザーは、ファイルからデータベースにデータをインポートし、サイト上でそれらのデータベースと作業できます。データのインポートには時間がかかり、データベースへの負荷も高くなります。 インポートをキューに入れる方法を教えてください。したがって、データは1つのオンラインでインポートされますが、定期的にデータベースに書き込まれるデータをキューに入れます。 ありがとうございます。サイトのユーザーがファイルからデータベースにデータをインポートする

+1

現在、どのように処理していますか?あなたのデータはXML、CSVをインポートしていますか? – Dai

+2

ファイルをディレクトリに格納し、キューデータベースに追加してから、次のキューに入れられたアイテムを定期的に取得してプロセスを実行させることができます。 –

+0

.csvファイルのデータは、1つのデータベースに書き込まれるのではなく、複数の関連するテーブルに書き込まれます。したがって、データをインポートするには、ファイルから行を読み込み、データを書き込む複数のSQL文を作成する必要があります。INSERT INTO main_tabelのように見えます。 LASTINSERTID();このIDの関連テーブルに挿入します。 – Oleg

答えて

0

私の提案は、.CSVファイルをアップロードし、メッセージをキューに投稿することです(または、[インポート]ボタンをクリックするなどの他のイベントでメッセージを投稿する)ことをお勧めします。この方法で、すぐに戻り、「お待ちください」などのメッセージを表示することができます。その後、インポートが完了し、データベースが更新されると、HTMLページが更新され、適切なステータスが表示されます。サーバーやデータベースの負荷に応じて、同時に1つまたは複数の同時インポートを実行できます。

+0

はい、この場合、インポートを処理するcronのcli phpのスクリプトを使用する価値はありますか?私は小さな部分でファイルをインポートすると同時に、ログイン遅延なしでインポートすることが可能です。私は定期的にデータをインポートするスクリプトをより良くする方法を知っていますか?私はZend Frameworkを使用しています.Zend_Queueがそのようなタスクで問題がなければ面白いです(それはデータベースに別の接続が必要なように思えます。 – Oleg

+0

あなたが使用するキューマネージャに基づいて、キューマネージャはキューに新しいメッセージがあるとき(つまり、処理前に遅延がない)、クライアントを開始するように設定できます。 Zend_Queueがこのような処理を実行できるかどうかはわかりません。 –

+0

私はZend_Queueがそれを行うことはできないと思います。 – Oleg

0

おそらくinsert delayedが役に立ちます。マニュアルから:

DELAYED INSERT を使用してのもう一つの大きな利点は、多くの クライアントからの挿入が一緒にバンドルされていると は、1つのブロックに書かれたということです。これは多くの別個の 挿入物を実行するよりもずっと速く です。

+0

インセット遅延はmyisamでのみ機能し、InnoDbを使用します。 – Oleg

+0

おそらく、私は小さなファイルをオンラインで処理しますが、大きなファイルはいくつかのキューメカニズムを必要とします。 – Oleg

関連する問題