Tryb natywny Firestore obejmuje 2 zestawy operacji: operacje Firestore Core i operacje Firestore Pipeline.
Operacje Firestore Core 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 trwałości offline. W tej wersji występuje wyraźna różnica operacyjna: 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 potokowe 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 Firestore 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 podstawowych operacji Firestore
Operacje podstawowe umożliwiają standardowe operacje CRUD i zapytania nasłuchiwania w czasie rzeczywistym. Jednak w przypadku używania tych operacji w wersji Enterprise podstawowe działanie dotyczące indeksowania i rozliczeń znacznie się różni w porównaniu z wersją Standard.
Funkcjonalność i ciągłość
Podstawowe operacje 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 operacja Core w wersji Enterprise nie tworzy automatycznie indeksów pojedynczego pola. 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 zoptymalizować wydajność zapytań i zmniejszyć 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 zużywa jednostki na dane oraz dodatkowe jednostki za 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 Pipeline korzysta z zaawansowanego silnika zapytań, który eliminuje wiele dotychczasowych ograniczeń wersji Standard Firestore. Operacje potoku Firestore zapewniają setki dodatkowych funkcji zapytań. Operacje potoku Firestore 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 wyników agregacji, które wcześniej nie było możliwe.
Przykład poniżej 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 Pipelines wprowadza wiele nowych funkcji, w tym:
- Agregacje: obsługa nowych funkcji agregacji (np.
sum(...),min(...)icount_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 tymregex_match(...),add(...)istr_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ń o dane za pomocą operacji Pipeline.
Obsługa w czasie rzeczywistym i offline
Aby korzystać z funkcji czasu rzeczywistego i offline, programiści mogą używać operacji Firestore Core w wersji Enterprise Firestore.
Integracja z klientem i narzędziami
Wersja Enterprise zawiera specjalistyczne 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 poprawić wydajność i obniżyć koszty. Zapewniają 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.
| Firestore Standard – podstawowe operacje | Firestore Enterprise – operacje podstawowe i operacje potokowe | |
| Wymagania dotyczące indeksowania | Indeksy są wymagane w przypadku zapytań.
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, dlatego 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 indeksy unikalne. |
| Wyniki | Zapytania indeksowane: wydajność i koszt zależą od rozmiaru zbioru wyników. |
Zapytania bez indeksu: wydajność i koszty zależą od rozmiaru zbioru danych. Zapytania indeksowane: wydajność i koszt zależą od rozmiaru zbioru 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 | Indeksy automatyczne i złożone powodują dodatkowe obciążenie związane z przechowywaniem danych. | Oszczędzasz na kosztach przechowywania, ponieważ indeksy nie są automatycznie tworzone dla każdego pola. |
| Baza kosztów | Opłata jest naliczana za każdą operację odczytu, zapisu i usuwania 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 podstawie 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, w przewodniku Model danych. |