Всем привет.
Имеются запросы в бд с проверкой на актуальность и пополнением баланса. Необходимо оптимизировать запрос, возможно сократив время обработки. Тк иногда запрос даже не обрабатывается. Приложение высоконагруженное и необходима быстрота отработки запроса (ибо одновременно может быть более 1000 таких запросов на пополнение баланса). У самого сделать это не получается, поэтому прошу помощи у вас, выручите пожалуйста
$app.mysql.getConnection(function(err, connection) {
if(err) {
self.error('[Balance2] '+ err);
return;
}
connection.query("SELECT * FROM `trade_log` WHERE `tradeId` = ? and `status` = 'send'", offer.tradeofferid, function(err, rows, fields) { //Тут проверка имеется ли такая запись в бд
if(err) {
self.error('[Balance3] '+ err);
return;
}
if(typeof rows[0] == "undefined") {
return;
}
connection.query('UPDATE `trade_log` SET status = "success" WHERE tradeId = ?', offer.tradeofferid, function(err, results) { //Если имеется, то ставим статус success
if(err) {
self.error(err);
return;
}
if(results.affectedRows == 0) {
self.debug("NOT UPDATE TRADE OFFER #" + offer.tradeofferid);
return;
}
connection.query("SELECT * FROM `trade_log` WHERE `tradeId` = ? and `status` = 'success'", offer.tradeofferid, function(err, rows, fields) { //Получаем оставшиеся данные записи
if(err) {
self.error(err);
return;
}
var sum = rows[0].sum;
connection.query('UPDATE `users` SET `balance` = `balance` + ? WHERE steam_id = ?', [sum, offer.steamid_other], function(err, results) { //Пополняем баланс
if(err) {
self.error(err);
return;
}
if(results.affectedRows == 0) {
self.debug("NOT UPDATE USER BALANCE steamid=" + offer.steamid_other + ", sum=" + sum);
return;
}
self.debug("TRADE OFFER #" + offer.tradeofferid + " ОТ: " + offer.steamid_other + " БЫЛ ПОДТВЕРЖДЕН");
$app.io.emit('deposit', {
steam_id: offer.steamid_other,
sum: sum,
});
});
});
});
});
connection.release();
});