Firebase Firestore — co to je, dokumenty a NoSQL kolekce

Autor: IT Sectr Publikováno: 2026-04-28 Doba čtení: 10 min

Firebase Firestore je flexibilní NoSQL dokumentová databáze od Google s automatickou synchronizací v reálném čase pro mobilní a webové aplikace. Data jsou ukládána ve formě kolekcí a dokumentů, z nichž každý obsahuje sadu polí s libovolnou strukturou. Podle údajů Google, 2026, Firestore podporuje multiregionální replikaci s automatickým obnovením při výpadcích. SDK odesílá změny na server přes WebSocket připojení se zpožděním kratším než 100 milisekund.

Hlavní body

  • Firestore — NoSQL dokumentová databáze s podporou dotazů, indexů a transakcí.
  • Synchronizace dat funguje v reálném čase přes WebSocket — změny na serveru jsou okamžitě doručeny všem klientům.
  • Firestore podporuje offline režim — data se ukládají lokálně do mezipaměti a synchronizují se po obnovení připojení.
  • Automatické škálování až na miliony současných připojení bez konfigurace shardování nebo replikace.
  • Bezpečnostní pravidla Security Rules umožňují spravovat přístup k datům bez serverového kódu.

Co je Firebase Firestore

Firebase Firestore je cloudová NoSQL databáze spuštěná Googlem v roce 2019 jako nástupce Realtime Database. Firestore je postaven na infrastruktuře Google Cloud Spanner a Google Cloud Datastore, což zajišťuje přísnou konzistenci dat v rámci jedné transakce a automatickou multiregionální replikaci. SDK podporuje Android, iOS, Web (JavaScript), Flutter, Kotlin Multiplatform a Unity.

Vývoj od Realtime Database

Firestore byl oznámen na Google I/O 2017 jako „Cloud Firestore” — řešení odstraňující klíčová omezení Realtime Database: nedostatek podpory pro složité dotazy, nemožnost škálování dat na více uzlech a slabou konzistenci. Podle údajů Google (2026) Firestore zpracovává více než 1 bilion dotazů denně a je výchozí databází pro 80% nových projektů Firebase. Realtime Database však zůstává relevantní pro scénáře s ultra-nízkou latencí (hry, společné úpravy) díky jednoduché struktuře JSON.

Bezplatné limity Firestore

Firestore je nabízen v modelu pay-as-you-go s velkorysým bezplatným limitem na tarifu Spark: 1 GB úložiště, 10 GB síťového provozu měsíčně, 50 tisíc čtecích operací, 20 tisíc zapisovacích operací a 20 tisíc mazacích operací denně. Na tarifu Blaze je vše stejně zdarma a překročení se účtují: $0.06 za 100 tisíc čtecích operací, $0.18 za 100 tisíc zapisovacích operací. Podle údajů Google (2026) 90% projektů nepřekračuje bezplatný limit.

Datový model: kolekce, dokumenty a pole

Datový model Firestore je organizován hierarchicky: kořen obsahuje kolekce, každá kolekce obsahuje dokumenty, každý dokument obsahuje pole (primitivní typy, pole, Map) a vnořené kolekce (subcollections). Hloubka vnoření kolekcí není omezena, ale dokument nemůže přímo obsahovat jiný dokument — pouze prostřednictvím reference (Reference type).

Kolekce a dokumenty

Kolekce je kontejner dokumentů s automaticky generovanými nebo zadanými identifikátory. Každý dokument je objekt podobný JSON o velikosti až 1 MiB. Pole dokumentu mohou být řetězce, čísla, booleovské hodnoty, pole, Map, časová razítka (Timestamp), geografické body (GeoPoint) a odkazy na jiné dokumenty (Reference). Velikost dokumentu je omezena na 1 MiB včetně názvů všech polí.

Typ pole FirestorePříkladIndexováno
String„user@example.com”Ano
Number42, 3.14Ano
Booleantrue, falseAno
Array[1, 2, 3]Pouze contains
Map{„vnořené”: „hodnota”}Ano (podle klíčů)
Timestamp2026-07-03T12:00:00ZAno
Referenceusers/user123Ano

Dávkový zápis a transakce

Firestore podporuje atomické transakce na úrovni databáze. Transakce může číst a zapisovat více dokumentů — Commit atomicky aplikuje všechny změny nebo žádnou. Maximálně 500 operací na transakci, časový limit 60 sekund. Dávkový zápis (batch write) je netransakční atomická zapisovací operace bez fáze čtení. Transakce jsou kritické pro finanční operace, rezervace míst a inventarizaci.

Srovnání Firestore a Realtime Database

