Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Korzystaj z Cloud Firestore z bazą danych czasu rzeczywistego Firebase

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

W swojej aplikacji możesz używać zarówno Firebase Realtime Database, jak i Cloud Firestore, i wykorzystywać zalety każdego rozwiązania bazodanowego, aby dopasować je do swoich potrzeb. Na przykład możesz chcieć wykorzystać obsługę bazy danych czasu rzeczywistego dla obecności, jak opisano w Budowanie obecności w Cloud Firestore .

Dowiedz się więcej o różnicach między bazami danych .

Przenoszenie danych do Cloud Firestore

Jeśli zdecydowałeś, że chcesz przeprowadzić migrację niektórych danych z bazy danych czasu rzeczywistego do Cloud Firestore, rozważ następującą procedurę. Ponieważ każda baza danych ma unikalne potrzeby i względy strukturalne, nie istnieje zautomatyzowana ścieżka migracji. Zamiast tego możesz śledzić ten ogólny postęp:

  1. Odwzoruj strukturę danych i reguły bezpieczeństwa z bazy danych czasu rzeczywistego na 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 swojej aplikacji. Jednak reguły bezpieczeństwa i model danych są różne 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. Korzystaj z funkcji Cloud Functions, aby zapisywać nowe dane w nowej bazie danych Cloud Firestore w miarę ich 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 użycie Bazy danych czasu rzeczywistego dla migrowanych danych. Rozważ wersje swojej aplikacji, które nadal są powiązane z bazą danych czasu rzeczywistego dla tych danych i jak planujesz nadal je obsługiwać.

Upewnij się, że uwzględniłeś koszty rozliczeniowe zarówno dla Realtime Database , jak i Cloud Firestore .

Mapuj swoje dane

Dane w bazie danych czasu rzeczywistego mają strukturę pojedynczego drzewa, podczas gdy Cloud Firestore obsługuje bardziej wyraźne hierarchie danych poprzez dokumenty, kolekcje i kolekcje podrzędne. Jeśli przenosisz część swoich danych z bazy danych czasu rzeczywistego do Cloud Firestore, możesz rozważyć inną architekturę dla 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:

  • Płytkie zapytania oferują większą elastyczność w hierarchicznych strukturach danych.
  • Złożone zapytania zapewniają większą szczegółowość i zmniejszają potrzebę powielania danych.
  • Kursory zapytań oferują bardziej niezawodną paginację.
  • Transakcje nie wymagają już wspólnego katalogu głównego dla wszystkich danych i są bardziej wydajne.
  • Koszty rozliczeń różnią się w przypadku Realtime Database i Cloud Firestore. W wielu przypadkach Cloud Firestore może być droższy niż Realtime Database, 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 Realtime Database a Cloud Firestore.

Najlepsze praktyki w działaniu

Poniższy przykład odzwierciedla niektóre kwestie, które można podjąć podczas przenoszenia danych między bazami danych. Możesz wykorzystać płytkie odczyty i ulepszone możliwości wykonywania zapytań w celu uzyskania bardziej naturalnych struktur danych niż w przypadku bazy danych czasu rzeczywistego.

Rozważ aplikację przewodnika po mieście, która pomaga 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 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 płytkie odczyty, więc zapytanie o dokumenty w kolekcji nie pobiera danych z podkolekcji. W związku z tym informacje o punktach orientacyjnych można przechowywać w podzbiorach:

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

Maksymalny rozmiar dokumentów to 1 MB, co jest kolejnym powodem do przechowywania punktów orientacyjnych jako podkolekcji, dzięki czemu każdy dokument miejski jest mały, zamiast zapełniać dokumenty zagnieżdżonymi listami.

Zaawansowane możliwości zapytań Cloud Firestore zmniejszają potrzebę powielania 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 liczby ludności. 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 możesz wyrazić listę stolic według liczby ludności jako pojedyncze zapytanie:

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 korzystasz z reguł bezpieczeństwa Cloud Firestore dla klientów z systemem Android, Apple lub sieci Web, czy też z zarządzania dostępem do tożsamości (IAM) dla serwerów, upewnij się, że zabezpieczasz swoje dane zarówno w Cloud Firestore, jak i w bazie danych czasu rzeczywistego. Uwierzytelnianie użytkownika 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ł bezpieczeństwa Cloud Firestore, podczas gdy pakiety SDK dla serwerów korzystają z zarządzania dostępem do tożsamości (IAM) w celu zabezpieczenia danych.
  • Reguły bezpieczeństwa Cloud Firestore nie są kaskadowane, chyba że użyjesz symbolu wieloznacznego. Dokumenty i kolekcje w inny sposób nie dziedziczą reguł.
  • Nie musisz już osobno sprawdzać poprawności 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 zwróconych przez zapytanie.

Przenieś dane historyczne do Cloud Firestore

Po zmapowaniu danych i struktur bezpieczeństwa do danych i modeli bezpieczeństwa Cloud Firestore możesz rozpocząć dodawanie danych. Jeśli planujesz wykonać zapytanie o dane historyczne 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 Realtime Database, jak i Cloud Firestore, możesz pominąć ten krok.

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

Aby przeprowadzić migrację danych historycznych do Cloud Firestore, wykonaj następujące 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ł poziomu głównego bazy danych i wybierz z menu opcję Eksportuj JSON .
  2. Utwórz nową bazę danych w Cloud Firestore i dodaj swoje dane .

    Podczas przenoszenia niektórych 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 dotyczącej konkretnej sytuacji.
    • Użyj zestawó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 zapisu wsadowego 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ć zgodność między bazami danych, dodawaj nowe dane do obu baz danych w czasie rzeczywistym. Korzystaj z funkcji Cloud Functions, aby uruchamiać 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ę zapisywania nowych lub zmieniających się 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 zdecydowałeś się używać Cloud Firestore jako podstawowej bazy danych dla niektórych swoich danych, upewnij się, że uwzględniłeś wszystkie skonfigurowane funkcje dublowania danych i zweryfikuj reguły bezpieczeństwa 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. Zmień swoją funkcję, aby zapisywać w pojedynczej bazie 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, zależy od konkretnych potrzeb i użytkowników.

  2. Sprawdź, czy Twoje dane są odpowiednio zabezpieczone. Zweryfikuj reguły bezpieczeństwa Cloud Firestore lub konfigurację IAM.