雅虎财经查询速度
Yahoo-Finance Query Speed
我目前正在从事一个项目,该项目涉及查询 yahoo-finance 以获取许多不同的股票代码。瓶颈是从雅虎获取数据,所以我想知道是否有办法加快速度。
如果我使用多台机器查询然后聚合数据,是否有帮助?我只有一台物理机;我该怎么做呢?
谢谢!
编辑:目前,我正在使用 Node.js、yahoo-finance 和 Q.deferred 向 yahoo 询问历史数据。然后,一旦所有的承诺都实现了(对于每个自动收报机),我正在做一个 Q.all() 来保存数据。
var data = [];
tickers = ["goog", "aapl", ...];
...
Q.all(_.map(tickers, function(symbol) {
return getYahooPromise(symbol);
}))
.done( function() { persistData(data) });
getYahooPromise 检索股票代码的数据并将其推入数据数组。一旦所有承诺都得到解决,数据就会保存在 MySQL 数据库中。
第二次编辑:
更多代码:
var sequentialCalls = [];
for ( var i = 0; i < tickers.length / chunkSize; i++ ) {
sequentialCalls.push( persistYahooChunk );
}
sequentialCalls.push( function(callback) {
connection.end();
callback();
});
async.series( sequentialCalls )
exports.persistYahooChunk = function(callback) {
console.log("Starting yahoo query");
var currentTickers = tickers.slice(currentTickerIndex,currentTickerIndex + chunkSize);
return yahooFinance.historical( {
symbols: currentTickers,
from: "2015-01-28",
to: "2015-02-05"
}).then( function(result) {
console.log("Query " + currentTickerIndex + "/" + tickers.length + "completed");
currentTickerIndex += chunkSize;
//add valid data
var toPersist = _.map(result, function(quotes, symbol) {
return [symbol, quotes.length != 0 ];
});
var query = "INSERT INTO `ticker` (`symbol`, `valid`) VALUES ?";
connection.query(query, [toPersist], function(err, result) {
if (err) {
console.log (err);
}
//console.log(result);
callback();
});
});
}
瓶颈是因为每个代码执行一个查询。
根据您需要提取的数据,如果您可以执行包含所有代码的单个查询,速度会快得多。
这是一个示例,如果您需要通过单个查询获取代码列表的所有当前价格:
http://finance.yahoo.com/webservice/v1/symbols/A,B,C,D,E/quote?format=json
我目前正在从事一个项目,该项目涉及查询 yahoo-finance 以获取许多不同的股票代码。瓶颈是从雅虎获取数据,所以我想知道是否有办法加快速度。
如果我使用多台机器查询然后聚合数据,是否有帮助?我只有一台物理机;我该怎么做呢?
谢谢!
编辑:目前,我正在使用 Node.js、yahoo-finance 和 Q.deferred 向 yahoo 询问历史数据。然后,一旦所有的承诺都实现了(对于每个自动收报机),我正在做一个 Q.all() 来保存数据。
var data = [];
tickers = ["goog", "aapl", ...];
...
Q.all(_.map(tickers, function(symbol) {
return getYahooPromise(symbol);
}))
.done( function() { persistData(data) });
getYahooPromise 检索股票代码的数据并将其推入数据数组。一旦所有承诺都得到解决,数据就会保存在 MySQL 数据库中。
第二次编辑: 更多代码:
var sequentialCalls = [];
for ( var i = 0; i < tickers.length / chunkSize; i++ ) {
sequentialCalls.push( persistYahooChunk );
}
sequentialCalls.push( function(callback) {
connection.end();
callback();
});
async.series( sequentialCalls )
exports.persistYahooChunk = function(callback) {
console.log("Starting yahoo query");
var currentTickers = tickers.slice(currentTickerIndex,currentTickerIndex + chunkSize);
return yahooFinance.historical( {
symbols: currentTickers,
from: "2015-01-28",
to: "2015-02-05"
}).then( function(result) {
console.log("Query " + currentTickerIndex + "/" + tickers.length + "completed");
currentTickerIndex += chunkSize;
//add valid data
var toPersist = _.map(result, function(quotes, symbol) {
return [symbol, quotes.length != 0 ];
});
var query = "INSERT INTO `ticker` (`symbol`, `valid`) VALUES ?";
connection.query(query, [toPersist], function(err, result) {
if (err) {
console.log (err);
}
//console.log(result);
callback();
});
});
}
瓶颈是因为每个代码执行一个查询。
根据您需要提取的数据,如果您可以执行包含所有代码的单个查询,速度会快得多。
这是一个示例,如果您需要通过单个查询获取代码列表的所有当前价格:
http://finance.yahoo.com/webservice/v1/symbols/A,B,C,D,E/quote?format=json