Firebase Firestore: шта је то, NoSQL и како ради

Аутор: IT Sectr Објављено: 2026-03-12 Време читања: 10 мин

Firebase Firestore је облачна NoSQL база података у реалном времену од Google-а, намењена за мобилне и веб апликације. Чува податке у облику колекција и докумената са аутоматском синхронизацијом између клијената. Према документацији Firebase, 2025, Firestore подржава мултирегионално постављање са гарантованом конзистентношћу и обезбеђује аутоматско скалирање без потребе за управљањем серверима. База података се интегрише са Firebase Authentication и Cloud Functions за изградњу потпуног бекенда без сопствене серверске инфраструктуре.

Главно

  • Firestore је облачна NoSQL база података у реалном времену са аутоматском синхронизацијом података између клијената.
  • Подаци су организовани у колекције и документе са флексибилном шемом, која не захтева претходни опис поља.
  • Подржава офлајн приступ: подаци се кеширају на уређају и синхронизују при успостављању везе.
  • Скалира се аутоматски до милиона истовремених веза без ручног конфигурисања сервера.
  • Интегрише се са Firebase Authentication и Cloud Functions за изградњу серверске логике без сопственог бекенда.

Шта је Firebase Firestore?

Firebase Firestore је флексибилна, скалабилна NoSQL база података коју је Google покренуо 2019. године као еволуцију Firebase Realtime Database. Чува податке у облику колекција докумената, где сваки документ садржи скуп парова кључ-вредност. За разлику од традиционалних релационих база, Firestore не захтева унапред дефинисану шему — структура података се формира динамички на основу записаних докумената.

Кључна разлика Firestore-а од класичних облачних база је уграђена синхронизација у реалном времену. Када се подаци промене на серверу, сви повезани клијенти добијају ажурирања преко сталне WebSocket везе. То елиминише потребу за ручним испитивањем сервера и омогућава изградњу апликација са живим ажурирањима: четове, фидове активности, колаборативне едиторе и системе за надгледање.

База података је доступна на свим главним платформама: Android, iOS, Web (JavaScript) и серверским језицима преко Admin SDK-а. Firestore обезбеђује SDK за Swift, Kotlin, JavaScript, Python, Go, Java и Node.js. Према Google-овим подацима, Firestore обрађује преко 100 милијарди упита дневно широм Firebase екосистема, што потврђује његову поузданост као основе за production апликације.

Основни концепти: колекције и документи

У Firestore-у подаци су организовани у хијерархијску структуру. Колекција је контејнер докумената, сличан табели у SQL-у, али без фиксне шеме. Документ је запис који садржи поља различитих типова: стрингове, бројеве, булове вредности, низове, угнежђене објекте и гео-тачке. Документи могу садржати подколекције, што омогућава изградњу угнежђених структура података било које дубине.

kotlin
val db = FirebaseFirestore.getInstance()

val user = hashMapOf(
    "name" to "Ана Петрова",
    "email" to "anna@example.com",
    "age" to 28,
    "isActive" to true
)

db.collection("users")
    .add(user)
    .addOnSuccessListener { docRef ->
        Log.d("TAG", "Документ додат са ID: ${docRef.id}")
    }

Сваки документ у колекцији има јединствени идентификатор који може бити генерисан аутоматски или постављен ручно. Firestore аутоматски индексира сва поља документа, што омогућава извршавање сложених упита са филтрирањем, сортирањем и ограничавањем броја резултата без претходног подешавања индекса.

Firebase Firestore vs Realtime Database: поређење

Firestore и Firebase Realtime Database су две облачне базе података у реалном времену од Google-а. Иако обе обезбеђују синхронизацију у реалном времену, оне имају суштинске разлике у моделу података, скалирању и ценама. Разумевање ових разлика је кључно при одабиру одговарајуће базе за одређени пројекат.

КарактеристикаFirestoreRealtime Database
Модел податакаКолекције и документиЈединствено JSON стабло
КонзистентностЈака (strong consistency)Eventual consistency
УпитиСложени са филтрирањем и сортирањемСамо филтрирање по једном параметру
СкалирањеАутоматско, мултирегионалноЈедан регион, до 200k веза
ЦенеПо операцијама читања/писања/брисањаПо обиму пренесених података

Главна архитектонска разлика је модел података. Realtime Database чува све у једном великом JSON стаблу, што отежава упите са дубоким угнежђењем. Firestore користи колекције и документе, што омогућава извршавање сложених упита са више услова. Поред тога, Firestore обезбеђује јаку конзистентност података: након успешног уписа, сва накнадна читања гарантовано враћају ажурне податке.

Скалабилност и структура података

