Приложение браузера и доступ локальной файловой системы

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

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

Альтернативой является не обновлять баланс, а просто вести список транзакций. В этом случае вы можете убедиться, что как сложение для первого пользователя, так и вычитание для второго пользователя написаны атомарно, используя обновление нескольких местоположений. В 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);

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

16
задан BIBD 15 November 2008 в 23:45
поделиться