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), a także wbudowaną obsługę zapytań nasłuchujących w czasie rzeczywistym i utrwalania offline. W tej wersji występuje istotna różnica w działaniu: 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 będą domyślnie skanować całą kolekcję. Wraz ze wzrostem zbioru danych może to prowadzić do wydłużenia czasu oczekiwania i zwiększenia kosztów.

Operacje potoków Firestore to podstawowa funkcja Firestore w wersji Enterprise, która jest oparta na zaawansowanym mechanizmie zapytań, co znacznie zwiększa 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 na potrzeby aplikacji.

Funkcje podstawowych operacji Firestore

Operacje podstawowe 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 związane z indeksowaniem i rozliczeniami znacznie się różni od wersji Standard.

Funkcjonalność i ciągłość

Operacje podstawowe zachowują znaną składnię łańcuchową metod (np. .where(), .orderBy()) używaną w wersji Standard. Te operacje obsługują zapytania nasłuchiwania 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 jednopola. 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 w miarę powiększania się zbioru danych mogą działać wolniej i generować wyższe koszty. Deweloperzy muszą ręcznie tworzyć indeksy, aby optymalizować wydajność zapytań i zmniejszać zużycie jednostek odczytu.

Model rozliczeniowy (oparty na jednostkach)

Jednostki odczytu są naliczane w transzach 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 transzach po 1 KB. Zapisanie dokumentu powoduje wykorzystanie jednostek na dane oraz dodatkowych jednostek 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 indeksowania, aby zoptymalizować koszty zapisu i wydajność.

Funkcje operacji potoku Firestore

Wersja Enterprise Firestore z operacjami potokowymi korzysta z zaawansowanego silnika zapytań, który eliminuje wiele dotychczasowych ograniczeń wersji Standard Firestore. Operacje potoku zapewniają setki dodatkowych funkcji zapytań. Operacje potoku 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 określonej 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.

Przykład poniżej 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 Pipeline wprowadza wiele nowych funkcji, w tym:

  • Agregacje: obsługa nowych funkcji agregacji (takich jak sum(...), min(...)count_distinct(...)) w połączeniu z dowolnymi polami grupowania.
  • Zaawansowane filtrowanie: obsługa setek dodatkowych funkcji do wyrażania dowolnie złożonych instrukcji where(...), w tym regex_match(...), add(...)str_contains(...), bez konieczności stosowania indeksów twardych.
  • Odczyty częściowe / projekcje: pobieraj dynamiczne podzbiory dokumentów za pomocą funkcji select(...), remove_fields(...) i wielu innych etapów manipulacji dokumentami.

Więcej informacji o tych możliwościach znajdziesz w artykule Wykonywanie zapytań dotyczących danych za pomocą operacji Pipeline.

Obsługa w czasie rzeczywistym i offline

Aby korzystać z funkcji czasu rzeczywistego i offline, programiści mogą używać podstawowych operacji Firestore w wersji Firestore Enterprise.

Integracja klienta i narzędzi

Wersja Enterprise zawiera specjalne funkcje do interakcji z zapytaniami dotyczącymi 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, zapewniając wgląd w najważniejsze zapytania uruchamiane w bazie danych oraz ich charakterystykę wydajności.
  • Nowe typy indeksów: w wersji Enterprise możesz tworzyć specjalistyczne indeksy, w tym indeksy rzadkie, nierzadkie i unikalne. Umożliwia też tworzenie i edytowanie indeksów wyszukiwania wektorowego w bazach danych Enterprise.

Różnice między Firestore w wersji Standard i Firestore w wersji Enterprise

Główna różnica operacyjna między operacjami podstawowymi a operacjami potokowymi polega na zarządzaniu indeksowaniem, które ma bezpośredni wpływ na wydajność i koszty.

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

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

Indeksy nie są wymagane, więc w przypadku zapytań są opcjonalne.

Indeksy definiujesz w miarę potrzeb. Wersja Enterprise obsługuje też szerszy zakres typów indeksów, w tym indeksy niepełne/pełne i unikalne.

Wyniki Zapytania indeksowane: wydajność i koszt zależą od rozmiaru zestawu wyników.

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

Zapytania indeksowane: wydajność i koszt zależą od rozmiaru zestawu wyników.

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

Wpływ na koszt przechowywania Automatyczne indeksy i indeksy złożone powodują dodatkowe obciążenie pamięci. Oszczędzasz na kosztach przechowywania, ponieważ indeksy nie są automatycznie tworzone dla każdego pola.
Koszt Opłata jest naliczana za każdą operację odczytu, zapisu i usunięcia dokumentu. Opłaty są naliczane za jednostkę odczytu (w transzach po 4 KB) i jednostkę zapisu (w transzach po 1 KB). Zapisywanie wpisów indeksu zużywa jednostki zapisu.

Poznaj nowe ceny na przykładach.

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 dotyczące potoków, w przewodniku Model danych.