Firestore се аутоматски скалира до милиона истовремених веза захваљујући мултирегионалној архитектури. Realtime Database је ограничена на један регион и максимум 200.000 истовремених веза. За пројекте који планирају глобалну публику, Firestore је пожељнији јер се подаци аутоматски реплицирају између више Google-ових дата центара.

Структура података у Firestore-у омогућава изградњу сложених хијерархијских модела са подколекцијама. На пример, корисник може имати подколекцију „поруџбине", а свака поруџбина — подколекцију „производи". У Realtime Database такво дубоко угнежђење доводи до проблема са перформансама при упитима, јер се учитава цео пут од корена до жељеног чвора.

Како ради синхронизација података у Firestore-у

Firestore користи сталну WebSocket везу између клијента и сервера за синхронизацију података у реалном времену. Када се апликација претплати на промене документа или колекције преко snapshot listener-а, SDK успоставља комуникациони канал преко којег сервер шаље ажурирања при свакој промени података. Клијент добија само измењене документе, а не комплетан снимак целе колекције сваки пут.

Механизам синхронизације се заснива на току догађаја: added (документ се појавио), modified (документ се променио) и removed (документ је обрисан). Програмер може обрађивати сваки догађај посебно, ажурирајући само одговарајуће UI елементе. То обезбеђује високе перформансе чак и са хиљадама докумената, јер се само измењене компоненте поново исцртавају.

Офлајн приступ и кеширање

Једна од кључних предности Firestore-а је уграђена подршка за офлајн режим. SDK аутоматски кешира све прочитане податке на уређају и наставља да ради у одсуству мреже. Када апликација уписује податке у офлајн режиму, они се смештају у локални ред и шаљу на сервер при успостављању везе. За решавање конфликата користи се стратегија last-write-wins.

kotlin
val docRef = db.collection("cities").document("SF")

docRef.addSnapshotListener { snapshot, error ->
    if (error != null) {
        Log.w("TAG", "Грешка при слушању", error)
        return@addSnapshotListener
    }

    if (snapshot != null && snapshot.exists()) {
        Log.d("TAG", "Тренутни подаци: ${snapshot.data}")
    }
}

Величина кеша се може подесити кроз FirestoreSettings. Подразумевано се користи 100 MB, али за апликације са интензивним читањем података може се повећати. Такође је доступан persistent disk cache режим који преживљава поновно покретање апликације. За управљање доступношћу офлајн режима користе се методе enableNetwork и disableNetwork, које омогућавају привремено искључивање мрежне комуникације.

Безбедност и правила приступа Firestore-у

Firestore Security Rules су декларативни језик означавања за контролу приступа подацима на нивоу сервера. Правила одређују ко и под којим условима може читати и уписати документе. Она раде пре извршења упита и не захтевају одвојену серверску логику за ауторизацију. Правила се проверавају на Firebase страни пре сваког читања или уписа података.

Правила приступа се граде на принципу дозвољеног приступа (allow). Подразумевано, сав приступ је забрањен. Програмер сукцесивно отвара приступ за конкретне операције (read, write, create, update, delete) под одређеним условима. Услови могу проверавати аутентификацију корисника преко request.auth, податке упита преко request.resource и постојеће податке преко resource.

js
// Правила приступа Firestore
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // Корисник чита и пише само своје податке
    match /users/{userId} {
      allow read, write: if
          request.auth != null &&
          request.auth.uid == userId;
    }

    // Сваки аутентификовани корисник може читати објаве
    match /posts/{postId} {
      allow read: if request.auth != null;
      allow create: if request.auth != null
          && request.resource.data.author == request.auth.uid;
    }
  }
}

Валидација података кроз правила

Поред контроле приступа, Security Rules омогућавају валидацију структуре и типова записаних података. На пример, може се проверити да ли поље е-поште одговара регуларном изразу или да ли старост не прелази 120 година. Валидација се врши пре уписа, што спречава чување неисправних података на серверу. За проверу поља користи се објекат request.resource.data који садржи цео документ који се уписује.

Firestore такође подржава колекције доступне само за серверски упис преко Admin SDK-а, без приступа са стране клијената. Ово је згодно за чување сервисних информација, API кључева и конфигурација које не би требало да буду видљиве корисницима. За то је у правилима довољно забранити све клијентске операције на одговарајућим колекцијама, дозвољавајући приступ само преко Admin SDK са серверске стране.

Пример употребе Firebase Firestore у Android-у

Размотримо пример интеграције Firestore-а у Android апликацију за креирање листе задатака (todo). Апликација ће читати задатке у реалном времену, додавати нове и означавати завршене. За асинхрони рад користе се callback интерфејси Firebase и корутине Kotlin-а.

