Самый эффективный способ структурировать и извлекать данные для пошаговой игры для двух игроков с использованием базы данных Firebase Realtime - PullRequest
0 голосов
/ 01 февраля 2019

Я хотел бы знать, эффективна ли следующая структура, которую я использую для хранения данных, а затем их извлечения, или есть ли лучший способ.Мой код работает, но я беспокоюсь, если передается / обрабатывается больше данных, чем нужно.

Это пошаговая игра для двух игроков.Игрок 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 '.

Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...