Używanie Cloud Firestore z Bazą danych czasu rzeczywistego Firebase

Możesz używać w aplikacji zarówno Firebase Realtime Database, jak i Cloud Firestore, dostosować do swoich potrzeb zalety poszczególnych rozwiązań bazodanowych. Na przykład: może chcieć skorzystać z wsparcia w zakresie obecności, jakie zapewnia Realtime Database, zgodnie z opisem Zwiększ obecność w Cloud Firestore.

Więcej informacji o różnice między bazami danych.

Przenoszę dane na konto Cloud Firestore

Jeśli chcesz przenieść część swoich danych z usługi Realtime Database do Cloud Firestore, weź pod uwagę następującą procedurę. Ponieważ każda baza danych ma unikalne potrzeby i kwestie strukturalne, ścieżki automatycznej migracji danych. Zamiast tego możesz postępować zgodnie z tymi ogólnymi postępami:

  1. Zmapuj strukturę danych i reguły zabezpieczeń z Realtime Database na Cloud Firestore. Zarówno Realtime Database, jak i Cloud Firestore wymagają uwierzytelniania Firebase, więc nie musisz zmieniać uwierzytelniania użytkownika w aplikacji. Jednak reguły bezpieczeństwa i model danych różnią się od siebie, dlatego ważne jest uwzględnij te rozbieżności, zanim zaczniesz przenosić dane do Google Cloud. Firestore.

  2. Przenoszenie danych historycznych. Konfigurując nową strukturę danych w usłudze Cloud Firestore, możesz: mapuj i przenieś istniejące dane z Realtime Database do nowego urządzenia Cloud Firestore instancji. Jeśli jednak używasz w aplikacji obu baz danych, nie musisz przenosić danych historycznych z usługi Realtime Database.

  3. Powielaj nowe dane do Firestore w czasie rzeczywistym. Użyj Cloud Functions do zapisywania nowych danych na nowym urządzeniu Cloud Firestore po jej dodaniu do Realtime Database.

  4. Ustaw Cloud Firestore jako podstawową bazę danych dla przeniesionych danych. Po przeniesieniu części danych użyj usługi Cloud Firestore jako podstawowej bazy danych i zmniejsz użycie Realtime Database w przypadku przeniesionych i skalowalnych danych. Rozważ wersje aplikacji, które nadal są powiązane z Realtime Database za te dane i o tym, jak zamierzasz dalej je obsługiwać.

Uwzględnij koszty płatności dla Realtime Database i Cloud Firestore.

Mapowanie danych

Dane w tabeli Realtime Database są uporządkowane jako jedno drzewo, a Cloud Firestore obsługuje bardziej jawne hierarchie danych za pomocą dokumentów, kolekcji podzbiory. Jeśli przeniesiesz niektóre dane z usługi Realtime Database do Cloud Firestore, możesz rozważyć inną architekturę danych.

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

Jeśli przeniesiesz dane z istniejącego drzewa Realtime Database do Cloud Firestore dokumentów i kolekcji, pamiętaj o następujących głównych różnicach: bazy danych, które mogą wpływać na strukturę danych w Cloud Firestore:

  • Płynne zapytania zapewniają większą elastyczność hierarchicznych struktur danych.
  • Złożone zapytania są bardziej szczegółowe i zmniejszają potrzebę duplikowania i skalowalnych danych.
  • Kursory zapytania oferują bardziej precyzyjny podział na strony.
  • Transakcje nie wymagają już wspólnego pierwiastka dla wszystkich danych. efektywne.
  • Koszty płatności różnią się między Realtime Database a Cloud Firestore. W wielu przypadków Cloud Firestore może być droższe niż Realtime Database, zwłaszcza w przypadku obsługi wielu małych działań. Rozważ zmniejszanie liczby operacji na bazie danych i unikanie niepotrzebnych zapisów. Dowiedz się więcej o różnicach w przypadku rozliczenia między Realtime Database i Cloud Firestore.

Sprawdzone metody w praktyce

Poniższy przykład odzwierciedla niektóre kwestie, które należy wziąć pod uwagę możesz przenosić dane między bazami danych. Możesz wykorzystywać płytkie odczyty i ulepszać możliwości wykonywania zapytań w przypadku bardziej naturalnych struktur danych niż używane dzięki Realtime Database.

Rozważ użycie aplikacji z przewodnikiem, która pomaga użytkownikom znajdować ważne zabytki w miastach na całym świecie. Realtime Database nie zawiera płytkich odczytów, być może trzeba uporządkować dane w dwóch węzłach 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 ma ograniczone odczyty, więc zapytania o dokumenty z kolekcji nie pobiera danych z podkolekcji. Oznacza to, że można zapisywać punkty orientacyjne informacje w podkolekcji:

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

Maksymalny rozmiar dokumentów to 1 MB, co stanowi kolejny powód przechowywania punkty orientacyjne jako podzbiory, dzięki czemu dokumenty dotyczące każdego miasta są niewielkie. wzdęcia dokumentów z zagnieżdżonymi listami.

Zaawansowane możliwości obsługi zapytań w Cloud Firestore ograniczają potrzebę powielonych danych dla typowych wzorców dostępu. Weźmy na przykład ekran aplikacja z przewodnikiem po miastach, która pokazuje wszystkie stolice w podziale według liczby ludności. W Realtime Database najskuteczniejszym sposobem osiągnięcia tego celu jest utworzenie osobnego lista stolic, która duplikuje dane z listy cities w taki sposób:

