Firebase Firestore — mobil və veb tətbiqlər üçün real vaxt rejimində avtomatik sinxronizasiya ilə Google-un çevik NoSQL sənəd verilənlər bazasıdır. Verilənlər kolleksiyalar və sənədlər şəklində saxlanılır, hər biri ixtiyari strukturlu sahələr dəsti ehtiva edir. Google, 2026 məlumatlarına görə, Firestore çoxregionlu replikasiyanı avtomatik bərpa ilə dəstəkləyir. SDK dəyişiklikləri WebSocket əlaqəsi vasitəsilə 100 millisaniyədən az gecikmə ilə serverə göndərir.
Əsas məqamlar
Firebase Firestore — Google tərəfindən 2019-cu ildə Realtime Database-in varisi olaraq buraxılmış bulud NoSQL verilənlər bazasıdır. Firestore Google Cloud Spanner və Google Cloud Datastore infrastrukturu üzərində qurulmuşdur, bir tranzaksiya çərçivəsində ciddi verilənlər ardıcıllığı və avtomatik çoxregionlu replikasiya təmin edir. SDK Android, iOS, Web (JavaScript), Flutter, Kotlin Multiplatform və Unity-ni dəstəkləyir.
Firestore Google I/O 2017-də “Cloud Firestore” olaraq elan edilmişdir — Realtime Database-in əsas məhdudiyyətlərini aradan qaldıran həll: mürəkkəb sorğuların dəstəklənməməsi, verilənlərin çox node-da miqyaslana bilməməsi və zəif ardıcıllıq. Google (2026) məlumatlarına görə, Firestore gündə 1 trilyondan çox sorğu emal edir və yeni Firebase layihələrinin 80%-i üçün standart verilənlər bazasıdır. Bununla belə, Realtime Database sadə JSON strukturu sayəsində ultra aşağı gecikmə ssenariləri (oyunlar, birgə redaktə) üçün aktual olaraq qalır.
Firestore pay-as-you-go modeli ilə təqdim olunur, Spark tarifində səxavətli pulsuz limitlə: 1 GB yaddaş, ayda 10 GB şəbəkə trafiki, gündə 50 min oxu əməliyyatı, 20 min yazma əməliyyatı və 20 min silmə əməliyyatı. Blaze tarifində bütün bunlar pulsuzdur, artıqlamalar isə tarifləşdirilir: 100 min oxu əməliyyatı üçün $0.06, 100 min yazma əməliyyatı üçün $0.18. Google (2026) məlumatlarına görə, layihələrin 90%-i pulsuz limitdən kənara çıxmır.
Verilənlər modeli Firestore iyerarxik şəkildə təşkil edilmişdir: kök kolleksiyaları ehtiva edir, hər kolleksiya sənədləri ehtiva edir, hər sənəd sahələri (primitiv tiplər, massivlər, Map) və iç-içə kolleksiyaları (subcollections) ehtiva edir. Kolleksiyaların iç-içəlik dərinliyi məhdud deyil, lakin sənəd birbaşa başqa sənəd ehtiva edə bilməz — yalnız istinad (Reference type) vasitəsilə.
Kolleksiya — avtomatik yaradılan və ya təyin edilən identifikatorları olan sənəd konteyneridir. Hər sənəd ölçüsü 1 MiB-ə qədər olan JSON-abənzer obyektdir. Sənəd sahələri sətirlər, ədədlər, məntiqi dəyərlər, massivlər, Map, zaman damğaları (Timestamp), coğrafi nöqtələr (GeoPoint) və digər sənədlərə istinadlar (Reference) ola bilər. Sənədin ölçüsü bütün sahə adları daxil olmaqla 1 MiB ilə məhdudlaşdırılıb.
| Firestore sahə tipi | Nümunə | İndekslənir |
|---|---|---|
| String | “user@example.com” | Bəli |
| Number | 42, 3.14 | Bəli |
| Boolean | true, false | Bəli |
| Array | [1, 2, 3] | Yalnız contains |
| Map | {“iç-içə”: “dəyər”} | Bəli (açarlar üzrə) |
| Timestamp | 2026-07-03T12:00:00Z | Bəli |
| Reference | users/user123 | Bəli |
Firestore verilənlər bazası səviyyəsində atomar tranzaksiyaları dəstəkləyir. Tranzaksiya çoxsaylı sənədləri oxuya və yaza bilər — Commit bütün dəyişiklikləri atomar şəkildə tətbiq edir və ya heç birini tətbiq etmir. Bir tranzaksiyada maksimum 500 əməliyyat, vaxt limiti 60 saniyə. Toplu yazma (batch write) — oxuma mərhələsi olmayan qeyri-tranzaksiya atomar yazma əməliyyatıdır. Tranzaksiyalar maliyyə əməliyyatları, yer rezervasiyası və inventar uçotu üçün kritik əhəmiyyət daşıyır.
Firestore və Realtime Database arasında seçim layihənin tələblərindən asılıdır. Hər iki verilənlər bazası Firebase ekosisteminə daxildir, real vaxt rejimində sinxronizasiya təmin edir və bütün platformalarda mövcuddur, lakin verilənlər modeli, miqyaslama və qiymət baxımından prinsipial fərqlənir.
Realtime Database verilənləri vahid JSON ağacında saxlayır, bu sadə strukturlar üçün əlverişlidir, lakin 3 səviyyədən dərin iç-içəlikdə miqyaslamanı çətinləşdirir. Firestore avtomatik şardinq ilə kolleksiya-sənəd modelindən istifadə edir ki, bu da performans itkisi olmadan milyonlarla sənədə qədər miqyaslamağa imkan verir. Google (2026) məlumatlarına görə, Firestore bir kolleksiyaya 10 minə qədər eyni vaxtlı bağlantını sürət itkisi olmadan dəstəkləyir, Realtime Database bir instansiyaya 200 min bağlantıya qədər dəstəkləyir.
Realtime Database ötürülən verilənlərin həcminə (endirilən bayt) və eyni vaxtlı bağlantıların sayına görə tarifləşdirilir. Firestore — əməliyyatların sayına görə (oxu, yazma, silmə). Tez-tez kiçik yeniləmələr olan tətbiqlər üçün (söhbət, bildirişlər) Firestore adətən daha sərfəlidir — hər yazma əməliyyatı verilənlər ölçüsündən asılı olmayaraq sabit qiymətə başa gəlir. Böyük həcmli verilənlərin nadir oxunması olan tətbiqlər üçün Realtime Database daha ucuz ola bilər.
Google (2026) tövsiyəsi: yeni layihələr üçün standart verilənlər bazası olaraq Firestore-dan, oyunlar və minimal gecikmənin (50 ms-dən az) kritik olduğu və verilənlər strukturunun düz olduğu tətbiqlər üçün Realtime Database-dən istifadə edin. Hər iki verilənlər bazası eyni layihədə eyni vaxtda işləyə bilər.
Firestore sorğuları filtrasiya, sıralama və limit ilə kolleksiyalara və ya kolleksiya qruplarına yerinə yetirilir. Hər sorğunun müştəri tərəfində filtrlə bütün JSON ağacının gəzilməsi olduğu Realtime Database-dən fərqli olaraq, Firestore bütün sorğuları serverdə, əvvəlcədən yaradılmış indekslərdən istifadə edərək yerinə yetirir. Bu, sorğunun mürəkkəbliyinin yalnız nəticənin ölçüsündən asılı olmasını, kolleksiyanın ölçüsündən asılı olmamasını təmin edir.
Firestore dəstəkləyir bir və ya çox sahə üzrə filtrasiya (equality, range, in, array-contains, array-contains-any), artan və azalan sıralama, limit və səhifələmə üçün kursorlar. Məhdudiyyətlər: müxtəlif sahələr üzrə filtrasiya ilə mürəkkəb sorğular (where price > 10 AND where category == “books”) mürəkkəb indeks tələb edir; OR sorğuları qadağandır (in və array-contains-any istifadə olunur) və müxtəlif sahələr üzrə bərabərsizlik sorğuları qadağandır.
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)
}
Firestore tək sahələr üçün avtomatik indekslər yaradır — bir sahə üzrə sorğular heç bir konfiqurasiya olmadan işləyir. İki və ya daha çox sahəsi olan sorğular üçün (filtrasiya + sıralama) mürəkkəb indekslər yaradılır. İlk sorğu göndərildikdə Firestore konsola keçidlə xəta qaytarır, orada indeksi bir düymə ilə yaratmaq olar. Verilənlər bazası üçün maksimum 200 mürəkkəb indeks. İndekslər firebase CLI vasitəsilə ixrac və idxal edilə bilər.
Firestore-un qoşulması Android tətbiqinə Firebase BOM vasitəsilə standart şəkildə həyata keçirilir. firebase-firestore-ktx asılılığı əlavə edildikdən sonra FirebaseFirestore obyekti getInstance() vasitəsilə əldə edilə bilər — əlavə açarlar və ya tokenlər olmadan. Firestore digər xidmətlərlə eyni Firebase layihəsindən istifadə edir.
dependencies {
implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
implementation("com.google.firebase:firebase-firestore-ktx")
}
// İnisiallaşdırma
val db = FirebaseFirestore.getInstance()
Firestore iki oxu rejimi təmin edir: birdəfəlik (get) və real vaxt (addSnapshotListener). Birdəfəlik oxuma sənədi bir dəfə alır — parametrlər və konfiqurasiya üçün faydalıdır. Dinləyici dəyişikliklərə abunə olur — sənədin istənilən yeniləməsi avtomatik olaraq bütün qoşulmuş müştərilərə real vaxt rejimində yenilənmiş verilənləri çatdırır. set() sənəd yaradır və ya üzərinə yazır, update() bütün sənədi üzərinə yazmadan yalnız göstərilən sahələri dəyişir.
Google (2026) məlumatlarına görə, real vaxt rejimində Firestore ilə orta ölçülü tətbiqlər (100 min DAU) ayda təxminən 5-10 GB çıxış trafiki istehlak edir. Oflayn keşdən (Persistence Cache) istifadə təkrar yükləmələrin həcmini 60-70% azaldır, çünki SDK əlaqə bərpa edildikdə yalnız dəyişdirilmiş sənədləri yükləyir.
Persistence Cache — Firestore-un internet olmadan işləmək üçün daxili mexanizmidir. SDK avtomatik olaraq bütün oxunmuş sənədləri cihazda keşləyir (Android-də 500 MiB-ə qədər). Əlaqə itirildikdə oxuma keşdən davam edir, yazma növbəyə qoyulur. Əlaqə bərpa edildikdə bütün təxirə salınmış əməliyyatlar serverə göndərilir və keş serverlə sinxronlaşdırılır. Münaqişələrin idarə edilməsi üçün snapshot-metadata.hasPendingWrites və setOptions(ServerTimestampBehavior) istifadə olunur.
Security Rules — Firestore-a girişin məhdudlaşdırılması üçün deklarativ dildir, Google serverində hər oxu və ya yazma əməliyyatından əvvəl icra olunur. Rules server kodu tələb etmir — onlar Firebase konsolunda və ya firebase CLI vasitəsilə yazılır və Git vasitəsilə versiyalanır. Hər əməliyyat qaydalara uyğunluq üçün yoxlanılır və pozuntu halında PERMISSION_DENIED xətası qaytarılır.
Firestore Security Rules qaydaları match bloklarından və allow ifadələrindən ibarətdir. match kolleksiyaya və ya sənədə yolu müəyyən edir, allow icazə verilən əməliyyatları (read, write, create, update, delete) və şərti — boolean qaytaran JavaScript bənzəri ifadəni təyin edir. Qaydalar autentifikasiyanı (request.auth), sorğu məlumatlarını (request.resource.data), mövcud məlumatları (resource.data), vaxtı (request.time) və yolu (request.path) yoxlaya bilər.
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;
}
}
}
Security Rules server tərəfində tiplərin və dəyərlərin validasiyasını dəstəkləyir. Qiymət mənfi olduqda və ya ad boş olduqda yazma qadağan edilə bilər. Bütün yoxlamalar Google serverində yazmadan əvvəl yerinə yetirilir — bu, müştəridən (Android, iOS, Web, Admin SDK) asılı olmayaraq verilənlərin ardıcıllığını təmin edir. Rules pis niyyətli Admin SDK-dan qorumur — o, tərifinə görə qaydaları yan keçir. Tam qoruma üçün Transaction Functions və Firebase Extensions-dən istifadə edin.
Tez-tez verilən suallar
Firestore indekslər və mürəkkəb sorğular ilə sənəd modelindən istifadə edir. Realtime Database verilənləri JSON ağacında saxlayır və daha az gecikmə təmin edir. Firestore yeni layihələr üçün tövsiyə olunur.
Firestore avtomatik olaraq verilənləri kolleksiyalar üzrə şardinq edir — replikasiya və ya şardinq konfiqurasiyası tələb olunmur. Baza kolleksiyada milyonlarla sənəd və minlərlə eyni vaxtlı bağlantını deqradasiya olmadan davam gətirir.
Bəli, Firebase Console-dan istifadə edin — “Export to Firestore” funksiyası Realtime Database-in JSON strukturunu bir neçə kliklə Firestore kolleksiyalarına və sənədlərinə çevirir. İç-içə düyünlər iç-içə kolleksiyalara çevrilir.
Last write wins — standart olaraq Firestore eyni vaxtlı yazma zamanı münaqişələrin həlli üçün “son yazı qalib gəlir” siyasətindən istifadə edir. Xüsusi emal üçün təkrar oxuma ilə tranzaksiyalardan istifadə edin.
Pulsuz limit Spark tarifi: 1 GB yaddaş, gündə 50 min oxu və 20 min yazma əməliyyatı. Bu MVP və az yükü olan tətbiqlər üçün kifayətdir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun