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ć obsługę obecności przez Bazę danych czasu rzeczywistego, jak opisano w sekcji Build Presence w Cloud Firestore .

Dowiedz się więcej o różnicach mię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 rozliczasz się z opłatami za Bazę danych czasu rzeczywistego i Cloud 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. Dowiedz się więcej o różnicach w rozliczeniach między Bazą danych czasu rzeczywistego a Cloud 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 podkolekcji:

// /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 mały, 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 Bazie Danych Czasu Rzeczywistego najskuteczniejszym sposobem na to jest utrzymywanie oddzielnej listy stolic, która powiela dane z listy cities w następujący sposób:

{
   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')

Przeczytaj więcej o modelu danych Cloud Firestore i zapoznaj się z naszymi rozwiązaniami , aby uzyskać więcej pomysłów na strukturę bazy danych Cloud Firestore.

Zabezpiecz swoje dane

Niezależnie od tego, czy używasz reguł zabezpieczeń Cloud Firestore dla klientów na Androida, Apple lub Web, czy zarządzania dostępem do tożsamości (IAM) dla serwerów, upewnij się, że zabezpieczasz swoje dane w Cloud Firestore oraz w Bazie danych czasu rzeczywistego. 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ł.
  • Nie musisz już osobno weryfikować danych (tak jak w przypadku Bazy danych czasu rzeczywistego ).
  • 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. Wyeksportuj swoje dane z Bazy danych czasu rzeczywistego lub użyj ostatniej kopii zapasowej .
    1. Przejdź do sekcji Baza danych czasu rzeczywistego w konsoli Firebase.
    2. Na karcie Dane wybierz węzeł na poziomie głównym bazy danych i wybierz z menu opcję Eksportuj JSON .
  2. Utwórz nową bazę danych w Cloud Firestore i dodaj 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ć szablonu dla tego skryptu, ponieważ każda baza danych będzie miała inne potrzeby, eksperci Cloud Firestore na naszym kanale Slack lub na Stack Overflow mogą przejrzeć Twój skrypt lub udzielić porady w konkretnej sytuacji.
    • Użyj pakietów SDK serwera (Node.js, Java, Python lub Go), aby zapisywać dane bezpośrednio w Cloud Firestore. Aby uzyskać instrukcje dotyczące konfigurowania zestawów SDK serwera, zobacz Pierwsze kroki .
    • Aby przyspieszyć migracje dużych ilości danych, użyj zapisów wsadowych i wyślij do 500 operacji w jednym żądaniu sieciowym.
    • Aby nie przekraczać limitów szybkości Cloud Firestore , ogranicz operacje do 500 zapisów na 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 wyzwalaczach Bazy danych czasu rzeczywistego dla Cloud Functions.

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 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 sobie z tym poradzisz 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ń.