Firebase Realtime DB — bu nima, arxitekturasi va JSON bilan ishlash

Muallif: IT Sectr Nashr etilgan: 2026-03-12 O'qish vaqti: 10 daq

Firebase Realtime Database — bu Google tomonidan 2012-yilda mobil va web ilovalar üçün ishga tushirilgan bulutli JSON real vaqt ma'lumotlar bazasidir. Barcha ma'lumotlar bitta katta JSON daraxtida saqlanadi va WebSocket ulanishi orqali ulangan mijozlar o'rtasida real vaqtda sinxronlashtiriladi. Rasmiy hujjatlarga ko'ra Firebase, 2025, Realtime Database 200 000 tagacha bir vaqtli ulanishlar va sekundiga 1000 tagacha bir vaqtli yozish operatsiyalarini qo'llab-quvvatlaydi. Ma'lumotlar bazasi server infratuzilmasini talab qilmaydi va iOS, Android, Web va server platformalari üçün SDK taqdim etadi.

Asosiy ma'lumotlar

  • Firebase Realtime DB — mijozlar o'rtasida real vaqtda ma'lumotlarni sinxronlashtirishga ega bulutli JSON ma'lumotlar bazasi.
  • Ma'lumotlar bitta JSON daraxti shaklida saqlanadi, har bir tugun noyob yo'l orqali mavjud.
  • O'rnatilgan oflayn rejimi ilovaga internetsiz ishlashga va ulanish tiklangandan so'ng o'zgarishlarni sinxronlashtirishga imkon beradi.
  • 200 000 tagacha bir vaqtli ulanishlar va sekundiga 1000 tagacha yozish operatsiyasini qo'llab-quvvatlaydi.
  • Ma'lumotlarga kirishni boshqarish üçün Firebase Authentication va moslashtirilgan xavfsizlik qoidalari bilan integratsiyalanadi.

Firebase Realtime Database nima?

Firebase Realtime Database — barcha ulangan mijozlar o'rtasida ma'lumotlarni real vaqtda saqlaydigan va sinxronlashtiradigan bulutli NoSQL ma'lumotlar bazasidir. 2012-yilda Firebase sifatida (Google tomonidan sotib olinishidan oldin) ishga tushirilgan bo'lib, mobil dasturchilar üçün birinchi bulutli real vaqt ma'lumotlar bazasi bo'ldi. Ma'lumotlar JSON formatida taqdim etiladi va ierarxik daraxtga tashkil etiladi, har bir tugun noyob yo'lga ega.

Realtime Database-ning asosiy qiymati — o'rnatilgan sinxronlashtirish. Ilova har qanday qurilmada ma'lumotlarni o'zgartirganda, boshqa barcha ulangan mijozlar doimiy ulanish orqali darhol yangilanishni oladi. Bu dasturchini o'z sinxronlashtirish mexanizmini, WebSocket serverini yoki mijozlar o'rtasida ma'lumot uzatish üçün REST API-ni amalga oshirishdan ozod qiladi.

Ma'lumotlar bazasi barcha asosiy platformalar üçün SDK taqdim etadi: Android (Java, Kotlin), iOS (Swift, Objective-C), Web (JavaScript) va Admin SDK orqali server muhitlari. Google ma'lumotlariga ko'ra, Realtime Database butun dunyo bo'ylab 1,5 milliondan ortiq faol Firebase loyihalarida qo'llaniladi. Zamonaviyroq Firestore paydo bo'lishiga qaramay, Realtime Database oddiy ma'lumotlar tuzilishiga ega loyihalar üçün mashhur tanlov bo'lib qolmoqda.

Ma'lumotlar tuzilishi: JSON daraxti

Relyatsion ma'lumotlar bazalaridan farqli o'laroq, Realtime Database jadvallar va qatorlardan foydalanmaydi. Barcha ma'lumotlar ichki joylashtirilgan JavaScript obyektlariga o'xshash bitta JSON daraxtini tashkil qiladi. Masalan, foydalanuvchilar va ularning xabarlarini saqlash üçün ierarxiya yaratiladi: users/userId/name va messages/messageId/text. Daraxtdagi har bir yo'l satr bo'lib, ma'lumotlarga to'g'ridan-to'g'ri shu yo'l orqali kirish mumkin.

