2016-09-02 11 views
5

W mojej bazie danych Firebase potrzebuję dwóch zapisów w dwóch lokalizacjach jednocześnie. Mam zasady dla obu lokalizacji, które zapewniają, że użytkownik nie może tam pisać bez jednoczesnego zapisywania w innej lokalizacji.Jak korzystać z transakcji podczas aktualizowania w wielu lokalizacjach w Firebase?

Napisem do jednej z tych lokalizacji musi być inkrementacja/dekrementacja. Oczywiście, należy to zrobić za pośrednictwem transakcji, w przeciwnym razie nie mogę zagwarantować, że użytkownik nie nadpisuje aktualizacji tego samego węzła dla innego użytkownika.

Problem polega na tym, że nie mogę znaleźć żadnej dokumentacji dotyczącej łączenia aktualizacji z wieloma lokalizacjami z transakcjami. Czy to po prostu niemożliwe?

Odpowiedz

6

Nie. Transakcje działają na jednym węźle.

Oznacza to, że jeśli chcesz uruchomić transakcję z wieloma lokalizacjami, musisz zasadniczo uruchomić tę transakcję w "najniższym współdzielonym węźle" w drzewie. To nigdy nie jest dobry pomysł.

Alternatywą byłoby zabezpieczenie zapisu wielopunktowego przy użyciu reguł bezpieczeństwa po stronie serwera. Na przykład zobacz: Is the way the Firebase database quickstart handles counts secure?, która zasadniczo buduje operację porównywania i zestawiania przy użyciu reguł bezpieczeństwa.

+0

Dlaczego transakcja na najniższym węźle "prawie nigdy nie jest dobrym pomysłem"? – Junior

+1

Ponieważ to pytanie dotyczy aktualizowania wielu lokalizacji za pomocą jednego połączenia, oznacza to, że "węzeł współdzielony najniższego poziomu" jest prawdopodobnie wyższy w drzewie JSON niż pojedynczy obiekt. Oznacza to, że istnieje znacznie większa szansa na rywalizację o zasoby, co zmniejsza skalowalność transakcji. –

+0

O tak. Dzięki za odpowiedzi. To ma sens. – Junior