1

現在、iPhone から Rails サーバーに巨大な CSV ファイルをインポートしています。この場合、サーバーはデータを解析してから、データ行をデータベースに挿入し始めます。CSV ファイルはかなり大きいため、操作が終了するまでに時間がかかります。

これを非同期で行っているため、iPhone は他のビューに移動して他のことを行うことができます。

ただし、別のテーブルで別のクエリを要求すると、最初の操作がまだ CSV の情報をデータベースに挿入しようとしているため、ハングします。

この種の問題を解決する方法はありますか?

4

1 に答える 1

1

データベースの挿入が完了したときに電話が気にしない限り、CSVファイルをサーバーのtmpディレクトリに保存してから、そのファイルからデータベースにスクリプトを書き込んでみてください。または、単にメモリに保存します。そうすれば、電話がCSVファイルを投稿すると、スクリプトがデータベースの挿入を非同期的に処理している間に、他のことに移ることができます。はい、@ Barmarは、MyISAM(一部の構成ではデフォルトの場合があります)ではなく、InnoDBエンジンを使用することについて正しいです。

または、保留中のすべての読み取り呼び出しが終了するまで書き込み呼び出しを遅らせる「優先度の低い更新」を有効にすることを検討することもできます。MySQLテーブルロックに関するこの記事を参照してください。(正確に何がぶら下がっているのかわかりません:更新、または更新の実行中に読み取る…)

とにかく、電話から非同期に(つまり、UIスレッドからではなく)データを投稿する場合、同時HTTP接続の最大数を超えて使用しようとしない限り、問題にはなりません。

于 2013-03-14T03:25:58.037 に答える