Korzystaj z Cloud Firestore z bazą danych czasu rzeczywistego Firebase

W swojej aplikacji możesz używać zarówno Bazy danych czasu rzeczywistego Firebase, jak i Cloud Firestore, a także wykorzystać zalety każdego rozwiązania bazodanowego, aby dopasować je do swoich potrzeb. Na przykład, możesz chcieć wykorzystać wsparcie w czasie rzeczywistym w bazie za obecność, jak przedstawiono w budowy Obecności w chmurze FireStore .

Więcej informacji na temat różnic pomiędzy bazami danych .

Przenoszenie danych do Cloud Firestore

Jeśli zdecydujesz, że chcesz przenieść część swoich danych z Bazy danych czasu rzeczywistego do Cloud Firestore, rozważ następującą procedurę. Ponieważ każda baza danych ma unikalne potrzeby i uwarunkowania strukturalne, nie istnieje zautomatyzowana ścieżka migracji. Zamiast tego możesz śledzić ten ogólny postęp:

  1. Mapuj strukturę danych i reguły bezpieczeństwa z Bazy danych czasu rzeczywistego do Cloud Firestore. Zarówno Baza danych czasu rzeczywistego, jak i Cloud Firestore korzystają z uwierzytelniania Firebase, więc nie musisz zmieniać uwierzytelniania użytkowników w swojej aplikacji. Jednak reguły bezpieczeństwa i model danych są inne i ważne jest, aby dokładnie uwzględnić te rozbieżności przed rozpoczęciem przenoszenia danych do Cloud Firestore.

  2. Przenieś dane historyczne. Podczas konfigurowania nowej struktury danych w Cloud Firestore możesz mapować i przenosić istniejące dane z Bazy danych czasu rzeczywistego do nowej instancji Cloud Firestore. Jeśli jednak używasz obu baz danych w swojej aplikacji, nie musisz przenosić danych historycznych z Bazy danych czasu rzeczywistego.

  3. Kopiuj nowe dane do Firestore w czasie rzeczywistym. Użyj Cloud Functions, aby zapisywać nowe dane w nowej bazie danych Cloud Firestore w miarę jej dodawania do Bazy danych czasu rzeczywistego.

  4. Ustaw Cloud Firestore jako podstawową bazę danych dla migrowanych danych. Po przeprowadzeniu migracji niektórych danych użyj Cloud Firestore jako podstawowej bazy danych i ogranicz wykorzystanie Bazy danych czasu rzeczywistego dla migrowanych danych. Rozważ wersje swojej aplikacji, które są nadal powiązane z Bazą danych czasu rzeczywistego dla tych danych, i zastanów się, jak planujesz nadal je wspierać.

Upewnij się, że odpowiadają za rozliczania kosztów zarówno Database Realtime i chmura FireStore .

Mapuj swoje dane

Dane w Bazie danych czasu rzeczywistego mają strukturę pojedynczego drzewa, a Cloud Firestore obsługuje bardziej wyraźne hierarchie danych w dokumentach, kolekcjach i podkolekcjach. Jeśli przeniesiesz część swoich danych z Bazy danych czasu rzeczywistego do Cloud Firestore, możesz rozważyć inną architekturę swoich danych.

Główne różnice do rozważenia

Jeśli przenosisz dane z istniejącego drzewa Bazy danych czasu rzeczywistego do dokumentów i kolekcji Cloud Firestore, pamiętaj o następujących głównych różnicach między bazami danych, które mogą mieć wpływ na strukturę danych w Cloud Firestore:

  • Zapytania płytkie oferują większą elastyczność w hierarchicznych strukturach danych.
  • Złożone zapytania zapewniają większą szczegółowość i zmniejszają potrzebę duplikowania danych.
  • Kursory zapytań oferują bardziej niezawodne stronicowanie.
  • Transakcje nie wymagają już wspólnego katalogu głównego dla wszystkich danych i są bardziej wydajne.
  • Koszty rozliczeń różnią się w przypadku Bazy danych czasu rzeczywistego i Cloud Firestore. W wielu przypadkach Cloud Firestore może być droższy niż Baza danych czasu rzeczywistego, szczególnie jeśli polegasz na wielu małych operacjach. Rozważ zmniejszenie liczby operacji na bazie danych i unikanie niepotrzebnych zapisów. Więcej informacji na temat różnic w rozliczeń między Realtime Database i chmura FireStore.

