2017-08-18 2 views
0

Firebase Datenbank:Google Firebase Realtime-Datenbank setValue IF (Bedingung)

{ 
    "balance" : 10 
} 

Anwendung 1 (Pseudo-Code):

if (balance-10 >= 0) 
{ 
    // Application freezes for a few seconds. (Connection/hardware issue or whatever reason) 
    balance -= 10; 
} 

Anwendung 2 (Pseudo-Code):

if (balance-10 >= 0) 
{ 
    // Application is executed without any problems. 
    balance -= 10; 
} 

Wenn beide Anwendungen gleichzeitig starten, ist der endgültige "Balance" -Wert "-10" anstelle von "0".

In MySQL dieses Problem einfach ist, festgelegt durch:

UPDATE `table` SET Balance = IF (Balance-10> = 0, Balance-10, Gleichgewicht);

Was sind die möglichen Lösungen für Firebase?

Antwort

0

Dies wird durch transactions behandelt. Da Sie nicht angeben, welche Technologie ich die Web-Code bin zeigt:

balanceRef.transaction(function(current) { 
    if (current && current > 10) { 
    return current - 10; 
    } 
    return (current || 0); 
} 

Wenn mehrere Anwendungen diesen Code zur gleichen Zeit ausführen, wird einer von ihnen bekommen ihre Transaktion zurückgewiesen und erneut versuchen.

Siehe auch:

+0

Es funktioniert perfekt, ich hatte auch ein Problem mit dem ersten 'doTransation' Aufruf, die Rückkehr' null' und Deine 2. URL hat mir geholfen. Vielen Dank. (Java übrigens) – Thiago