Używanie 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, oraz dostosować do swoich potrzeb zalety poszczególnych rozwiązań bazodanowych. Na przykład: warto skorzystać z obsługi obecności w Bazie danych czasu rzeczywistego, jak opisano w dokumencie Budowanie obecności w Cloud Firestore

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

Przenoszę dane do Cloud Firestore

Jeśli chcesz przenieść niektóre dane z Bazy danych czasu rzeczywistego do w Cloud Firestore; rozważ następujący przepływ. 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 Bazy danych czasu rzeczywistego na i Cloud Firestore. Zarówno Baza danych czasu rzeczywistego, jak i Cloud Firestore opierają się na Uwierzytelnianiu 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. Podczas konfigurowania nowej struktury danych w Cloud Firestore możesz mapować i przenosić istniejące dane z Bazy danych czasu rzeczywistego do nowej usługi Cloud Firestore; instancji. Jeśli jednak używasz w aplikacji obu baz danych, nie musisz przenosić danych historycznych z Bazy danych czasu rzeczywistego.

  3. Powielaj nowe dane do Firestore w czasie rzeczywistym. Użyj Cloud Functions do zapisywania nowych danych w nowej usłudze Cloud Firestore podczas dodawania do Bazy danych czasu rzeczywistego.

  4. Ustaw Cloud Firestore jako podstawową bazę danych na potrzeby przeniesionych danych. Gdy przeniesiesz niektóre dane, użyj Cloud Firestore jako podstawowej bazy danych i zmniejsz wykorzystanie Bazy danych czasu rzeczywistego dla i skalowalnych danych. Rozważ wersje aplikacji, które nadal są powiązane z w bazie danych czasu rzeczywistego, która zawiera te dane i jak zamierzasz dalej je obsługiwać.

Uwzględnij koszty płatności zarówno w Bazie danych czasu rzeczywistego, i Cloud Firestore.

Mapowanie danych

Dane w Bazie danych czasu rzeczywistego są uporządkowane jako jedno drzewo, natomiast Cloud Firestore obsługuje bardziej jawne hierarchie danych za pomocą dokumentów, kolekcji podzbiory. Jeśli przeniesiesz niektóre dane z Bazy danych czasu rzeczywistego do Cloud Firestore, warto rozważyć inną architekturę. danych.

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

Jeśli przeniesiesz dane z istniejącego drzewa Bazy danych czasu rzeczywistego 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 rozliczeń w Bazie danych czasu rzeczywistego i Cloud Firestore są różne. W wielu usługa Cloud Firestore może być droższa niż Baza danych czasu rzeczywistego, 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 Bazą danych czasu rzeczywistego 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 Bazie danych czasu rzeczywistego.

Rozważ użycie aplikacji z przewodnikiem, która pomaga użytkownikom znajdować ważne zabytki w miastach na całym świecie. Ponieważ Baza danych czasu rzeczywistego nie ma płytkich odczytów, konieczne może być 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 stosuje płytkie odczyty, więc zapytania o dokumenty w 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 wykonywania zapytań w Cloud Firestore zmniejszają 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 bazie danych czasu rzeczywistego najwydajniejszym sposobem jest utworzenie oddzielnego lista stolic, która duplikuje dane z listy cities w taki sposób:

{
   cities: {
    // ...
   },

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

W Cloud Firestore możesz podać listę stolic 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 Baza danych Cloud Firestore.

Zabezpieczanie danych

Określa, czy używasz reguł zabezpieczeń Cloud Firestore Klienty na Androida, Apple lub Internet albo Identity Access Management (IAM) dla serwerów, pamiętaj też, aby zabezpieczyć swoje dane w Cloud Firestore jako Bazę danych czasu rzeczywistego. Uwierzytelnianie użytkowników jest obsługiwane przez uwierzytelnianie w obu bazach danych, więc nie trzeba zmieniać implementacji uwierzytelniania przy użyciu Cloud Firestore.

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

  • Mobilne i internetowe pakiety SDK używają reguł zabezpieczeń Cloud Firestore, Do zabezpieczania danych pakiety SDK używają Identity Access Management (IAM).
  • Reguły zabezpieczeń Cloud Firestore 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 jak w Bazie 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.

Przenoszenie danych historycznych do Cloud Firestore

Po zmapowaniu struktur danych i zabezpieczeń do 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 Bazy danych czasu rzeczywistego do Cloud Firestore, dodaj eksport starych danych do nowego Baza danych Cloud Firestore. Jeśli zamierzasz używać zarówno Bazy danych czasu rzeczywistego, Cloud Firestore w swojej aplikacji. 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 według Cloud Functions.

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

  1. Wyeksportuj dane z Bazy danych czasu rzeczywistego lub korzystaj z aktualnej kopii zapasowej.
    1. Przejdź do Sekcja Baza danych czasu rzeczywistego 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 oraz dodaj swoje dane.

    Podczas przenoszenia niektórych danych do Cloud Firestore rozważ 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 w kanale 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 szybkości Cloud Firestore, ograniczenie operacji do 500 zapisów na sekundę dla każdej kolekcji.

Dodawanie nowych danych do Cloud Firestore

Aby zachować spójność między bazami danych, dodaj nowe dane do obu baz danych w w czasie rzeczywistym. Użycie Cloud Functions do aktywowania zapisu w Cloud Firestore za każdym razem, gdy klient zapisuje dane w Bazie danych czasu rzeczywistego. Sprawdź, czy Cloud Firestore daje pierwszeństwo nowym danym pochodzącym z Cloud Functions przed wszelkimi zapisami które przeprowadzasz na podstawie migracji danych historycznych.

Tworzenie funkcji do zapisywania nowych lub zmieniających się danych w Cloud Firestore za każdym razem, gdy klient zapisuje dane w Bazie danych czasu rzeczywistego. Więcej informacji o Aktywatory bazy danych czasu rzeczywistego dla Cloud Functions.

Ustaw Cloud Firestore jako podstawową bazę danych na potrzeby przeniesionych danych

Jeśli zdecydujesz się używać Cloud Firestore jako podstawowej bazy danych Twoich danych, upewnij się, że masz odpowiednie funkcje powielania danych, skonfiguruj i zweryfikuj reguły zabezpieczeń Cloud Firestore.

  1. Jeśli używasz 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, które są nadal powiązane z Bazą danych czasu rzeczywistego. Jak sobie z tym radzisz Zależy to od Twoich konkretnych potrzeb i użytkowników.

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