Najlepsze praktyki w działaniu

Poniższy przykład odzwierciedla niektóre z rozważań, które możesz wziąć pod uwagę podczas przenoszenia danych między bazami danych. Możesz wykorzystać płytkie odczyty i ulepszone możliwości zapytań, aby uzyskać bardziej naturalne struktury danych niż te, które były używane w przypadku Bazy danych czasu rzeczywistego.

Rozważ aplikację przewodnika po mieście, która pomoże użytkownikom znaleźć ważne punkty orientacyjne w miastach na całym świecie. Ponieważ Baza Danych Czasu Rzeczywistego nie ma płytkich odczytów, być może trzeba było podzielić dane na dwa węzły najwyższego poziomu w następujący sposób:

// /cities/$CITY_KEY
{
  name: "New York",
  population: 8000000,
  capital: False
}

// /city-landmark/$CITY_KEY/$LANDMARK_KEY
{
  name: "Empire State Building",
  category: "Architecture"
}

Cloud Firestore obsługuje płytkie odczyty, więc zapytania o dokumenty w kolekcji nie pobierają danych z podkolekcji. W związku z tym możesz przechowywać informacje o punktach orientacyjnych w podzbiorze:

// /cities/$CITY_ID
{
  name: "New York",
  population: 8000000,
  capital: False,
  landmarks: [... subcollection ...]
}

Dokumenty mają maksymalny rozmiar 1 MB, co jest kolejnym powodem do przechowywania punktów orientacyjnych jako podzbioru, dzięki czemu każdy dokument miasta jest niewielki, a nie rozdęty zagnieżdżonymi listami.

Zaawansowane funkcje zapytań Cloud Firestore zmniejszają potrzebę duplikowania danych dla typowych wzorców dostępu. Rozważmy na przykład ekran w aplikacji przewodnika po mieście, który pokazuje wszystkie stolice uporządkowane według populacji. W Realtime Database, najbardziej skutecznym sposobem na to jest, aby utrzymać oddzielną listę stolic że duplikaty dane z cities na liście, co następuje:

{
   cities: {
    // ...
   },

   capital-cities: {
     // ...
   }
}

W Cloud Firestore listę stolic w kolejności zaludnienia możesz wyrazić jednym zapytaniem:

db.collection('cities')
    .where('capital', '==', true)
    .orderBy('population')

Czytaj więcej o modelu danych Chmura FireStore i spojrzeć na nasze Solutions więcej pomysłów na temat struktury bazy danych Chmura FireStore.

Zabezpiecz swoje dane

Czy używasz Chmura FireStore Reguły zabezpieczeń dla systemu Android, Apple, lub klientów internetowych lub Identity Management Access (IAM) dla serwerów, upewnij się, że zabezpieczenie danych w chmurze FireStore jak Realtime Database. Uwierzytelnianie użytkowników jest obsługiwane przez uwierzytelnianie dla obu baz danych, więc nie musisz zmieniać implementacji uwierzytelniania, gdy zaczynasz korzystać z Cloud Firestore.

Główne różnice do rozważenia

  • Mobilne i internetowe pakiety SDK korzystają z reguł zabezpieczeń Cloud Firestore, a pakiety SDK dla serwerów korzystają z zarządzania dostępem do tożsamości (IAM) do zabezpieczania danych.
  • Reguły zabezpieczeń Cloud Firestore nie działają kaskadowo, chyba że użyjesz symbolu wieloznacznego. Dokumenty i kolekcje w żaden inny sposób nie dziedziczą reguł.
  • Już nie potrzeba sprawdzania poprawności danych oddzielnie (jak to było w czasie rzeczywistym Database ).
  • Cloud Firestore sprawdza reguły przed wykonaniem zapytania, aby upewnić się, że użytkownik ma odpowiedni dostęp do wszystkich danych zwracanych przez zapytanie.

Przenieś dane historyczne do Cloud Firestore