json
{
  "users": {
    "user1": {
      "name": "Ivan Petrov",
      "email": "ivan@example.com"
    },
    "user2": {
      "name": "Mariya Sokolova",
      "email": "maria@example.com"
    }
  },
  "messages": {
    "-Nabc123": {
      "text": "Salom!",
      "userId": "user1"
    }
  }
}

Muhim xususiyat — chuqur ichki joylashtirish ishlashga ta'sir qiladi. Ilova ma'lum bir yo'lda ma'lumotlarni o'qiyotganda, shu yo'ldagi barcha bola tugunlarni yuklaydi. Shuning uchun ma'lumotlar tuzilishini iloji boricha tekis, 3–4 darajadan chuqur bo'lmagan holda loyihalash tavsiya etiladi. Ushbu muammoni hal qilish üçün ma'lumotlarni denormalizatsiya qilish — ma'lumotlarni daraxtning turli tugunlarida takrorlash qo'llaniladi.

Realtime Database vs Firestore: qachon tanlash

Realtime Database va Firestore ko'pincha Google-dan ikkita bulutli real vaqt ma'lumotlar bazasi sifatida taqqoslanadi. Ularning o'rtasida tanlov loyihaning aniq talablariga bog'liq: so'rovlarning murakkabligi, talab qilinadigan izchillik va rejalashtirilgan yuk. Har bir ma'lumotlar bazasining kuchli tomonlarini tushunish to'g'ri arxitektura qarorini qabul qilishga yordam beradi.

Realtime Database-ning asosiy ustunligi — past sinxronlashtirish kechikishi. Barcha ma'lumotlar qo'shimcha abstraksiya qatlamlarisiz bitta JSON daraxtida saqlanganligi sababli, sinxronlashtirish Firestore-ga qaraganda tezroq. Yangilanishlarni yetkazib berish tezligi muhim bo'lgan ilovalar üçün (chatlar, onlayn o'yinlar, birgalikda tahrirlash tizimlari) Realtime Database ko'proq mos kelishi mumkin.

Qachon Realtime Database dan foydalanish kerak

Realtime Database oddiy ma'lumotlar tuzilishi va yuqori yangilanish chastotasiga ega stsenariylar üçün ko'proq mos keladi. Oddiy misollar: chatlar, real vaqtdagi like'lar, yozish ko'rsatkichlari, foydalanuvchi mavjudligi holati. Bu shuningdek cheklangan byudjetli prototiplar va loyihalar üçün yaxshi tanlovdir, chunki narx belgilash operatsiyalar soniga emas, balki ma'lumotlar hajmiga asoslanadi.

Boshqa tomondan, murakkab so'rovlarga ega ilovalar üçün (bir nechta maydon bo'yicha filtrlash, saralash, agregatsiya) Firestore ancha kuchli imkoniyatlarni taqdim etadi. Realtime Database faqat bitta parametr bo'yicha filtrlashni qo'llab-quvvatlaydi va natijalarni bir vaqtning o'zida bir nechta maydon bo'yicha saralay olmaydi. Agar loyiha mijoz tomonida murakkab ma'lumotlar analitikasini rejalashtirsa, Firestore ko'proq amaliy tanlov bo'ladi.

Realtime Database-da sinxronlashtirish qanday ishlaydi

Realtime Database ikki tomonlama ma'lumotlarni sinxronlashtirish üçün doimiy WebSocket ulanishidan foydalanadi. Mijoz ma'lum bir yo'lda setValue yoki updateChildren ni chaqirganda, ma'lumotlar ochiq kanal orqali Firebase serveriga yuboriladi. Serber o'zgarishlarni qo'llaydi va yangilanishlarni barcha obuna bo'lgan mijozlarga millisekundlar ichida tarqatadi. Har bir ulanish noyob sessiya kaliti bilan aniqlanadi.

Obuna mexanizmi listenerlar orqali ishlaydi. Dasturchi ma'lum bir tugunning o'zgarishiga obuna bo'lishi (addListenerForSingleValueEvent) yoki doimiy yangilanishlarni olishi mumkin (addValueEventListener). Har bir ma'lumot o'zgarishida belgilangan yo'lda to'liq ma'lumotlar tasviri bilan onDataChange callback-i chaqiriladi. Bu Firestore-dan farq qiladi, u yerda faqat o'zgartirilgan hujjatlar keladi — Realtime Database-da har doim tugunning barcha ma'lumotlari yuklanadi.