{
   cities: {
    // ...
   },

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

W Cloud Firestore możesz podać listę stolic w kolejności jako pojedyncze zapytanie:

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

Dowiedz się więcej o modelu danych Cloud Firestore i wykonaj znajdziesz w Rozwiązaniach, gdzie znajdziesz więcej pomysłów na temat struktury Cloud Firestore.

Zabezpieczanie danych

Określa, czy używasz Cloud Firestore Security Rules do Klienty na Androida, Apple lub Chrome albo Identity Access Management (uprawnienia). dla serwerów, pamiętaj również, aby zabezpieczyć swoje dane w Cloud Firestore jako Realtime Database. Uwierzytelnianie użytkowników jest obsługiwane przez uwierzytelnianie w obu bazach danych, więc nie trzeba zmieniać implementacji uwierzytelniania za pomocą funkcji Cloud Firestore.

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

  • Pakiety SDK do aplikacji mobilnych i internetowych używają Cloud Firestore Security Rules, a serwer Do zabezpieczania danych pakiety SDK używają Identity Access Management (IAM).
  • Cloud Firestore Security Rules nie są kaskadowe, chyba że użyjesz symbolu wieloznacznego. Dokumenty i kolekcje nie dziedziczą w inny sposób reguł.
  • Nie musisz już oddzielnie weryfikować danych (tak samo jak w Realtime Database).
  • Cloud Firestore sprawdza reguły przed wykonaniem zapytania, aby się upewnić że użytkownik ma odpowiedni dostęp do wszystkich danych zwracanych przez zapytanie.

Przenieś dane historyczne do usługi Cloud Firestore

Po zmapowaniu danych i struktur zabezpieczeń na pakiety Cloud Firestore modeli zabezpieczeń i danych, możesz zacząć je dodawać. Jeśli planujesz wysyłać zapytania dotyczące danych historycznych po przeniesieniu aplikacji z Realtime Database do Cloud Firestore, dodaj eksport starych danych do nowego Cloud Firestore. Jeśli zamierzasz używać zarówno usługi Realtime Database, jak i Cloud Firestore, możesz pominąć ten krok.

Aby uniknąć zastąpienia nowych danych starymi, możesz dodać dane historyczne. Jeśli dodasz nowe dane do obu baz danych jednocześnie, zgodnie omówione w następnym kroku, pamiętaj, aby zapewnić pierwszeństwo nowym danym dodanym do Cloud Firestore, autor: Cloud Functions.

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

  1. Wyeksportuj dane z usługi Realtime Database lub użyj najnowszej kopii zapasowej.
    1. Przejdź do Sekcja Realtime Database w konsoli Firebase.
    2. Na karcie Dane wybierz węzeł główny bazy danych, a następnie W menu kliknij Eksportuj do pliku JSON.
  2. Utwórz nową bazę danych w: Cloud Firestore i dodać swoje dane.

    Podczas przenoszenia niektórych danych do usługi Cloud Firestore weź pod uwagę te strategie:

    • Napisać niestandardowy skrypt, który przeniesie Twoje dane za Ciebie. Chociaż nie możemy zaoferować szablon dla tego skryptu, ponieważ każda baza danych będzie miała unikalne potrzeby, Eksperci Cloud Firestore na naszym kanale na platformie Slack lub na stronie Stack Overflow sprawdzi Twój scenariusz lub udzieli Ci porad dotyczących konkretnej sytuacji.
    • Używaj pakietów SDK serwera (Node.js, Java, Python lub Go) do bezpośredniego zapisywania danych do Cloud Firestore. Instrukcje konfigurowania pakietów SDK serwera znajdziesz tu Wypróbuj
    • Aby przyspieszyć migrację dużych ilości danych, użyj funkcji zapisy zbiorcze i wysyłać do 500 operacji w jednym żądaniu sieciowym.
    • Aby nie przekraczać limitów cen (Cloud Firestore), ograniczenie operacji do 500 zapisów na sekundę dla każdej kolekcji.

Dodaj nowe dane do: Cloud Firestore

Aby zachować spójność między bazami danych, dodaj nowe dane do obu baz danych w w czasie rzeczywistym. Użyj kodu Cloud Functions, aby aktywować zapis w narzędziu Cloud Firestore za każdym razem, gdy klient pisze w usłudze Realtime Database. Upewnij się, że Cloud Firestore daje pierwszeństwo nowym danym pochodzącym z Cloud Functions przed wszelkimi zapisami które przeprowadzasz na podstawie migracji danych historycznych.

Utwórz funkcję do zapisywania nowych danych lub zmiany danych na Cloud Firestore za każdym razem, gdy klient zapisuje dane w Realtime Database. Więcej informacji o Realtime Database wyzwalacza dla: Cloud Functions.

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

Jeśli zdecydujesz się używać usługi Cloud Firestore jako podstawowej bazy danych Twoich danych, upewnij się, że masz odpowiednie funkcje powielania danych, skonfiguruj i zweryfikuj Cloud Firestore Security Rules.

  1. Jeśli używasz metody Cloud Functions do zachowania spójności między bazami danych, sprawdź, czy nie duplikujesz operacji zapisu w obu bazach danych w pętli. Przełącz funkcję na zapis do pojedynczej bazy danych lub usuń całkowicie i zacznij stopniowo wycofywać funkcję zapisu dla przeniesione dane w aplikacjach są nadal powiązane z kontem Realtime Database. Jak sobie z tym radzisz Zależy to od Twoich konkretnych potrzeb i użytkowników.

  2. Sprawdź, czy Twoje dane są odpowiednio zabezpieczone. Zweryfikuj Cloud Firestore Security Rules lub konfiguracji uprawnień.