Po zmapowaniu danych i struktur zabezpieczeń na modele danych i zabezpieczeń Cloud Firestore możesz zacząć dodawać swoje dane. Jeśli planujesz wysyłać zapytania do danych historycznych po przeniesieniu aplikacji z Bazy danych czasu rzeczywistego do Cloud Firestore, dodaj eksport starych danych do nowej bazy danych Cloud Firestore. Jeśli planujesz używać w swojej aplikacji zarówno Bazy danych czasu rzeczywistego, jak i Cloud Firestore, możesz pominąć ten krok.

Aby uniknąć zastępowania nowych danych starymi danymi, możesz najpierw dodać swoje dane historyczne. Jeśli dodajesz nowe dane do obu baz danych jednocześnie, zgodnie z opisem w następnym kroku, upewnij się, że pierwszeństwo mają nowe dane dodane do Cloud Firestore przez Cloud Functions.

Aby przenieść dane historyczne do Cloud Firestore, wykonaj te czynności:

  1. Eksport danych z Realtime Database lub użyć ostatniej kopii zapasowej .
    1. Przejdź do sekcji danych w czasie rzeczywistym w konsoli Firebase.
    2. W zakładce Dane wybierz węzeł korzeń poziomie bazy danych i wybierz Eksportuj z menu JSON.
  2. Utworzyć nową bazę danych w chmurze FireStore i dodać swoje dane .

    Przenosząc część danych do Cloud Firestore, rozważ następujące strategie:

    • Napisz niestandardowy skrypt, który przeniesie Twoje dane za Ciebie. Chociaż nie możemy zaoferować szablon dla tego scenariusza, ponieważ każda baza danych będzie mieć unikalne potrzeby, eksperci Chmura FireStore na naszym kanale Slack lub na przepełnienie stosu można przejrzeć skrypt lub oferują porady dla konkretnej sytuacji.
    • Użyj pakietów SDK serwera (Node.js, Java, Python lub Go), aby zapisywać dane bezpośrednio w Cloud Firestore. Instrukcje dotyczące ustanowienia SDK Server, zobacz Pierwsze kroki .
    • Aby przyspieszyć duże migracje danych, należy użyć batched pisze i wysłać do 500 operacji w pojedynczym żądaniu sieciowym.
    • Aby pozostać w ramach limitów stóp Chmura FireStore , operacji granica 500 zapisów / sekundę dla każdej kolekcji.

Dodaj nowe dane do Cloud Firestore

Aby zachować parzystość między bazami danych, dodaj nowe dane do obu baz w czasie rzeczywistym. Użyj Cloud Functions, aby wyzwalać zapis w Cloud Firestore za każdym razem, gdy klient zapisuje w Bazie danych czasu rzeczywistego. Upewnij się, że Cloud Firestore daje pierwszeństwo nowym danym pochodzącym z Cloud Functions przed wszelkimi zapisami dokonywanymi w ramach migracji danych historycznych.

Utwórz funkcję do zapisywania nowych lub zmieniania danych w Cloud Firestore za każdym razem, gdy klient zapisuje dane w Bazie danych czasu rzeczywistego. Dowiedz się więcej o Realtime wyzwalaczy bazy danych dla funkcji Cloud.

Ustaw Cloud Firestore jako podstawową bazę danych dla migrowanych danych

Jeśli zdecydujesz się używać Cloud Firestore jako podstawowej bazy danych dla niektórych swoich danych, upewnij się, że uwzględniasz wszystkie skonfigurowane funkcje tworzenia kopii lustrzanych danych i zweryfikuj reguły zabezpieczeń Cloud Firestore.

  1. Jeśli używasz Cloud Functions do zachowania parzystości między bazami danych, upewnij się, że nie duplikujesz operacji zapisu w obu bazach danych w pętli. Przełącz funkcję na zapis do pojedynczej bazy danych lub całkowicie usuń funkcję i zacznij wycofywać funkcję zapisu dla migrowanych danych w aplikacjach, które nadal są powiązane z Bazą danych czasu rzeczywistego. Sposób, w jaki radzisz sobie z tym w swojej aplikacji, zależy od Twoich konkretnych potrzeb i użytkowników.

  2. Sprawdź, czy Twoje dane są odpowiednio zabezpieczone. Sprawdź poprawność reguł zabezpieczeń Cloud Firestore lub konfiguracji uprawnień.