Firebase Firestore, Google tərəfindən mobil və veb tətbiqlər üçün nəzərdə tutulmuş bulud əsaslı NoSQL real-vaxt məlumat bazasıdır. Məlumatları kolleksiyalar və sənədlər şəklində saxlayır, müştərilər arasında avtomatik sinxronizasiya edir. Firebase, 2025 sənədlərinə görə, Firestore çoxregionlu yerləşdirməni zəmanətli ardıcıllıqla dəstəkləyir və serverləri idarə etmək zərurəti olmadan avtomatik miqyaslanmanı təmin edir. Məlumat bazası tam backend qurmaq üçün Firebase Authentication və Cloud Functions ilə inteqrasiya olunur.
Əsas məqamlar
Firebase Firestore — 2019-cu ildə Google tərəfindən Firebase Realtime Database-in təkamülü olaraq işə salınmış çevik, miqyaslana bilən NoSQL məlumat bazasıdır. Məlumatları sənəd kolleksiyaları şəklində saxlayır, burada hər bir sənəd açar-dəyər cütləri dəstini ehtiva edir. Ənənəvi relyasiyalı bazalardan fərqli olaraq, Firestore əvvəlcədən müəyyən edilmiş sxem tələb etmir — məlumat strukturu yazılan sənədlər əsasında dinamik şəkildə formalaşır.
Firestore-un klassik bulud bazalarından əsas fərqi daxili real-vaxt sinxronizasiyadır. Məlumatlar serverdə dəyişdikdə, bütün qoşulmuş müştərilər daimi WebSocket əlaqəsi vasitəsilə yeniləmələr alır. Bu, serveri əl ilə sorğulamaq ehtiyacını aradan qaldırır və canlı yeniləmələrlə tətbiqlər qurmağa imkan verir: söhbətlər, fəaliyyət lentləri, birgə redaktorlar və monitorinq sistemləri.
Məlumat bazası bütün əsas platformalarda mövcuddur: Android, iOS, Web (JavaScript) və Admin SDK vasitəsilə server dillərində. Firestore SDK təmin edir Swift, Kotlin, JavaScript, Python, Go, Java və Node.js üçün. Google məlumatlarına görə, Firestore Firebase ekosistemində gündə 100 milyarddan çox sorğu emal edir ki, bu da onun istehsal tətbiqləri üçün əsas kimi etibarlılığını təsdiqləyir.
Firestore-da məlumatlar iyerarxik strukturda təşkil olunur. Kolleksiya, SQL-də cədvələ bənzər, lakin sabit sxemsiz sənədlər konteyneridir. Sənəd müxtəlif tipli sahələri olan qeyddir: sətirlər, rəqəmlər, məntiqi dəyərlər, massivlər, iç-içə obyektlər və geo-nöqtələr. Sənədlər altkolleksiyalar ehtiva edə bilər ki, bu da istənilən dərinlikdə iç-içə məlumat strukturları qurmağa imkan verir.
val db = FirebaseFirestore.getInstance()
val user = hashMapOf(
"name" to "Anna Petrova",
"email" to "anna@example.com",
"age" to 28,
"isActive" to true
)
db.collection("users")
.add(user)
.addOnSuccessListener { docRef ->
Log.d("TAG", "Sənəd ID ilə əlavə edildi: ${docRef.id}")
}
Kolleksiyadakı hər bir sənədin unikal identifikatoru var, avtomatik yaradıla və ya əl ilə təyin edilə bilər. Firestore bütün sənəd sahələrini avtomatik indeksləşdirir ki, bu da indekslərin əvvəlcədən konfiqurasiyası olmadan filtrləmə, çeşidləmə və nəticələrin məhdudlaşdırılması ilə mürəkkəb sorğular yerinə yetirməyə imkan verir.
Firestore və Firebase Realtime Database Google-dan iki bulud real-vaxt məlumat bazasıdır. Hər ikisi real-vaxt sinxronizasiyası təmin etsə də, məlumat modeli, miqyaslanma və qiymətləndirmədə əsaslı fərqlərə malikdir. Bu fərqləri başa düşmək müəyyən bir layihə üçün uyğun baza seçərkən kritik əhəmiyyət daşıyır.
| Xüsusiyyət | Firestore | Realtime Database |
|---|---|---|
| Məlumat modeli | Kolleksiyalar və sənədlər | Vahid JSON ağacı |
| Ardıcıllıq | Güclü (strong consistency) | Eventual consistency |
| Sorğular | Filtrləmə və çeşidləmə ilə mürəkkəb | Yalnız bir parametr üzrə filtrləmə |
| Miqyaslanma | Avtomatik, çoxregionlu | Bir region, 200k qoşulmaya qədər |
| Qiymətləndirmə | Oxu/yazma/silmə əməliyyatlarına görə | Ötürülən məlumatların həcminə görə |
Əsas memarlıq fərqi məlumat modelidir. Realtime Database hər şeyi bir böyük JSON ağacında saxlayır, bu da dərin iç-içə sorğuları çətinləşdirir. Firestore kolleksiyalar və sənədlərdən istifadə edir, bu da bir neçə şərtlə mürəkkəb sorğular yerinə yetirməyə imkan verir. Bundan əlavə, Firestore güclü məlumat ardıcıllığı təmin edir: uğurlu yazmadan sonra bütün sonrakı oxumalar geri qaytarılan cari məlumatlara zəmanət verir.
Firestore çoxregionlu memarlıq sayəsində milyonlarla eyni vaxtda qoşulmaya qədər avtomatik miqyaslanır. Realtime Database bir regionla və maksimum 200 000 eyni vaxtda qoşulma ilə məhdudlaşır. Qlobal auditoriya planlaşdıran layihələr üçün Firestore daha üstündür, çünki məlumatlar avtomatik olaraq Google-ın çoxsaylı məlumat mərkəzləri arasında replikasiya olunur.
Firestore-da məlumat strukturu altkolleksiyalarla mürəkkəb iyerarxik modellər qurmağa imkan verir. Məsələn, istifadəçinin „sifarişlər" altkolleksiyası, hər sifarişin isə „məhsullar" altkolleksiyası ola bilər. Realtime Database-də belə dərin iç-içəlik sorğularda performans problemlərinə gətirib çıxarır, çünki kökdən tələb olunan düyünə qədər bütün yol yüklənir.
Firestore real-vaxt məlumat sinxronizasiyası üçün müştəri və server arasında daimi WebSocket əlaqəsi istifadə edir. Tətbiq snapshot listener vasitəsilə sənəd və ya kolleksiya dəyişikliklərinə abunə olduqda, SDK əlaqə kanalı qurur, server hər məlumat dəyişikliyində yeniləmələr göndərir. Müştəri hər dəfə bütün kolleksiyanın tam görüntüsünü deyil, yalnız dəyişdirilmiş sənədləri alır.
Sinxronizasiya mexanizmi hadisə axınına əsaslanır: added (sənəd göründü), modified (sənəd dəyişdi) və removed (sənəd silindi). Tərtibatçı hər bir hadisəni ayrıca emal edə bilər, yalnız müvafiq interfeys elementlərini yeniləyir. Bu, minlərlə sənəd olsa belə yüksək performans təmin edir, çünki yalnız dəyişdirilmiş komponentlər yenidən çəkilir.
Firestore-un əsas üstünlüklərindən biri daxili oflayn rejim dəstəyidir. SDK avtomatik olaraq bütün oxunan məlumatları cihazda keşləyir və şəbəkə olmadıqda işə davam edir. Tətbiq oflayn rejimdə məlumat yazdıqda, onlar yerli növbəyə yerləşdirilir və əlaqə bərpa olunduqda serverə göndərilir. Münaqişələrin həlli üçün last-write-wins strategiyası istifadə olunur.
val docRef = db.collection("cities").document("SF")
docRef.addSnapshotListener { snapshot, error ->
if (error != null) {
Log.w("TAG", "Dinləmə xətası", error)
return@addSnapshotListener
}
if (snapshot != null && snapshot.exists()) {
Log.d("TAG", "Cari məlumatlar: ${snapshot.data}")
}
}
Keş ölçüsü FirestoreSettings vasitəsilə konfiqurasiya edilə bilər. Standart olaraq 100 MB dəyəri istifadə olunur, lakin intensiv məlumat oxuyan tətbiqlər üçün artırıla bilər. Həmçinin tətbiqin yenidən işə salınmasından sonra qalan persistent disk cache rejimi mövcuddur. Oflayn rejimin əlçatanlığını idarə etmək üçün enableNetwork və disableNetwork metodları istifadə olunur, şəbəkə qarşılıqlı əlaqəsini müvəqqəti söndürməyə imkan verir.
Firestore Security Rules — server səviyyəsində məlumatlara girişi idarə etmək üçün deklarativ işarələmə dilidir. Qaydalar kimin və hansı şərtlər altında sənədləri oxuya və yaza biləcəyini müəyyən edir. Onlar sorğu yerinə yetirilməzdən əvvəl işləyir və avtorizasiya üçün ayrıca server məntiqi tələb etmir. Qaydalar hər bir məlumat oxuma və ya yazmadan əvvəl Firebase tərəfindən yoxlanılır.
Giriş qaydaları icazə verilmiş giriş (allow) prinsipi əsasında qurulur. Standart olaraq bütün giriş qadağandır. Tərtibatçı müəyyən şərtlər altında xüsusi əməliyyatlara (read, write, create, update, delete) ardıcıl olaraq giriş açır. Şərtlər request.auth vasitəsilə istifadəçinin autentifikasiyasını, request.resource vasitəsilə sorğu məlumatlarını və resource vasitəsilə mövcud məlumatları yoxlaya bilər.
// Firestore giriş qaydaları
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// İstifadəçi yalnız öz məlumatlarını oxuyur və yazır
match /users/{userId} {
allow read, write: if
request.auth != null &&
request.auth.uid == userId;
}
// İstənilən autentifikasiya olunmuş şəxs yazıları oxuya bilər
match /posts/{postId} {
allow read: if request.auth != null;
allow create: if request.auth != null
&& request.resource.data.author == request.auth.uid;
}
}
}
Giriş nəzarətindən əlavə, Security Rules yazılan məlumatların strukturunu və tiplərini yoxlamağa imkan verir. Məsələn, email sahəsinin müntəzəm ifadəyə uyğun olduğunu və ya yaşın 120 ili keçmədiyini yoxlamaq olar. Validasiya yazmadan əvvəl həyata keçirilir, bu da serverdə yanlış məlumatların saxlanmasının qarşısını alır. Sahələri yoxlamaq üçün bütün yazılan sənədi ehtiva edən request.resource.data obyekti istifadə olunur.
Firestore həmçinin müştərilər tərəfindən giriş olmadan yalnız Admin SDK vasitəsilə server yazısı üçün əlçatan kolleksiyaları dəstəkləyir. Bu, istifadəçilərə görünməməli olan xidmət məlumatını, API açarlarını və konfiqurasiyaları saxlamaq üçün əlverişlidir. Bunun üçün qaydalarda müvafiq kolleksiyalarda bütün müştəri əməliyyatlarını qadağan etmək, yalnız server tərəfində Admin SDK vasitəsilə girişə icazə vermək kifayətdir.
Firestore-un Android tətbiqində tapşırıq siyahısı (todo) yaratmaq üçün inteqrasiya nümunəsini nəzərdən keçirək. Tətbiq tapşırıqları real-vaxt rejimində oxuyacaq, yenilərini əlavə edəcək və yerinə yetirilənləri qeyd edəcək. Asinxron iş üçün Firebase callback interfeysləri və Kotlin korutinlərindən istifadə olunur.
İşə başlamazdan əvvəl layihəni Firebase Console vasitəsilə Firebase-ə qoşmaq və google-services.json faylını tətbiq moduluna əlavə etmək lazımdır. Sonra build.gradle-ə firebase-firestore-ktx asılılığı və google-services plaqini əlavə olunur. Kitabxananın versiyası bütün Firebase komponentlərinin qarşılıqlı uyğunluğu üçün cari Firebase BoM versiyasına uyğun olmalıdır.
dependencies {
// Firebase BoM — versiya idarəetməsi
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"
}
Konfiqurasiyadan sonra Task məlumat modeli və Firestore ilə işləmək üçün repository yaradılır. Model id, title, isCompleted və timestamp sahələrini ehtiva edir. Firestore avtomatik olaraq data class-ı sənədə seriyalaşdırır, sahə adlarını açar kimi istifadə edir. Məlumat oxumaq üçün snapshotFlow uzantısı vasitəsilə Flow qaytaran snapshot listener istifadə olunur.
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 repository-dən Flow-a abunə olur və tapşırıqlar siyahısını UI səviyyəsinə ötürür. Yeni tapşırıq əlavə edilərkən korutin scope vasitəsilə repository-nin suspend-funksiyası çağırılır. Firestore dəyişiklikləri bütün müştərilər arasında avtomatik sinxronlaşdırır: tapşırığı bir istifadəçi əlavə edərsə, digərləri onu ekranı yenidən yükləmədən real-vaxt rejimində görür.
Tez-tez verilən suallar
Firestore cədvəllər və JOIN sorğuları olmadan çevik sxemli NoSQL bazasıdır. Məlumatlar cədvəl sətirlərində deyil, sənəd kolleksiyalarında saxlanılır. SQL-dən fərqli olaraq, Firestore sxemin əvvəlcədən müəyyən edilməsini tələb etmir və miqrasiyalar olmadan avtomatik miqyaslanır, lakin kolleksiyalar arasında mürəkkəb tranzaksiya sorğularını dəstəkləmir.
Firestore səxavətli pulsuz limitə malikdir (Spark planı): gündə 50 000 oxuma, 20 000 yazma və 20 000 silmə. Həddi aşdıqdan sonra Blaze planı istifadə olunur, faktiki istifadəyə görə ödəniş: 100 000 oxuma üçün $0.06 və 100 000 yazma üçün $0.18. Qiymət regiondan və ötürülən məlumatların həcmindən asılıdır.
Firestore münaqişələri həll etmək üçün last-write-wins strategiyasından istifadə edir: sənədə son yazı əvvəlkini tamamilə əvəz edir. Daha incə nəzarət üçün tranzaksiyalar (atomik oxu-yazma əməliyyatları) və bir neçə sənəd üzərində əməliyyatlarda bütövlüyü təmin edən toplu yazmalar mövcuddur.
Bəli, Firestore Firebase Console və ya gcloud CLI vasitəsilə məlumatların ixracını və idxalını dəstəkləyir. İxrac Cloud Firestore Export formatında yerinə yetirilir və Google Cloud Storage-də saxlanılır. Məlumatlar Firebase layihələri arasında miqrasiya edilə və ya BigQuery və digər alətlərdə təhlil üçün yüklənə bilər.
Firestore daxili tam mətn axtarışına malik deyil. Bu tapşırıq üçün Google Algolia və ya Meilisearch ilə inteqrasiyanı, yaxud Elasticsearch ilə Cloud Functions istifadəsini tövsiyə edir. Firestore-un daxili sorğuları yalnız bərabərlik, diapazon və sahənin mövcudluğunu yoxlamağı dəstəkləyir, alt sətir üzrə axtarışı yox.
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