Oflayn rejim va mojarolarni boshqarish

Realtime Database disk keshlash orqali Android va iOS da oflayn rejimni qo'llab-quvvatlaydi. SDK ma'lumotlarning mahalliy nusxasini saqlaydi va tarmoq bo'lmaganda yozish operatsiyalarini qayta ishlashni davom ettiradi. Ulanish tiklanganda, barcha to'plangan o'zgarishlar serverga yuboriladi. Mojarolarni hal qilish üçün last-write-wins strategiyasi qo'llaniladi, ammo dasturchi to'qnashuvlarni hal qilish üçün ServerValue.TIMESTAMP orqali moslashtirilgan mantiqni amalga oshirishi mumkin.

kotlin
val database = FirebaseDatabase.getInstance()
val myRef = database.getReference("messages")

// Ma'lumot yozish
myRef.push().setValue(
    hashMapOf(
        "text" to "Yangi xabar",
        "timestamp" to ServerValue.TIMESTAMP
    )
)

// Doimiy yangilanish bilan o'qish
myRef.addValueEventListener(object : ValueEventListener {
    override fun onDataChange(snapshot: DataSnapshot) {
        val data = snapshot.getValue()
        Log.d("TAG", "Ma'lumotlar: $data")
    }

    override fun onCancelled(error: DatabaseError) {
        Log.w("TAG", "Xato: ${error.message}")
    }
})

Trafik va ishlashni optimallashtirish üçün ma'lum bola tugunlarning o'zgarishlarini kuzatish kerak bo'lganda, value listeners o'rniga child listeners dan foydalanish tavsiya etiladi. ChildEventListener bola elementlarni qo'shish, o'zgartirish, o'chirish va ko'chirish üçün alohida callback-larni taqdim etadi, bu esa UI yangilanishlarini aniqroq boshqarish va har bir ma'lumot o'zgarishida barcha ro'yxat elementlarini qayta chizishning oldini olish imkonini beradi.

Xavfsizlik qoidalari va ma'lumotlarni tekshirish

Realtime Database ma'lumotlarga kirishni boshqarish üçün deklarativ qoidalar tilidan foydalanadi. Qoidalar JSON daraxtining har bir yo'lida ma'lumotlarni kim o'qishi va yozishi mumkinligini tavsiflaydi. Ular har bir so'rovdan oldin Firebase serverida tekshiriladi va avtorizatsiya üçün server mantig'ini talab qilmaydi. Qoidalar moslashuvchan kirish konfiguratsiyasi üçün o'zgaruvchilar, o'rnatilgan obyektlar va funksiyalarni qo'llab-quvvatlaydi.

Sukut bo'yicha ma'lumotlar bazasiga kirish barcha foydalanuvchilar üçün taqiqlangan. Dasturchi daraxtning turli darajalarida ".read" va ".write" qoidalaridan foydalanib, asta-sekin kirishni ochadi. Shartlar auth o'zgaruvchisi orqali autentifikatsiyani, so'rov turini (read/write) va data obyekti orqali mavjud ma'lumotlarni tekshirishi mumkin. Bundan tashqari, qoidalar newData obyekti orqali yoziladigan ma'lumotlarni tekshirishni qo'llab-quvvatlaydi.

js
{
  "rules": {
    "users": {
      "$uid": {
        // Faqat egasi o'z ma'lumotlarini o'qiy oladi
        ".read": "$uid === auth.uid",
        // Faqat egasi yoza oladi
        ".write": "$uid === auth.uid",
        // Yozishda maydonlarni tekshirish
        ".validate": "newData.hasChildren(['name', 'email'])"
      }
    },
    "messages": {
      // Har qanday autentifikatsiyalangan o'qiy oladi
      ".read": "auth !== null",
      // Faqat autentifikatsiyalangan yoza oladi
      ".write": "auth !== null",
      ".indexOn": ["timestamp"]
    }
  }
}

