Omówienie Firestore w trybie natywnym

Firestore w trybie natywnym obejmuje 2 zestawy operacji – operacje podstawowe Firestore i operacje potokowe 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 różnica w działaniu polega na tym, ż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 potokowe Firestore to główna funkcja wersji Firestore Enterprise, która jest oparta na zaawansowanym mechanizmie zapytań i znacznie rozszerza zakres możliwych zapytań. Operacje potokowe 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 różni się 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 według 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 potokowych Firestore

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

Składnia kompozycyjna oparta na etapach

Zapytania potokowe są tworzone przez zdefiniowanie serii kolejnych 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 potokowe, 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 potokowe 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ą powiązanych 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 potokowych.

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 potokowymi 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. Umożliwiają one wgląd 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 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 między operacjami podstawowymi a operacjami potokowymi polega na zarządzaniu indeksowaniem, które bezpośrednio wpływa na wydajność i koszty.

Wersja Standard – operacje podstawowe Wersja Enterprise – operacje podstawowe i operacje potokowe
Wymagania dotyczące indeksowania Indeksy są wymagane w przypadku zapytań.

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 pole __name__ nie jest jeszcze obecne, jest automatycznie dołączane do pól zindeksowanych. Pole __name__ nie jest automatycznie dołączane 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 dołączenie 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 zależą od rozmiaru zbioru wyników.

Zapytania bez indeksu: wydajność i koszty zależą od rozmiaru zbioru danych.

Zapytania zindeksowane: wydajność i koszty zależą od rozmiaru zbioru wyników.

Aby tworzyć indeksy i zwiększać wydajność oraz 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 operację odczytu, zapisu i usuwania dokumentu. Opłaty są naliczane za jednostkę odczytu (porcje po 4 KB) i jednostkę zapisu (porcje po 1 KB). Zapisywanie wpisów indeksu zużywa jednostki zapisu.

Dowiedz się więcej o nowych cenach na podstawie kilku przykładów.

Reguły zabezpieczeń Reguły zabezpieczeń chronią kolekcje, weryfikując uprawnienia do odczytu i zapisu. Reguły zabezpieczeń chronią kolekcje, weryfikując uprawnienia do odczytu i zapisu. Dowiedz się, jak modelować dane, aby obsługiwać zapytania potokowe , z przewodnika Modelowanie danych.