Firebase Firestore — mobil va web ilovalar uchun real vaqt rejimida avtomatik sinxronizatsiyaga ega Google-ning moslashuvchan NoSQL hujjat ma'lumotlar bazasi. Ma'lumotlar kolleksiyalar va hujjatlar shaklida saqlanadi, ularning har biri ixtiyoriy tuzilishdagi maydonlar to'plamini o'z ichiga oladi. Google, 2026 ma'lumotlariga ko'ra, Firestore ko'p mintaqali replikatsiyani avtomatik qayta tiklash bilan qo'llab-quvvatlaydi. SDK o'zgarishlarni serverga WebSocket ulanishi orqali 100 millisekunddan kam kechikish bilan yuboradi.
Asosiy nuqtalar
Firebase Firestore — Google tomonidan 2019-yilda Realtime Database vorisi sifatida chiqarilgan bulutli NoSQL ma'lumotlar bazasi. Firestore Google Cloud Spanner va Google Cloud Datastore infratuzilmasi asosida qurilgan bo'lib, bitta tranzaksiya doirasida ma'lumotlarning qat'iy izchilligini va avtomatik ko'p mintaqali replikatsiyani ta'minlaydi. SDK Android, iOS, Web (JavaScript), Flutter, Kotlin Multiplatform va Unity-ni qo'llab-quvvatlaydi.
Firestore Google I/O 2017-da “Cloud Firestore” sifatida e'lon qilindi — Realtime Database-ning asosiy cheklovlarini bartaraf etuvchi yechim: murakkab so'rovlarni qo'llab-quvvatlamaslik, ma'lumotlarni bir necha tugunlarda masshtablay olmaslik va zaif izchillik. Google (2026) ma'lumotlariga ko'ra, Firestore kuniga 1 trilliondan ortiq so'rovni qayta ishlaydi va yangi Firebase loyihalarining 80% uchun standart ma'lumotlar bazasi hisoblanadi. Biroq, Realtime Database sodda JSON tuzilishi tufayli ultra past kechikish stsenariylari (o'yinlar, birgalikda tahrirlash) uchun dolzarbligicha qolmoqda.
Firestore pay-as-you-go modeli bo'yicha taqdim etiladi, Spark tarifida saxovatli bepul limit bilan: 1 GB xotira, oyiga 10 GB tarmoq trafigi, kuniga 50 ming o'qish operatsiyasi, 20 ming yozish operatsiyasi va 20 ming o'chirish operatsiyasi. Blaze tarifida barchasi bepul, ortib qolganlar esa tariflanadi: 100 ming o'qish operatsiyasi uchun $0.06, 100 ming yozish operatsiyasi uchun $0.18. Google (2026) ma'lumotlariga ko'ra, loyihalarning 90% bepul limitdan chiqmaydi.
Ma'lumotlar modeli Firestore ierarxik tarzda tashkil etilgan: ildiz kolleksiyalarni o'z ichiga oladi, har bir kolleksiya hujjatlarni o'z ichiga oladi, har bir hujjat maydonlarni (primitiv turlar, massivlar, Map) va ichki kolleksiyalarni (subcollections) o'z ichiga oladi. Kolleksiyalarning ichki joylashish chuqurligi cheklanmagan, ammo hujjat to'g'ridan-to'g'ri boshqa hujjatni o'z ichiga olmaydi — faqat havola (Reference type) orqali.
Kolleksiya — avtomatik yaratilgan yoki belgilangan identifikatorlarga ega hujjatlar konteyneri. Har bir hujjat hajmi 1 MiB gacha bo'lgan JSON-ga o'xshash obyektdir. Hujjat maydonlari satrlar, raqamlar, mantiqiy qiymatlar, massivlar, Map, vaqt tamg'alari (Timestamp), geografik nuqtalar (GeoPoint) va boshqa hujjatlarga havolalar (Reference) bo'lishi mumkin. Hujjat hajmi barcha maydon nomlarini hisobga olgan holda 1 MiB bilan cheklangan.
| Firestore maydon turi | Misol | Indekslanadi |
|---|---|---|
| String | “user@example.com” | Ha |
| Number | 42, 3.14 | Ha |
| Boolean | true, false | Ha |
| Array | [1, 2, 3] | Faqat contains |
| Map | {“ichki”: “qiymat”} | Ha (kalitlar bo'yicha) |
| Timestamp | 2026-07-03T12:00:00Z | Ha |
| Reference | users/user123 | Ha |
Firestore ma'lumotlar bazasi darajasida atom tranzaksiyalarini qo'llab-quvvatlaydi. Tranzaksiya bir nechta hujjatlarni o'qishi va yozishi mumkin — Commit barcha o'zgarishlarni atom tarzda qo'llaydi yoki hech birini qo'llamaydi. Bitta tranzaksiyada maksimum 500 operatsiya, vaqt chegarasi 60 soniya. Paketli yozish (batch write) — o'qish bosqichisiz notranzaksiya atom yozish operatsiyasi. Tranzaksiyalar moliyaviy operatsiyalar, joy bron qilish va inventarizatsiya uchun muhim ahamiyatga ega.
Firestore va Realtime Database o'rtasidagi tanlov loyiha talablariga bog'liq. Ikkala ma'lumotlar bazasi Firebase ekotizimiga kiradi, real vaqt rejimida sinxronizatsiyani ta'minlaydi va barcha platformalarda mavjud, ammo ma'lumotlar modeli, masshtablash va narxlash bo'yicha tubdan farqlanadi.
Realtime Database ma'lumotlarni yagona JSON daraxtida saqlaydi, bu sodda tuzilmalar uchun qulay, ammo 3 darajadan chuqur ichki joylashishda masshtablashni qiyinlashtiradi. Firestore avtomatik sharding bilan kolleksiya-hujjat modelidan foydalanadi, bu esa ishlash pasayishisiz millionlab hujjatlargacha masshtablash imkonini beradi. Google (2026) ma'lumotlariga ko'ra, Firestore bitta kolleksiyaga 10 minggacha bir vaqtli ulanishni tezlikni yo'qotmasdan qo'llab-quvvatlaydi, Realtime Database — bitta instansiyaga 200 minggacha ulanishni.
Realtime Database uzatilgan ma'lumotlar hajmiga (yuklab olingan bayt) va bir vaqtli ulanishlar soniga qarab tariflanadi. Firestore — operatsiyalar soniga qarab (o'qish, yozish, o'chirish). Tez-tez kichik yangilanishlar bo'lgan ilovalar (chat, bildirishnomalar) uchun Firestore odatda foydaliroq — har bir yozish operatsiyasi ma'lumotlar hajmidan qat'iy nazar belgilangan narxga ega. Katta hajmdagi ma'lumotlarni kamdan-kam o'qiydigan ilovalar uchun Realtime Database arzonroq bo'lishi mumkin.
Google (2026) tavsiyasi: yangi loyihalar uchun standart ma'lumotlar bazasi sifatida Firestore-dan, o'yinlar va minimal kechikish (50 ms dan kam) muhim bo'lgan va ma'lumotlar tuzilishi tekis bo'lgan ilovalar uchun Realtime Database-dan foydalaning. Ikkala ma'lumotlar bazasi bir loyihada bir vaqtda ishlashi mumkin.
Firestore so'rovlari filtrlash, tartiblash va limit bilan kolleksiyalar yoki kolleksiya guruhlarida bajariladi. Har bir so'rov mijoz tomonida filtr bilan butun JSON daraxtini aylanib chiqish bo'lgan Realtime Database-dan farqli o'laroq, Firestore barcha so'rovlarni serverda, oldindan yaratilgan indekslardan foydalanib bajaradi. Bu so'rov murakkabligi faqat natija hajmiga bog'liq bo'lishini, kolleksiya hajmiga bog'liq emasligini kafolatlaydi.
Firestore qo'llab-quvvatlaydi bir yoki bir necha maydon bo'yicha filtrlash (equality, range, in, array-contains, array-contains-any), o'sish va kamayish tartibida saralash, limit va sahifalash uchun kursorlar. Cheklovlar: turli maydonlar bo'yicha filtrlash bilan murakkab so'rovlar (where price > 10 AND where category == “books”) murakkab indeksni talab qiladi; OR so'rovlari taqiqlangan (o'rniga in va array-contains-any ishlatiladi) va turli maydonlar bo'yicha tengsizlik so'rovlari taqiqlangan.
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 yakka maydonlar uchun avtomatik indekslar yaratadi — bitta maydon bo'yicha so'rovlar hech qanday sozlamasiz ishlaydi. Ikki yoki undan ko'p maydonli so'rovlar uchun (filtrlash + saralash) murakkab indekslar yaratiladi. Birinchi so'rov yuborilganda, Firestore konsolga havola bilan xato qaytaradi, u erda indeksni bir tugma bilan yaratish mumkin. Ma'lumotlar bazasi uchun maksimum 200 murakkab indeks. Indekslar firebase CLI orqali eksport va import qilinishi mumkin.
Firestore-ni ulash Android ilovasiga Firebase BOM orqali standart tarzda amalga oshiriladi. firebase-firestore-ktx bog'liqligi qo'shilgandan so'ng, FirebaseFirestore obyekti getInstance() orqali mavjud bo'ladi — qo'shimcha kalitlar yoki tokenlarsiz. Firestore boshqa xizmatlar bilan bir xil Firebase loyihasidan foydalanadi.
dependencies {
implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
implementation("com.google.firebase:firebase-firestore-ktx")
}
// Initsiallashtirish
val db = FirebaseFirestore.getInstance()
Firestore ikkita o'qish rejimini ta'minlaydi: bir martalik (get) va real vaqt (addSnapshotListener). Bir martalik o'qish hujjatni bir marta oladi — sozlamalar va konfiguratsiya uchun foydali. Tinglovchi o'zgarishlarga obuna bo'ladi — hujjatning har qanday yangilanishi avtomatik ravishda barcha ulangan mijozlarga real vaqtda yangilangan ma'lumotlarni yetkazadi. set() hujjat yaratadi yoki qayta yozadi, update() butun hujjatni qayta yozmasdan faqat belgilangan maydonlarni o'zgartiradi.
Google (2026) ma'lumotlariga ko'ra, real vaqtda Firestore bilan o'rta hajmdagi ilovalar (100 ming DAU) oyiga taxminan 5-10 GB chiquvchi trafik iste'mol qiladi. Oflayn keshdan (Persistence Cache) foydalanish qayta yuklashlar hajmini 60-70% kamaytiradi, chunki SDK ulanish tiklanganda faqat o'zgartirilgan hujjatlarni yuklaydi.
Persistence Cache — Firestore-ning internetsiz ishlash uchun o'rnatilgan mexanizmi. SDK avtomatik ravishda barcha o'qilgan hujjatlarni qurilmada keshlaydi (Android-da 500 MiB gacha). Ulanish uzilganda, o'qish keshdan davom etadi, yozish navbatga qo'yiladi. Ulanish tiklanganda, barcha kechiktirilgan operatsiyalar serverga yuboriladi va kesh server bilan sinxronlanadi. Mojarolarni boshqarish uchun snapshot-metadata.hasPendingWrites va setOptions(ServerTimestampBehavior) ishlatiladi.
Security Rules — Firestore-ga kirishni chegaralash uchun deklarativ til bo'lib, har bir o'qish yoki yozish operatsiyasidan oldin Google serverida bajariladi. Rules server kodini talab qilmaydi — ular Firebase konsolida yoki firebase CLI orqali yoziladi va Git orqali versiyalanadi. Har bir operatsiya qoidalarga muvofiqlik uchun tekshiriladi va buzilish holatida PERMISSION_DENIED xatosi qaytariladi.
Firestore Security Rules qoidalari match bloklari va allow ifodalaridan iborat. match kolleksiya yoki hujjatga yo'lni belgilaydi, allow ruxsat etilgan operatsiyalarni (read, write, create, update, delete) va shartni — mantiqiy qiymat qaytaruvchi JavaScript-ga o'xshash ifodani belgilaydi. Qoidalar autentifikatsiyani (request.auth), so'rov ma'lumotlarini (request.resource.data), mavjud ma'lumotlarni (resource.data), vaqtni (request.time) va yo'lni (request.path) tekshirishi mumkin.
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 tomonida turlar va qiymatlarning validatsiyasini qo'llab-quvvatlaydi. Narx manfiy yoki nom bo'sh bo'lsa, yozish taqiqlanishi mumkin. Barcha tekshirishlar Google serverida yozishdan oldin bajariladi — bu mijozdan (Android, iOS, Web, Admin SDK) qat'iy nazar ma'lumotlar izchilligini kafolatlaydi. Rules zararli Admin SDK-dan himoya qilmaydi — u ta'rifiga ko'ra qoidalarni chetlab o'tadi. To'liq himoya uchun Transaction Functions va Firebase Extensions-dan foydalaning.
Tez-tez so'raladigan savollar
Firestore indekslar va murakkab so'rovlar bilan hujjat modelidan foydalanadi. Realtime Database ma'lumotlarni JSON daraxtida saqlaydi va kamroq kechikishni ta'minlaydi. Firestore yangi loyihalar uchun tavsiya etiladi.
Firestore avtomatik ravishda ma'lumotlarni kolleksiyalar bo'yicha shardlaydi — replikatsiya yoki sharding sozlamasi talab qilinmaydi. Baza kolleksiyada millionlab hujjatlar va minglab bir vaqtli ulanishlarni degradatsiyasiz bardosh beradi.
Ha, Firebase Console-dan foydalaning — “Export to Firestore” funksiyasi Realtime Database-ning JSON tuzilmasini bir necha marta bosish bilan Firestore kolleksiyalari va hujjatlariga aylantiradi. Ichki tugunlar ichki kolleksiyalarga aylanadi.
Last write wins — odatda, Firestore bir vaqtli yozishda mojarolarni hal qilish uchun “oxirgi yozuv g'alaba qozonadi” siyosatidan foydalanadi. Maxsus ishlov berish uchun qayta o'qish bilan tranzaksiyalardan foydalaning.
Bepul limit Spark tarifi: 1 GB xotira, kuniga 50 ming o'qish va 20 ming yozish operatsiyasi. Bu MVP va kam yuklamali ilovalar uchun yetarli.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.