Я хотел бы знать, эффективна ли следующая структура, которую я использую для хранения данных, а затем их извлечения, или есть ли лучший способ.Мой код работает, но я беспокоюсь, если передается / обрабатывается больше данных, чем нужно.
Это пошаговая игра для двух игроков.Игрок 1 отправляет свой ход в базу данных в реальном времени, а игрок 2 получает его.Важно, чтобы он извлекал ходы в правильном порядке (т.е. в том же порядке, в котором они были отправлены игроком 1).
Это код, который я использую для отправки ходов игроков в базу данных:
multiplayer.sendMove = function(roomRef, turnNum, vectorX, vectorY){
var currentMove = {
n: turnNum,
x: vectorX,
y: vectorY
};
var moveRef = roomRef.child("moves").push();
moveRef.set(currentMove, function(error) {
if (error) {
console.log("Error sending move.", error);
} else {
console.log("move sent");
}
})
}
Это создает следующую запись в базе данных:
{
"rooms": {
"-LXU8-36ISMY8YZnI7fr": {
"moves": {
"-LXZv-7zMCZdrH7ffoWf": {"n": 1, "x": 532, "y": 242},
"-LXZv7LlQTkBEtls0PP2": {"n": 2, "x": 352, "y": 944}
}
}
}
}
И, наконец, я получаю ход, соответствующий текущему ходу, используя следующее:
function listenForOpponentMove(roomRef, turnNum){
var moveRef = roomRef.child('moves').orderByChild("n").equalTo(turnNum);
moveRef.on('child_added', function(snapshot){
if(snapshot.val()){
var move = snapshot.val();
console.log("move received: x = " + move.x + ", y = " + move.y);
}
})
}
Меня особенно беспокоит то, что по мере увеличения числа ходов в одной игре я предполагаю, что в конечном итоге я захочу хранить больше данных для каждого хода, чем просто значения x и y, что при выполнении поиска по ходам'узел для текущего поворота, он будет просматривать довольно много данных.Что мне неясно, так это то, что ВСЕ данные в узле 'move' будут передаваться клиенту каждый раз, когда добавляется дочерний элемент, или только текущий ход, который соответствует ходу, который я ищу с помощью 'orderByChild '.
Большое спасибо.