2016-11-01 1 views
0

Ich speichere Elemente Street mit der FireBase push und erhalten Sie eine Liste der Street Elemente mit automatisch generierten IDs richtig. Nehmen wir an, jeder Street hat einen Knoten wie "path" : "unique value". Angenommen, zwei Benutzer werden gerade eine neue Street einfügen, die dieselbe "path" : "unique value" hat.Wie sollte ich diese Situation in FireBase behandeln, wo zwei Benutzer für den gleichen Datenbankschlüssel gehen

Was ist ein geeigneter Weg, dies zu vermeiden? Es ist wie ein Webshop, in dem der Benutzer einen Artikel in den Warenkorb legt und das System, das sich hinter ihm befindet, muss diesen Artikel reservieren, bis der Nutzer ihn kauft.

Sollte ich einen separaten FireBase-Stamm wie "reserved_streets" erstellen und Benutzer seine reservierte Street zusammen mit user.id hinzufügen, bis er es kaufen? Vielleicht sollte eine Servlet-Instanz ausgeführt werden, die Einträge entfernt, die 10 Minuten alt sind.

Die Street Liste kann sehr groß sein, vielleicht 100 Millionen in rar Fällen

Antwort

1

Der typische Weg, um doppelte Werte in der Datenbank Firebase zu verhindern, ist diese Werte in Schlüssel zu konvertieren.

Also, wenn Sie aktuelle Modell ist (das nächste Mal, teilen Sie bitte eine solche minimale Schnipsel in Ihrer Frage bitte):

streets: { 
    "-K1234567": { 
    path: "unique path" 
    }, 
    "-K1234568": { 
    path: "unique path 2" 
    } 
} 

Sie würden eine zusätzliche Struktur hinzufügen (oder die bestehende Struktur ändern), die die Pfade verwendet als Schlüssel:

pathsToStreets: { 
    "unique path": "-K1234567", 
    "unique path 2": "-K1234568" 
} 

Mit dieser Struktur wird garantiert nur eine Straße für einen Weg zu sein, und Sie können Sicherheitsregeln verwenden, das der Pfad nicht überschrieben werden kann.

+0

Mein Gott, das ist elegant –

+0

Aber bis die 'Straße' erstellt wird, ja natürlich Benutzer seine Straße in den Korb setzen muss auch seine Straße zu' pathsToStreets' hinzufügen. Jetzt können andere Benutzer die 'pathsToStreets' überprüfen und sehen, ob die' street' reserviert ist. Wenn der erste Benutzer weitergeht und dann kauft, wird die 'Straße' -" -K1234567 "erstellt. Mein Gott Zeit für einen Donat –

+0

Aber was ist, wenn der erste Benutzer die 'Straße' nicht kauft und er den Eintrag nicht von' pathsToStreets' entfernt, weil ein Gerät abstürzt oder ein System ausfällt. Vielleicht mit einer Servlet-Instanz, die Einträge entfernt. Was denken Sie? –

Verwandte Themen