目前我正在尝试通过加载雅虎的 csv 文件来保存库存数据。我创建了一个名为 stock 的数据库,其中包含 NASDAQ/NYSE/AMEX 的股票代码名称作为表格(大约 6,5 K 个表格)。问题是我得到的数据的保存时间太长了。我想在 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);
}
}
所以现在我想知道:
- 有没有办法通过更改脚本更快地保存?
- 我知道有可能配置 mysql 设置,如 buffer_size 等。我该怎么做以及我必须改变什么?
- 如果这是我需要的节省时间,我无法使用 mysql,还有什么替代方案?
得到一些帮助会很高兴。
谢谢。