EmberFire Отношения Устойчивость

Используя EmberFire, я пытаюсь работать со связанными наборами данных. В этом случае у Кампании есть много Игроков, и у Игроков есть много Кампаний.

Когда я хочу добавить игрока в кампанию, я понимаю, что могу переместить объект игрока в Campaign.Players, сохранить игрока, а затем сохранить кампанию. Это обновит обе записи, так что связь будет цементирована. Это отлично работает.

Мой вопрос гипотетический о том, как обрабатывать сбои при сохранении одной или обеих записей.

Например, как бы вы справились со случаем, когда сохранение записи игрока прошло успешно (добавив, таким образом, соответствующий идентификатор кампании в поле своей кампании), но затем сохранить кампанию не удалось (таким образом, не удалось добавить игрока на поле игрока). Похоже, что в этом случае вы бы открыли себя для потенциала некоторых очень грязных данных.

Я подумывал сделать "моментальный снимок" обеих рассматриваемых записей, а затем сбросить их в их прежние состояния в случае сбоя одного обновления, но похоже, что он собирается создать какой-нибудь полумрачный код.

Мысли?

1 ответ

Я полагаю, вы используете базу данных в реальном времени. Если вы используете update() метод с разными путями "вы можете выполнять одновременное обновление нескольких мест в дереве JSON с помощью одного вызова update() "

Одновременные обновления, выполненные таким способом, являются атомарными: либо все обновления завершаются успешно, либо все обновления не выполняются

Из документации: https://firebase.google.com/docs/database/web/read-and-write

Итак, в вашем случае вы должны сделать что-то вроде следующего, но многие варианты возможны, как только updates Объект содержит все одновременные обновления:

  var updates = {};
  updates['/campaigns/players/' + newPlayerKey] = playerData;
  updates['/players/campaigns/' + campaignKey] = "true";

  return firebase.database().ref().update(updates);
Другие вопросы по тегам