Qoidalar shuningdek ".indexOn" direktivasi orqali ma'lumotlarni indekslashni qo'llab-quvvatlaydi. Usiz saralash bilan so'rovlar (orderByChild) rad etiladi yoki samarasiz bajariladi. Indekslar ma'lum bir maydon bo'yicha saralash amalga oshiriladigan har bir yo'l üçün belgilanadi. Qoidalar kaskadli: chuqurroq qoidalar ota-ona qoidalarini bekor qiladi va agar biror darajada kirish bo'lmasa, u ota-ona qoidasiga qarab ruxsat etilgan yoki taqiqlangan deb hisoblanadi.

Ma'lumotlar turlari va cheklovlar

Realtime Database beshta ma'lumot turini qo'llab-quvvatlaydi: String, Number, Boolean, Map (obyekt) va List (massiv). Ichki joylashtirish chuqurligi 32 daraja bilan cheklangan va bitta tugunning maksimal hajmi 256 MB dan oshmasligi kerak. Ma'lumotlar bazasi bilan samarali ishlash üçün tekis ma'lumotlar tuzilmasini loyihalash va katta hajmdagi ma'lumotlarni yuklaydigan chuqur so'rovlardan qochish üçün denormalizatsiyadan foydalanish tavsiya etiladi.

Android-da Realtime Database dan foydalanish misoli

Foydalanuvchi holatlari (online/offline) üçün Android ilovasida Realtime Database integratsiyasining amaliy misolini ko'rib chiqaylik. Ilova foydalanuvchilar ro'yxatini ularning real vaqtda yangilanadigan joriy holati bilan ko'rsatadi. Namoyish üçün foydalanuvchilarni aniqlash üçün Firebase Authentication va asinxron operatsiyalar üçün koroutinlardan foydalaniladi.

Bog'liqliklarni sozlash va ishga tushirish

Boshlash üçün ilova modulining build.gradle fayliga firebase-database-ktx bog'liqligini qo'shing. Kutubxona versiyasi barcha komponentlarning mosligini ta'minlash üçün Firebase BoM orqali boshqariladi. Bog'liqlikni qo'shgandan so'ng, Firebase-ni Application sinfida yoki ViewModel-dagi kech ishga tushirish orqali ishga tushirish kerak.

groovy
dependencies {
    implementation platform("com.google.firebase:firebase-bom:33.0.0")
    implementation "com.google.firebase:firebase-database-ktx"
    implementation "com.google.firebase:firebase-auth-ktx"
}

Sozlamadan so'ng foydalanuvchilar bilan ishlash üçün repository yaratiladi. Har bir foydalanuvchi name, email va status maydonlari bilan /users/{uid} daraxtidagi tugun orqali ifodalanadi. Holatni kuzatish üçün onDisconnect — mijoz ulanishi uzilganda avtomatik ravishda yozish operatsiyasini bajaradigan maxsus Firebase mexanizmi qo'llaniladi. Bu ilova yopilganda yoki tarmoq yo'qolganda mijoz tomonida qo'shimcha kodsiz foydalanuvchi holatining "offline" ga o'zgarishini kafolatlaydi.

kotlin
class PresenceRepository {
    private val database = FirebaseDatabase.getInstance()
    private val auth = FirebaseAuth.getInstance()
    private val presenceRef = database
        .getReference("presence")

    fun trackPresence() {
        val uid = auth.currentUser?.uid ?: return
        val userRef = presenceRef.child(uid)

        userRef.onDisconnect().setValue("offline")
        userRef.setValue("online")
    }

    fun getPresenceStream(): Flow<Map<String, String>> =
        presenceRef.snapshotFlow()
            .map { snapshot ->
                (snapshot.value as? Map<*, *>)
                    ?.mapKeys { it.key.toString() }
                    ?.mapValues { it.value.toString() }
                    ?: emptyMap()
            }
}

Misolning asosiy elementi onDisconnect dir. Bu mexanizm mijoz ulanishi uzilganda serverda bajariladigan yozish operatsiyasini o'rnatish imkonini beradi. Bu holda foydalanuvchi uzilganda, uning holati ilovaning yopilish hodisasini qayta ishlashga hojat qolmasdan avtomatik ravishda "offline" ga o'rnatiladi. Agar ilova kutilmaganda tugasa, Firebase o'zi onDisconnect operatsiyasini bajaradi va boshqa foydalanuvchilar to'g'ri holatni ko'rishadi.

