現在、ヤフーのcsvファイルを読み込んで在庫データを保存しようとしています。NASDAQ/NYSE/AMEX のティッカー名をテーブル (約 6,5 K テーブル) として構成する stocks というデータベースを作成しました。問題は、取得したデータの保存に時間がかかりすぎることです。セーブデータを1分刻みでロードしたい。読み込みには約 30 秒かかり、保存には約 3 分かかります。保存時間を短縮する必要があります。データを取得して保存するために私が書いたスクリプトは次のとおりです。
include('mysql_connect.php');
$ticker=array();
$db="stocks";
$res=mysql_query("SHOW TABLES FROM $db");
while($row=mysql_fetch_array($res,MYSQL_NUM)){
$ticker[]=$row[0];
}
$ticker_length=count($ticker);
$steps=floor($ticker_length/200);
for($j=0;$j<=$steps;$j++){
$ticker_url="";
if($j<$steps){
for($i=$j*200;$i<($j+1)*200;$i++){
if($i==(($j+1)*200)-1){
$ticker_url=$ticker_url.$ticker[$i];
}else{
$ticker_url=$ticker_url.$ticker[$i]."+";
}
}
$url="http://finance.yahoo.com/d/quotes.csv?s='$ticker_url'&f=snxab2l1va2p2opm3m4ghd1t1=.csv";
$filehandle=fopen("$url","r");
while(!feof($filehandle)){
$line=fgetcsv($filehandle,1024);
if( $line[0]=="" || $line[0]==null || !isset($line[0]) ){
//echo"Leer<br/>";
}else{
$Symbol=strtolower($line[0]);
$Name=$line[1];
$LastTradePriceOnly=$line[5];
$Volume=$line[6];
$query=mysql_query("INSERT INTO $Symbol(symbol,Name,LastTradePriceOnly,Volume)
VALUES('$Symbol','$Name','$LastTradePriceOnly','$Volume')");
}
}
fclose($filehandle);
}else{
for($i=$j*200;$i<$ticker_length;$i++){
if($i==$ticker_length-1){
$ticker_url=$ticker_url.$ticker[$i];
}else{
$ticker_url=$ticker_url.$ticker[$i]."+";
}
}
$url="http://finance.yahoo.com/d/quotes.csv?s='$ticker_url'&f=snxab2l1va2p2opm3m4ghd1t1=.csv";
$filehandle=fopen("$url","r");
while(!feof($filehandle)){
$line=fgetcsv($filehandle,1024);
if( $line[0]=="" || $line[0]==null || !isset($line[0]) ){
//echo"empty<br/>";
}else{
$Symbol=strtolower($line[0]);
$Name=$line[1];
$LastTradePriceOnly=$line[5];
$Volume=$line[6];
$query=mysql_query("INSERT INTO $Symbol(symbol,Name,LastTradePriceOnly,Volume)
VALUES('$Symbol','$Name','$LastTradePriceOnly','$Volume')");
}
}
fclose($filehandle);
}
}
だから今私は知りたい:
- スクリプトを変更して、より速く保存する方法はありますか?
- buffer_size などの mysql 設定を構成する可能性があることは知っています。どうすればそれを行うことができ、何を変更する必要がありますか?
- これが必要な節約時間である場合、mysql では不可能な場合、どのような代替手段がありますか?
助けが得られれば幸いです。
ありがとう。