Перемещение точек от пользователя к другому с использованием базы данных транзакций в реальном времени

func letterize() -> [Character] {
    return Array(self.characters)
}
0
задан Saifallak 3 March 2019 в 11:47
поделиться

1 ответ

Не существует безопасного способа реализации условий между несколькими транзакциями.

Если обе операции зависят друг от друга, они должны выполняться как одна транзакция. Это означает, что у вас есть оптимистическая блокировка для всех «пользователей», но в вашей текущей структуре данных и требуемом решении.

Альтернативой является не обновлять баланс, а просто вести список транзакций. В этом случае вы можете убедиться, что как сложение для первого пользователя, так и вычитание для второго пользователя написаны атомарно, используя обновление нескольких местоположений. В JavaScript это будет выглядеть примерно так:

ref = firebase.database().ref("users");
var updates = {};
let transactionID = ref.push().key;
updates["uid1/transactions/"+transactionID] =  20;
updates["uid2/transactions/"+transactionID] = -20;
ref.update(updates);

Приведенная выше операция записи либо завершится успешно, либо завершится неудачей. Это гарантирует, что ваша база данных всегда верна.

0
ответ дан Frank van Puffelen 3 March 2019 в 11:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: