В настоящее время я работаю над проектом, который включает в себя запрос на yahoo-finance для многих различных символов тикера. Узкое место приобретает данные от yahoo, поэтому мне было интересно, есть ли способ ускорить это.Yahoo-Finance Query Speed
Если бы я использовал несколько машин для запроса и затем агрегировал данные, это поможет? У меня только одна физическая машина; как я могу это сделать?
Спасибо!
EDIT: В настоящее время я использую 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.
ВТОРОЙ EDIT: Подробнее Код:
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();
});
});
}
вы выполнение 1 запроса за линеечку или одного запроса для всех линеечки ? Также покажите код. – ibiza
Ах, только что отредактировано - один запрос за тикер. Если это причина замедления, есть ли способ, которым я могу распылять запросы, чтобы, если операция ухудшилась, я не потеряю все данные? – ZenPylon