Výběr mezi Firestore a Realtime Database závisí na požadavcích projektu. Obě databáze jsou součástí ekosystému Firebase, poskytují synchronizaci v reálném čase a jsou dostupné na všech platformách, ale zásadně se liší v datovém modelu, škálování a cenách.

Klíčové rozdíly

Realtime Database ukládá data v jediném JSON stromu, což je vhodné pro jednoduché struktury, ale ztěžuje škálování při vnoření hlubším než 3 úrovně. Firestore používá kolekčně-dokumentový model s automatickým shardováním, což umožňuje škálování až na miliony dokumentů bez snížení výkonu. Podle údajů Google (2026) Firestore podporuje až 10 tisíc současných připojení k jedné kolekci bez ztráty rychlosti, Realtime Database — až 200 tisíc připojení k jedné instanci.

Ceny

Realtime Database je účtována podle objemu přenesených dat (stažených bajtů) a počtu současných připojení. Firestore — podle počtu operací (čtení, zápis, mazání). Pro aplikace s častými malými aktualizacemi (chat, oznámení) je Firestore obvykle výhodnější — každá zapisovací operace má pevnou cenu bez ohledu na velikost dat. Pro aplikace se vzácným čtením velkých objemů dat může být Realtime Database levnější.

Doporučení Google (2026): používejte Firestore jako výchozí databázi pro nové projekty a Realtime Database — pro hry a aplikace, kde je kritická minimální latence (méně než 50 ms) a datová struktura je plochá. Obě databáze mohou pracovat současně v jednom projektu.

Dotazy, indexy a stránkování ve Firestore

Dotazy Firestore se provádějí na kolekcích nebo skupinách kolekcí s filtrováním, řazením a limitem. Na rozdíl od Realtime Database, kde každý dotaz je procházení celého JSON stromu s filtrem na straně klienta, Firestore provádí všechny dotazy na serveru pomocí předem vytvořených indexů. To zaručuje, že složitost dotazu závisí pouze na velikosti výsledku, nikoli na velikosti kolekce.

Typy dotazů

Firestore podporuje filtrování podle jednoho nebo více polí (equality, range, in, array-contains, array-contains-any), řazení vzestupně a sestupně, limit a kurzory pro stránkování. Omezení: složené dotazy s filtrováním podle různých polí (where price > 10 AND where category == „books”) vyžadují složený index; dotazy OR jsou zakázány (používá se in a array-contains-any) a dotazy s nerovností na různých polích jsou zakázány.

kotlin
data class Product(
    val name: String = "",
    val category: String = "",
    val price: Double = 0.0,
    val inStock: Boolean = false
)

suspend fun FirestoreRepository.queryProducts(): List<Product> {
    return firestore
        .collection("products")
        .whereEqualTo("category", "electronics")
        .whereGreaterThanOrEqualTo("price", 100.0)
        .whereLessThan("price", 500.0)
        .orderBy("price")
        .limit(20)
        .get()
        .await()
        .toObjects(Product::class.java)
}

Automatické a složené indexy

Firestore automaticky vytváří indexy pro jednotlivá pole — dotazy na jedno pole fungují bez jakékoli konfigurace. Pro dotazy se dvěma nebo více poli (filtrování + řazení) se vytvářejí složené indexy. Při prvním odeslání dotazu Firestore vrátí chybu s odkazem na konzoli, kde lze index vytvořit jedním kliknutím. Maximálně 200 složených indexů na databázi. Indexy lze exportovat a importovat přes firebase CLI.

Integrace Firestore v Androidu

Připojení Firestore k Android aplikaci se provádí standardně přes Firebase BOM. Po přidání závislosti firebase-firestore-ktx je objekt FirebaseFirestore dostupný přes getInstance() — bez dalších klíčů nebo tokenů. Firestore používá stejný projekt Firebase jako ostatní služby.

groovy
dependencies {
    implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
    implementation("com.google.firebase:firebase-firestore-ktx")
}

// Inicializace
val db = FirebaseFirestore.getInstance()

Čtení a zápis dat

Firestore poskytuje dva režimy čtení: jednorázové (get) a v reálném čase (addSnapshotListener). Jednorázové čtení získá dokument jednou — užitečné pro nastavení a konfiguraci. Posluchač se přihlásí ke změnám — každá aktualizace dokumentu automaticky doručí aktualizovaná data všem připojeným klientům v reálném čase. set() vytvoří nebo přepíše dokument, update() změní pouze zadaná pole bez přepisování celého dokumentu.

