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);