電子書籍の厳選無料作品が豊富!

mysqlのCSV出力について意見下さい。
mysqlからコマンドで50000万行のURLをCSV出力させるとすぐに出力されますが、ブラウザからダウンロードすると10分近くかかります。ブラウザのダウンロードは遅いものでしょうか?最悪シェルをキックして起動しようとしてます。

A 回答 (3件)

現に、コマンドでは応答がすぐに返ってくるとのことですし、


50000行のcsvをサーバのローカル内に生成することについては、
それほどボトルネックにはなっていないと思います。
むしろ、ブラウザダウンロードするファイルのサイズについてですが、
CSV各行100文字あったとして、ファイルサイズは約5Mほどになります。
実運用でどのくらいのファイルサイズになるのかわかりませんが、
当然、ブラウザからのダウンロードも
ユーザーの環境によっては時間がかかるものになってしまうと思います。

ボトルネックはサーバ側WEBプログラムでのCSV作成ではなく
生成されたファイルをダウンロードする部分にあるような気がしています。
もしそうであった場合、シェルのキックに変更しても
実測時間は余り変わらないのではないでしょうか?

現在のプログラムから
 A.CSVを生成するプログラムのみを実行して、所要時間を計測
 B.出来上がったファイルをサーバ上に配置し、
  URLを直接CSVファイルに向けてダウンロードのみの所要時間を計測
といった2ステップを行ってみると、
原因が明確になると思います。

CSVを手に入れさせることが目的であれば、
 (1)コマンドでCSVを作成
 (2)出来上がったCSVをgzipで圧縮
 (3)zipをブラウザからダウンロード
というプロセスを実現したほうがよいかもしれませんね。
    • good
    • 0
この回答へのお礼

詳細な検証まで行ってませんが、

PHPでprintfを
50000回行ってその出力結果をファイル出力にする
というのが時間がかかってます。

5分でダウンロードすると5分でタイムオーバーになり
途中まで書かれたファイルがダウンロードされます。


なーるほど、圧縮すればいいですね。
>CSVを手に入れさせることが目的であれば、
> (1)コマンドでCSVを作成
> (2)出来上がったCSVをgzipで圧縮
> (3)zipをブラウザからダウンロード
>というプロセスを実現したほうがよいかもしれませんね。

お礼日時:2009/09/23 17:08

クロック数が関係するのかどうかは発行するSQLの複雑度によります。


確実に関係するのはHDDの速度です。
回線を10分かかって転送する位の大容量のファイルを読み書きする速度です。
SQLがそれほど時間がかからないということは単純なSQLかインデックスを使用した検索のみだと思われますので、それほどCPUは使っていないと思います。
それよりも大容量のデータを読み出してそれをCSVで書き出すHDDの性能がほとんどCSV出力時に時間だと思われます。もともとMysqlなんてそんなに高度なことはできないと思っていますので、それほどCPUは食わないのでは?と思います。
Oracle等ではそれなりにCPU性能が影響しますがHDD性能差に比べればそれほど・・・
DB構築の際、一番のポイントはHDDの高速化+分散化かメモリのどちらかで、CPU性能はおまけみたいなものですから・・・
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

ハードよりも、自分のかいたプログラムが悪そうです。(100%)

単純なSQLです。

select * from table;

です。

DBでoracleは、何がすごくてmysqlだと何がだめなのか?
自分は、検討もつきません。
有料か無償ぐらいしか差がわかりません。

分散化の必要性も迫られたことがありません。
これからwildcat-ypさんがおっしゃるような問題に
つきあたるのでしょうか?

お礼日時:2009/09/23 17:12

そりゃあ、当然、同じスピードではあり得ませんよね?


10分が遅いか早いかはファイルの容量と回線の速度を出してもらわないと何とも言えません。
まあ、それ以前に50000万行(5億行?)のファイルがすぐに出力されるというのも不思議な話ですが?
どんなサーバー使ってるんですか?

ファイルの出力速度もダウンロード速度もある程度は計算で出せるはずです。
回線速度と比較してどのくらい出ているのか調べて、やはり遅いようであれば、ブラウザ等の設定を疑ってみては?

FTPでも遅いのであれば、回線がおかしいのでしょう。
基本的にはHTTPとFTPはそれほど転送速度に差があるとは思えませんので。
    • good
    • 0
この回答へのお礼

やはり回線速度 VS LINUXマシンのクロック数になるんですね。
大きなファイルはダウンロードしないようにします。

お礼日時:2009/09/22 08:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す