Подешавање Firebase и додавање зависности

Пре почетка рада потребно је повезати пројекат са Firebase-ом преко Firebase Console-а и додати датотеку google-services.json у модул апликације. Затим се у build.gradle додаје зависност firebase-firestore-ktx и прикључак google-services. Верзија библиотеке треба да одговара актуелној верзији BoM Firebase-а ради компатибилности свих Firebase компоненти међу собом.

groovy
dependencies {
    // Firebase BoM — управљање верзијама
    implementation platform("com.google.firebase:firebase-bom:33.0.0")
    implementation "com.google.firebase:firebase-firestore-ktx"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.9.0"
}

Након подешавања креира се модел података Task и репозиторијум за рад са Firestore-ом. Модел садржи поља id, title, isCompleted и timestamp. Firestore аутоматски серијализује data class у документ, користећи имена поља као кључеве. За читање података користи се snapshot listener који враћа Flow преко проширења snapshotFlow.

kotlin
data class Task(
    val id: String = "",
    val title: String = "",
    val isCompleted: Boolean = false,
    val createdAt: Timestamp? = null
)

class TaskRepository {
    private val tasksRef = FirebaseFirestore
        .getInstance()
        .collection("tasks")

    fun getTasks(): Flow<List<Task>> = tasksRef
        .orderBy("createdAt", Query.Direction.DESCENDING)
        .snapshotFlow()
        .map { snapshot ->
            snapshot?.toObjects(Task::class.java) ?: emptyList()
        }

    suspend fun addTask(title: String) {
        tasksRef.add(Task(title = title))
    }
}

View-model се претплаћује на Flow из репозиторијума и прослеђује листу задатака на UI ниво. При додавању новог задатка позива се suspend-функција репозиторијума преко корутин scope-а. Firestore аутоматски синхронизује промене између свих клијената: ако задатак дода један корисник, остали га виде у реалном времену без поновног учитавања екрана.

Често постављана питања

Чим се Firebase Firestore разликује од обичне SQL базе?

Firestore је NoSQL база са флексибилном шемом без табела и JOIN упита. Подаци се чувају у колекцијама докумената, а не у редовима табела. За разлику од SQL-а, Firestore не захтева претходно дефинисање шеме и аутоматски се скалира без миграција, али не подржава сложене транзакционе упите између колекција.

Колико кошта коришћење Firebase Firestore-а?

Firestore има великодушан бесплатни лимит (Spark план): 50.000 читања, 20.000 уписа и 20.000 брисања дневно. Након прекорачења користи се Blaze план са плаћањем по употреби: $0.06 за 100.000 читања и $0.18 за 100.000 уписа. Цена зависи од региона и обима пренесених података.

Како Firestore обрађује конфликте података?

Firestore користи стратегију last-write-wins за решавање конфликата: последњи упис у документ потпуно замењује претходни. За финију контролу доступне су трансакције (атомске операције читања-уписа) и пакетни упису који гарантују интегритет при операцијама над више докумената.

Може ли се мигрирати податке из Firebase Firestore-а?

Да, Firestore подржава извоз и увоз података преко Firebase Console-а или gcloud CLI-ја. Извоз се врши у формату Cloud Firestore Export и чува се у Google Cloud Storage-у. Подаци се могу мигрирати између Firebase пројеката или преузети за анализу у BigQuery-у и другим алатима.

Да ли Firestore подржава претрагу пуног текста?

Firestore нема уграђену претрагу пуног текста. За овај задатак Google препоручује интеграцију са Algolia или Meilisearch, или коришћење Cloud Functions са Elasticsearch-ом. Уграђени упити Firestore-а подржавају само проверу једнакости, опсега и присуства поља без претраге по подстрингу.

Резиме

  • Firebase Firestore је облачна NoSQL база података у реалном времену са колекцијама и документима, која се аутоматски скалира под оптерећењем.
  • Уграђена синхронизација преко WebSocket-а обезбеђује ажурирање података на свим клијентима без ручног испитивања сервера.
  • Офлајн приступ са кеширањем омогућава апликацији да потпуно ради без интернета и аутоматски се синхронизује при успостављању мреже.
  • У поређењу са Realtime Database, Firestore нуди сложеније упите, јаку конзистентност и мултирегионално постављање.
  • Безбедност података обезбеђују декларативна Security Rules која проверавају приступ и валидирају податке на страни сервера.
  • Интеграција са Firebase Authentication и Cloud Functions омогућава изградњу потпуне серверске апликације без сопствене инфраструктуре.
  • За нове пројекте Firestore Google препоручује као главну базу података у реалном времену, која замењује старију Realtime Database.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође