Omówienie Firestore w trybie natywnym

Firestore w trybie natywnym obejmuje 2 zestawy operacji – operacje podstawowe Firestore i operacje potoku Firestore.

Operacje podstawowe Firestore zapewniają standardowe funkcje tworzenia, odczytywania, aktualizowania i usuwania dokumentów (CRUD) oraz wbudowaną obsługę zapytań nasłuchujących w czasie rzeczywistym i trwałości offline. W tej wersji istotną różnicą operacyjną jest to, że indeksy są opcjonalne i nie są tworzone automatycznie dla pojedynczych pól. Umożliwia to wykonywanie zapytań bez wstępnej konfiguracji indeksu, ale zapytania bez indeksu domyślnie skanują całą kolekcję. Wraz ze wzrostem zbioru danych może to prowadzić do zwiększenia opóźnienia i kosztów.

Operacje potoku Firestore to główna funkcja wersji Firestore Enterprise, która jest oparta na zaawansowanym silniku zapytań, aby znacznie rozszerzyć zakres możliwych zapytań. Operacje potoku wykorzystują elastyczną składnię zapytań i odrębną metodę indeksowania, w której indeksy są opcjonalne i nie są tworzone automatycznie, co umożliwia zaawansowane operacje pobierania danych w aplikacjach.

Funkcje operacji podstawowych Firestore

Operacje Centrum umożliwiają standardowe operacje CRUD i zapytania nasłuchujące w czasie rzeczywistym. Jednak w przypadku korzystania z tych operacji w wersji Enterprise podstawowe działanie dotyczące indeksowania i rozliczeń znacznie się różni od wersji Standard.

Funkcjonalność i ciągłość

Operacje podstawowe zachowują znaną składnię łańcucha metod (np. .where(), .orderBy()) używaną w wersji Standard. Te operacje obsługują zapytania nasłuchujące w czasie rzeczywistym i trwałość offline w przypadku klientów mobilnych i internetowych. Zalecamy używanie tych operacji w przypadku standardowych obciążeń transakcyjnych, prostych wyszukiwań i migracji istniejącego kodu aplikacji.

Indeksowanie niestandardowe

W przeciwieństwie do wersji Standard operacje podstawowe w wersji Enterprise nie tworzą automatycznie indeksów pojedynczych pól. Indeksy są opcjonalne i nie są wymagane do wykonania zapytania. Jeśli brakuje określonego indeksu, zapytanie wykonuje pełne skanowanie kolekcji. Zapytania bez indeksu umożliwiają szybkie tworzenie prototypów, ale wraz ze wzrostem zbioru danych mogą działać wolniej i kosztować więcej. Aby zoptymalizować wydajność zapytań i zmniejszyć zużycie jednostek odczytu, deweloperzy muszą ręcznie tworzyć indeksy.

Model rozliczeniowy (oparty na jednostkach)

Jednostki odczytu są naliczane w porcjach po 4 KB, a nie na podstawie liczby dokumentów. Zapytanie bez indeksu skanujące dużą kolekcję będzie zużywać jednostki odczytu na podstawie łącznej liczby bajtów przeskanowanych we wszystkich dokumentach. Jednostki zapisu są naliczane w porcjach po 1 KB. Zapisanie dokumentu zużywa jednostki na dane oraz dodatkowe jednostki na każdy zaktualizowany wpis indeksu. W przeciwieństwie do wersji Standard, która wymusza automatyczne indeksowanie pojedynczych pól, możesz teraz wybrać konkretne pola do zindeksowania, aby zoptymalizować koszty i wydajność zapisu.

Funkcje operacji potoku Firestore

Wersja Firestore Enterprise z operacjami potoku korzysta z zaawansowanego silnika zapytań, który usuwa wiele dotychczasowych ograniczeń wersji Firestore Standard. Operacje potoku zapewniają setki dodatkowych funkcji zapytań. Operacje potoku mają te możliwości:

Składnia kompozycyjna oparta na etapach

Zapytania potoku są tworzone przez zdefiniowanie serii sekwencyjnych etapów, które są wykonywane w kolejności. Umożliwia to wykonywanie złożonych operacji, takich jak filtrowanie na podstawie wyniku agregacji, co wcześniej nie było możliwe.

Poniższy przykład pokazuje zapytanie potoku, które znajduje liczbę unikalnych identyfikatorów produktów wyświetlonych w ostatnim miesiącu:

guard let cutoffDate = Calendar.current.date(byAdding: .month, value: -1, to: Date()) else {
  return
}
let snapshot = try await db.pipeline()
  .collection("productViews")
  .where(Field("viewedAt").greaterThan(cutoffDate.timeIntervalSince1970))
  .aggregate([Field("productId").countDistinct().as("uniqueProductViews")])
  .execute()

Rozszerzone możliwości

Zapytanie potoku wprowadza wiele nowych możliwości, w tym:

  • Agregacje: obsługa nowych funkcji agregacji (takich jak sum(...), min(...) i count_distinct(...)) w połączeniu z dowolnymi polami grupowania.
  • Łączenia relacyjne: wykonywanie łączeń po stronie serwera w kolekcjach i podkolekcjach za pomocą skorelowanych podzapytań.
  • Złożone filtrowanie: obsługa setek dodatkowych funkcji do wyrażania dowolnie złożonych instrukcji where(...), w tym regex_match(...), add(...) i str_contains(...), bez ścisłych wymagań dotyczących indeksu.
  • Odczyty częściowe / projekcje: pobieranie dynamicznych podzbiorów dokumentów za pomocą select(...), remove_fields(...) i wielu innych etapów manipulacji dokumentami.

Więcej informacji o tych możliwościach znajdziesz w artykule Wykonywanie zapytań o dane za pomocą operacji potoku.

Obsługa w czasie rzeczywistym i offline

Aby korzystać z funkcji w czasie rzeczywistym i offline, deweloperzy mogą używać operacji podstawowych Firestore w wersji Firestore Enterprise.

Integracja z klientem i narzędziami

Wersja Enterprise zawiera specjalne funkcje do interakcji z zapytaniami potoku i zarządzania nimi:

  • Wyjaśnianie i profilowanie zapytań: możesz używać wyników wyjaśnienia zapytania, aby dowiedzieć się, ile jednostek odczytu lub zapisu zużywa zapytanie, i przeanalizować jego wykonanie.
  • Statystyki zapytań: wersja Enterprise obsługuje Statystyki zapytań, które pomagają określić, gdzie można utworzyć indeksy, aby zwiększyć wydajność i obniżyć koszty, dzięki wglądowi w najpopularniejsze zapytania wykonywane w bazie danych oraz ich charakterystykę wydajności.
  • Nowe typy indeksów: możesz tworzyć specjalne indeksy dla wersji Enterprise, w tym typy indeksów, takie jak indeksy rzadkie, nierzadkie i unikalne. Obsługuje też tworzenie i edytowanie indeksów wyszukiwania wektorowego w bazach danych Enterprise.

Różnice między wersją Firestore Standard a wersją Firestore Enterprise

Główna różnica operacyjna między operacjami podstawowymi a operacjami potoku polega na zarządzaniu indeksowaniem, co bezpośrednio wpływa na wydajność i koszty.

Wersja standardowa – operacje podstawowe Wersja Enterprise – operacje podstawowe i operacje potoku
Wymagania dotyczące indeksowania Zapytania wymagają indeksów.

Indeksy dla poszczególnych pól są tworzone automatycznie, a bardziej złożone zapytania korzystają z indeksów złożonych lub indeksów grupy kolekcji, które trzeba skonfigurować ręcznie.

Indeksy nie są wymagane, a zatem są opcjonalne w przypadku zapytań.

Indeksy definiujesz w razie potrzeby. Wersja Enterprise obsługuje też szerszy zakres typów indeksów, w tym indeksy nierzadkie/rzadkie i unikalne.

Pola zindeksowane Jeśli nie jest jeszcze obecne, do pól zindeksowanych automatycznie dodawane jest dodatkowe pole __name__. Pole __name__ nie jest automatycznie dodawane do pól zindeksowanych. Jeśli jest to ważne dla Twojej aplikacji, musisz wyraźnie określić pole __name__ w polach zindeksowanych.
Normalizacja kolejności sortowania Klauzula order by zapytania jest normalizowana przez dodanie na końcu pól nierówności i pola __name__ (jeśli nie jest jeszcze obecne). Gwarantuje to unikalne, deterministyczne uporządkowanie wyników niezależnie od tego, jakie inne pola znajdują się w klauzuli order by. Brak normalizacji kolejności sortowania. Kolejność sortowania, np. sort a ASC, gwarantuje tylko, że wyniki są sortowane według pola a. Cloud Firestore użyje Twoich dotychczasowych indeksów, aby zwrócić wyniki w najbardziej efektywnej kolejności. Jeśli więc pole a nie jest unikalne w zbiorze wyników, kolejność wyników może się różnić w zależności od konfiguracji indeksu, strategii wykonania itp. Aby zagwarantować unikalne, deterministyczne uporządkowanie wyników, musisz dodać do kolejności sortowania unikalne pole, np. __name__.
Wyniki Zapytania zindeksowane: wydajność i koszty skalują się wraz z rozmiarem zbioru wyników.

Zapytania bez indeksu: wydajność i koszty skalują się wraz z rozmiarem zbioru danych.

Zapytania zindeksowane: wydajność i koszty skalują się wraz z rozmiarem zbioru wyników.

Aby tworzyć indeksy oraz zwiększać wydajność i obniżać koszty zapytań, zalecamy korzystanie z narzędzi Wyjaśnienie zapytania i Statystyki zapytań.

Wpływ na koszty miejsca na dane Ponosisz koszty miejsca na dane związane z automatycznymi indeksami i indeksami złożonymi. Oszczędzasz na kosztach miejsca na dane, ponieważ indeksy nie są tworzone automatycznie dla każdego pola.
Podstawa kosztów Opłaty są naliczane za operacje odczytu, zapisu i usuwania dokumentów. Opłaty są naliczane za jednostki odczytu (porcje po 4 KB) i jednostki zapisu (porcje po 1 KB). Zapisywanie wpisów indeksu zużywa jednostki zapisu.

Dowiedz się więcej o nowych cenach na kilku przykładach.

Reguły zabezpieczeń Reguły zabezpieczeń chronią kolekcje przez weryfikowanie uprawnień do odczytu i zapisu. Reguły zabezpieczeń chronią kolekcje przez weryfikowanie uprawnień do odczytu i zapisu. Dowiedz się, jak modelować dane, aby obsługiwać zapytania potoku w przewodniku Modelowanie danych.