Podle údajů Google (2026) aplikace střední velikosti (100 tisíc DAU) s Firestore v reálném čase spotřebují přibližně 5-10 GB odchozího provozu měsíčně. Použití offline mezipaměti (Persistence Cache) snižuje objem opakovaného stahování o 60-70%, protože SDK po obnovení připojení stahuje pouze změněné dokumenty.

Offline režim

Persistence Cache je vestavěný mechanismus Firestore pro práci bez internetu. SDK automaticky ukládá do mezipaměti všechny přečtené dokumenty na zařízení (až 500 MiB na Androidu). Při ztrátě připojení čtení pokračuje z mezipaměti, zápis se zařadí do fronty. Po obnovení připojení jsou všechny odložené operace odeslány na server a mezipaměť je synchronizována se serverem. Pro řízení konfliktů se používají snapshot-metadata.hasPendingWrites a setOptions(ServerTimestampBehavior).

Bezpečnostní pravidla a validace dat

Security Rules je deklarativní jazyk pro omezení přístupu k Firestore, který se spouští na serveru Google před každou operací čtení nebo zápisu. Rules nevyžadují serverový kód — píší se v konzoli Firebase nebo přes firebase CLI a verzují se přes Git. Každá operace je kontrolována na shodu s pravidly a při porušení je vrácena chyba PERMISSION_DENIED.

Struktura pravidel

Pravidla Firestore Security Rules se skládají z bloků match a výrazů allow. match definuje cestu ke kolekci nebo dokumentu, allow specifikuje povolené operace (read, write, create, update, delete) a podmínku — výraz podobný JavaScriptu vracející booleovskou hodnotu. Pravidla mohou kontrolovat autentizaci (request.auth), data požadavku (request.resource.data), existující data (resource.data), čas (request.time) a cestu (request.path).

javascript
rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read: if request.auth != null;
      allow write: if request.auth.uid == userId;
    }

    match /products/{productId} {
      allow read: if true;
      allow create: if request.auth.token.role == "admin";
      allow update: if resource.data.authorId == request.auth.uid;
    }
  }
}

Validace dat

Security Rules podporují validaci typů a hodnot na straně serveru. Lze zakázat zápis, pokud je cena záporná nebo název prázdný. Všechny kontroly se provádějí na serveru Google před zápisem — to zaručuje konzistenci dat bez ohledu na klienta (Android, iOS, Web, Admin SDK). Rules nechrání před škodlivým Admin SDK — ten podle definice pravidla obchází. Pro úplnou ochranu použijte Transaction Functions a Firebase Extensions.

Často kladené otázky

Jaký je rozdíl mezi Firestore a Realtime Database?

Firestore používá dokumentový model s indexy a složitými dotazy. Realtime Database ukládá data ve stromu JSON a poskytuje nižší latenci. Firestore se doporučuje pro nové projekty.

Jak se Firestore škáluje?

Firestore automaticky sharduje data podle kolekcí — není třeba nastavovat replikaci ani shardování. Databáze zvládá miliony dokumentů v jedné kolekci a tisíce současných připojení bez degradace.

Lze migrovat data z Realtime Database do Firestore?

Ano, použijte Firebase Console — funkce „Export to Firestore” převede JSON strukturu Realtime Database na kolekce a dokumenty Firestore několika kliknutími. Vnořené uzly se stanou vnořenými kolekcemi.

Jak Firestore řeší konflikty při offline zápisu?

Last write wins — ve výchozím nastavení Firestore používá politiku „poslední zápis vítězí” pro řešení konfliktů při současném zápisu. Pro vlastní zpracování použijte transakce s opětovným čtením.

Kolik bezplatného úložiště poskytuje Firestore?

Bezplatný limit tarifu Spark: 1 GB úložiště, 50 tisíc čtecích a 20 tisíc zapisovacích operací denně. To stačí pro MVP a aplikace s nízkým zatížením.

Shrnutí

  • Firebase Firestore — NoSQL dokumentová databáze Google s synchronizací v reálném čase a automatickým škálováním.
  • Datový model: kolekce → dokumenty → pole (String, Number, Boolean, Array, Map, Timestamp, Reference, GeoPoint).
  • Podporuje složené dotazy s filtrováním, řazením, stránkováním a složenými indexy pro složité podmínky.
  • Offline režim ukládá do mezipaměti až 500 MiB dat na zařízení s automatickou synchronizací po obnovení připojení.
  • Security Rules — serverový jazyk pro přístupová práva s validací typů a hodnot bez psaní backend kódu.
  • Multiregionální replikace s automatickým obnovením při výpadcích — data jsou dostupná i při výpadku datového centra.
  • Doporučeno pro nové projekty jako výchozí databáze, Realtime Database — pro hry a scénáře s ultra-nízkou latencí.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také