Tez-tez beriladigan savollar

Firebase Realtime Database va Firestore o'rtasidagi farq nima?

Realtime Database ma'lumotlarni bitta JSON daraxtida saqlaydi va pastroq sinxronlashtirish kechikishini ta'minlaydi. Firestore hujjatlar to'plamlaridan foydalanadi, murakkab so'rovlar va kuchli izchillikni qo'llab-quvvatlaydi. Realtime Database oddiy chatlar va holatlar üçün yaxshiroq, Firestore — murakkab ma'lumotlar tuzilishi va analitikaga ega ilovalar üçün.

Realtime Database-da maksimal ma'lumot hajmi qancha?

Realtime Database da bitta tugunning maksimal hajmi 256 MB. Ichki joylashtirish chuqurligi 32 daraja bilan cheklangan. Bitta Firebase loyihasi üçün bir nechta Realtime Database ma'lumotlar bazasi yaratilishi mumkin (Spark rejasida 5 tagacha va Blaze rejasida 100 tagacha), bu ma'lumotlarni turli instansiyalar o'rtasida taqsimlash imkonini beradi.

Realtime Database-da autentifikatsiya qanday ishlaydi?

Realtime Database Firebase Authentication bilan integratsiyalanadi. Xavfsizlik qoidalarida autentifikatsiyalangan foydalanuvchining uid-sini o'z ichiga olgan auth o'zgaruvchisi mavjud. Dasturchi ma'lumotlar egasining uid mosligini tekshirib, JSON daraxtining alohida tugunlari darajasida kirishni cheklashi mumkin. Anonim va autentifikatsiyalanmagan foydalanuvchilar auth = null ga ega.

Realtime Database tranzaksiyalarni qo'llab-quvvatlaydimi?

Ha, Realtime Database runTransaction metodi orqali tranzaksiyalarni qo'llab-quvvatlaydi. Tranzaksiya bitta tugun üçün o'qish-o'zgartirish-yozish operatsiyasining atomarligini kafolatlaydi. Bir vaqtli o'zgarishlarda tranzaksiya joriy ma'lumotlar bilan takrorlanadi. Bu hisoblagichlar, reytinglar va ma'lumotlar izchilligi muhim bo'lgan boshqa stsenariylar üçün foydalidir.

Realtime Database dan internetsiz foydalanish mumkinmi?

Ha, Realtime Database Android va iOS da oflayn rejimni qo'llab-quvvatlaydi. SDK ma'lumotlarni mahalliy keshlaydi va tarmoq bo'lmaganda yozish operatsiyalarini qayta ishlashni davom ettiradi. Ulanish tiklangandan so'ng barcha to'plangan o'zgarishlar server bilan sinxronlashtiriladi. Oflayn rejimni yoqish üçün tegishli tugunda keepSynced(true) metodidan foydalaniladi.

Xulosa

  • Firebase Realtime Database — WebSocket orqali mijozlar o'rtasida real vaqtda sinxronlashtirishga ega bulutli JSON ma'lumotlar bazasi.
  • Ma'lumotlar ierarxik tuzilishga ega JSON daraxtida saqlanadi va har bir tugunga noyob yo'llar orqali kirish mumkin.
  • Disk keshli o'rnatilgan oflayn rejimi ilovaga internet ulanishisiz ishlash imkonini beradi.
  • onDisconnect mexanizmi ulanish uzilganda avtomatik ravishda operatsiyalarni bajaradi — mavjudlik holati üçün ideal.
  • Xavfsizlik qoidalari va ma'lumotlarni tekshirish server kodisiz deklarativ tarzda sozlanadi.
  • Narx belgilash operatsiyalar soniga emas, balki ma'lumotlar hajmiga asoslanadi, bu tez-tez yangilanadigan ilovalar üçün foydali.
  • Oddiy ma'lumotlar tuzilishi va minimal kechikish talablari bo'lgan loyihalar üçün Realtime Database optimal tanlov bo'lib qolmoqda.

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.

Loyihani muhokama qilish

Shuningdek o'qing