Firebase Realtime Database: bu nima, JSON tuzilishi va sinxronlash

Muallif: IT Sectr Nashr etilgan: 2026-04-28 O'qish vaqti: 10 daq

Firebase Realtime Database — doimiy WebSocket ulanishi orqali o'zgarishlarni real vaqtda sinxronlashtiruvchi Google-ning bulutli NoSQL ma'lumotlar bazasidir. Ma'lumotlar yagona JSON daraxti sifatida saqlanadi va har qanday tugunning har qanday o'zgarishi darhol barcha ulangan mijozlarga yetkaziladi. Google, 2026 ma'lumotlariga ko'ra, Realtime Database bitta instansiyaga 200 mingtagacha bir vaqtda ulanishni qo'llab-quvvatlaydi. Xizmat oyiga 1 GB saqlash va 10 GB trafik bilan bepul limit bilan taqdim etiladi.

Asosiy fikrlar

  • Firebase Realtime Database — WebSocket orqali real vaqtda o'zgarishlarni sinxronlashtiruvchi bulutli JSON daraxti.
  • Ma'lumotlar oflayn mavjud — SDK oxirgi holatni keshlaydi va ulanish tiklanganda sinxronlashadi.
  • Bitta ma'lumotlar bazasi instansiyasiga 200 minggacha bir vaqtda ulanishni qo'llab-quvvatlaydi.
  • Ma'lumotlar tuzilishi — yagona JSON daraxti, bu o'qishni soddalashtiradi, ammo unumdorlik uchun tekis normalizatsiyani talab qiladi.
  • Narxlash ma'lumotlar hajmiga va bir vaqtda ulanishlar soniga asoslanadi, operatsiyalar soniga emas.

Firebase Realtime Database nima

Firebase Realtime Database — Google tomonidan 2012-yilda Firebase bilan birga ishga tushirilgan birinchi real vaqtli bulutli ma'lumotlar bazalaridan biridir. Bu NoSQL baza bo'lib, ma'lumotlar bitta URL orqali mavjud bo'lgan yagona JSON daraxti sifatida saqlanadi. Mijoz SDK-lari (Android, iOS, Web) WebSocket orqali daraxtning ma'lum tugunlariga obuna bo'ladi va har bir ma'lumot o'zgarishida yangilanishlarni oladi — serverni ping qilmasdan va o'z Push mexanizmini amalga oshirmasdan.

Tarix va rivojlanish

Asl Firebase 2011-yilda Jeyms Templin va Endryu Li tomonidan asos solingan va birinchi mahsulot aynan Realtime Database edi. Google tomonidan 2014-yilda sotib olingandan so'ng (TechCrunch ma'lumotlariga ko'ra — 50-100 million dollar oralig'ida), baza Google Cloud-ga integratsiya qilindi va sezilarli darajada yuqori o'tkazish qobiliyatiga ega bo'ldi. 2017-yilda Google Firestore-ni evolyutsion o'rnini bosuvchi sifatida e'lon qildi, ammo Realtime Database faol qo'llab-quvvatlanmoqda va yangilanmoqda. Google (2026) ma'lumotlariga ko'ra, Realtime Database hali ham 1,5 milliondan ortiq faol loyihalarda qo'llaniladi.

Bepul limitlar va tariflar

Spark tarifi (bepul) o'z ichiga oladi: 1 GB saqlash, oyiga 10 GB yuklab olingan ma'lumotlar, 100 bir vaqtda ulanish va bitta mintaqada ma'lumotlar bazasini qo'llab-quvvatlash. Blaze tarifida (pay-as-you-go) qo'shimcha saqlash (1 $/GB), trafik (0,12 $/GB) va bir vaqtda ulanishlar (har 100 mingdan keyin 5 $) uchun to'lov olinadi. Test uchun emulyatsiya rejimi ham mavjud — firebase emulators:start — bulutga ulanmasdan Realtime Database-ni mahalliy ravishda ishga tushiradi.

Ma'lumotlar tuzilishi: JSON daraxti va normalizatsiya

Realtime Database jadvallar, to'plamlar yoki hujjatlarga ega emas — hamma narsa https://project-name-default-rtdb.firebaseio.com/ manzilida mavjud bo'lgan yagona JSON daraxtidir. Daraxtning har bir kaliti yoki yakuniy qiymat (satr, raqam, boolean, null) yoki ichki tugun bilan birga keladi. Ma'lumotlar bazasi dvigateli JOIN, pastki so'rovlar yoki agregatsiyalarni qo'llab-quvvatlamaydi — so'rov har doim barcha ichki elementlari bilan birga bitta tugunning mazmunini qaytaradi.

Ma'lumotlarni normalizatsiyalash

Realtime Database-da JOIN yo'qligi sababli, ma'lumotlarni normalizatsiyalash majburiydir. Ichma-ich daraxt (foydalanuvchi → uning postlari ro'yxati) o'rniga ma'lumotlar kalitlar orqali havolalar bilan tekis ro'yxatlarga bo'linadi. Bu standart yondashuv: ma'lumotlar denormalizatsiya qilinadi, shunda bitta tugunni o'qish butun kontekstni tortib olmaydi. Masalan, chat xabarlari ro'yxati foydalanuvchi profillaridan alohida saqlanadi va har bir post faqat muallifning ID-sini o'z ichiga oladi, butun profilini emas.

YondashuvTuzilish namunasiMuammo
Ichma-ichusers/{uid}/posts/{postId}/contentUser o'qish barcha postlarni yuklaydi
Tekisposts/{postId}/authorId + users/{uid}/nameIkki so'rov talab qiladi
Denormalizatsiyaposts/{postId}/authorName (nusxalangan)Yangilashda dublikatsiya

Realtime Database-da so'rovlar

So'rovlar Realtime Database-da filter (orderByChild, orderByKey, orderByValue, limitToFirst, limitToLast, equalTo, startAt, endAt) yordamida bajariladi. Firestore-dan farqli o'laroq, indekslar Rules bo'limi (.indexOn) orqali qo'lda yaratiladi. Agar indeks e'lon qilinmagan bo'lsa, saralash bilan so'rov PERMISSION_DENIED xatosini qaytaradi. So'rovlar faqat bitta maydon bo'yicha ishlaydi — murakkab so'rovlar (narx bo'yicha filtr + sana bo'yicha saralash) qo'llab-quvvatlanmaydi. Murakkab filtrlash uchun ma'lumotlar ko'pincha turli xil saralash kalitlari bilan turli tugunlarda dublikatsiya qilinadi.

Realtime Database vs Firestore: nimani tanlash

Realtime Database va Firestore o'rtasidagi tanlov loyihani boshlashda tez-tez uchraydigan arxitektura qarorlaridan biridir. Google yangi ilovalarning aksariyati uchun Firestore-ni tavsiya qiladi, ammo Realtime Database ma'lumotlarni uzatishda minimal kechikish muhim bo'lgan stsenariylar uchun eng yaxshi tanlov bo'lib qolmoqda.

Realtime Database uchun uchta asosiy stsenariy

Birinchi stsenariy — holat sinxronlash bilan ko'p foydalanuvchili o'yinlar (shaxmat, karta o'yinlari, real vaqt harakatlari). Realtime Database kechikishi bir mintaqada Firestore uchun 50-100 ms ga nisbatan 10-30 ms ni tashkil qiladi. Ikkinchi stsenariy — yuqori chastotali xabarlar bilan chatlar va messenjerlar. Realtime Database ma'lumotlar hajmiga qarab tariflanadi, yozishlar soniga emas, bu uni soniyada 1 xabardan ortiq chastotada Firestore-dan sezilarli darajada arzon qiladi. Uchinchi stsenariy — foydalanuvchilarning online/oflayn ishtiroki (presence), bu erda Realtime Database-ning onDisconnect ishlovchilari ulanish uzilganda holatni atomik ravishda o'rnatishga imkon beradi.

Google (2026) ma'lumotlariga ko'ra, yangi Firebase loyihalarining taxminan 15% ongli ravishda Realtime Database-ni tanlaydi — jamoa kechikish, ma'lumotlar tuzilishi va byudjet talablarini aniq tushunganda. Qolgan 85% hollarda Firestore yaxshiroq masshtablash, kuchliroq so'rovlar va avtomatik replikatsiya tufayli xavfsizroq tanlovdir.

Realtime Database-ni Android-ga integratsiyalash

Realtime Database-ni ulash Android ilovasiga build.gradle fayliga firebase-database-ktx bog'liqligini qo'shish orqali amalga oshiriladi. FirebaseDatabase obyekti getInstance(url) orqali mavjud — bitta Firebase loyihasi doirasida bir nechta bazalarga ulanish mumkin. Inisializatsiyadan so'ng SDK avtomatik ravishda server bilan WebSocket ulanishini o'rnatadi va ma'lumotlarni sinxronlashni boshlaydi.

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

// Maxsus URL bilan inisializatsiya
val database = FirebaseDatabase.getInstance(
    "https://my-project-default-rtdb.firebaseio.com/"
)
val ref = database.getReference("chats")

Ma'lumotlarni yozish va o'qish

Realtime Database barcha operatsiyalar uchun DatabaseReference obyektidan foydalanadi. setValue() ko'rsatilgan tugunga ma'lumotlarni yozadi, uning barcha mazmunini to'liq almashtiradi. push() ro'yxatga element qo'shish uchun avtomatik ravishda noyob kalit yaratadi (vaqt tamg'asi asosida) — bu chat xabarlari, postlar va yozuvlarni yaratishning standart usulidir. updateChildren() bir operatsiyada bir nechta tugunlarni atomik ravishda o'zgartiradi. addValueEventListener tugundagi o'zgarishlarga obuna bo'ladi va har bir ma'lumot yangilanishida callback oladi.

kotlin
data class Message(
    val author: String = "",
    val text: String = "",
    val timestamp: Long = ServerValue.TIMESTAMP
)

class ChatRepository(private val ref: DatabaseReference) {
    fun sendMessage(author: String, text: String) {
        val msg = Message(author = author, text = text)
        ref.child("messages").push().setValue(msg)
    }

    fun observeMessages(): Flow<List<Message>> = callbackFlow {
        val listener = ref.child("messages")
            .addValueEventListener(object : ValueEventListener {
                override fun onDataChange(snapshot: DataSnapshot) {
                    val messages = snapshot.children.mapNotNull { it.getValue(Message::class.java) }
                    trySend(messages)
                }
                override fun onCancelled(error: DatabaseError) {}
            })
        awaitClose { ref.removeEventListener(listener) }
    }
}

Real vaqt sinxronlash va oflayn rejim

Sinxronlash mexanizmi Realtime Database WebSocket protokoliga asoslangan (ilgari — long-polling). Mijoz ma'lum bir tugunga obuna bo'lish uchun so'rov yuboradi va server ulanishni ochiq ushlab turadi. Obuna bo'lingan tugundagi har qanday ma'lumot o'zgarishida server mijozga ushbu tugunning to'liq JSON-ni yuboradi. Mijoz tomonida SDK avtomatik ravishda mahalliy holatni yangilaydi va tegishli callback-larni (onDataChange) chaqiradi.

OnDisconnect — uzilish triggerlari

OnDisconnect — Firestore-da mavjud bo'lmagan, Realtime Database-ning noyob imkoniyatidir. Dasturchi mijoz ulanishi uzilganda serverda avtomatik ravishda bajariladigan yozish operatsiyasini ro'yxatdan o'tkazishi mumkin. Bu ishtirok holatlari uchun ishlatiladi: "user123/status": "online" onDisconnect.setValue("offline") bilan. Agar foydalanuvchi ilovani yopgan yoki internetni yo'qotgan bo'lsa, server avtomatik ravishda holatni "offline" qilib o'rnatadi, eng ko'pi 3 daqiqa ichida (Firebase konsolida sozlanishi mumkin).

Oflayn kesh

Persistence Realtime Database-da bir qator bilan faollashtiriladi: FirebaseDatabase.getInstance().setPersistenceEnabled(true). SDK barcha obuna bo'lingan tugunlarning oxirgi holatini diskda keshlaydi (standart 10 MiB gacha, 100 MiB gacha sozlanishi mumkin). Ulanish yo'qolganda, mijoz keshlangan ma'lumotlar bilan ishlashni davom ettiradi va barcha yozish operatsiyalari navbatga qo'yiladi. Ulanish tiklanganda, SDK barcha to'plangan o'zgarishlarni to'g'ri tartibda (FIFO) serverga yuboradi.

Google (2026) ma'lumotlariga ko'ra, persistence keshi yoqilgan ilovalar ulanish uzilganda foydalanuvchi ma'lumotlarini 40% kamroq yo'qotadi. Biroq, agar mijoz 1000 dan ortiq kechiktirilgan operatsiyalarni to'plagan bo'lsa, server ularning barchasini rad etishi va to'liq sinxronlashni talab qilishi mumkin — bu eskirgan mijozlarga qarshi himoya mexanizmidir.

Xavfsizlik qoidalari va validatsiya

Security Rules Realtime Database-da kim va qanday sharoitlarda har bir tugunda ma'lumotlarni o'qishi va yozishi mumkinligini tavsiflovchi JSON konfiguratsiyasidir. Qoidalar Google serverida ishlaydi va har bir operatsiyadan oldin bajariladi. Standart (ishlab chiqarishda) qoidalarni "yopiq" rejimda o'rnatish tavsiya etiladi — faqat autentifikatsiya qilingan foydalanuvchilar kirish huquqiga ega.

Rules tuzilishi

Realtime Database qoidalari .read, .write, .validate, .indexOn bo'limlari bilan JSON formatida yoziladi. Firestore-dan (match sintaksisidan foydalanadigan) farqli o'laroq, Realtime Database ma'lumotlar tuzilishini takrorlaydigan ichma-ich obyektlardan foydalanadi. Shartlar auth (autentifikatsiya), data (mavjud ma'lumotlar), newData (yozishda yangi ma'lumotlar) va now (server vaqti) ni tekshiradi. Validatsiya qoidalari (.validate) turlarni, qiymat diapazonlarini va ma'lumotlar tuzilishini tekshirishga imkon beradi.

javascript
{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth.uid === $uid",
        ".write": "auth.uid === $uid",
        ".validate": "newData.hasChildren(['name', 'email'])"
      }
    },
    "messages": {
      ".indexOn": ["timestamp"],
      "$msgId": {
        ".read": true,
        ".write": "auth.uid !== null",
        ".validate": "newData.child('text').isString() && newData.child('text').val().length <= 500"
      }
    }
  }
}

Kaskad harakat va rules testi

Realtime Database qoidalari kaskad bo'lib meros qilib olinadi — yuqori darajada .read = false bo'lsa, barcha quyi tugunlar o'z qoidalaridan qat'iy nazar o'qish uchun mavjud emas. Firebase konsolda qoidalar simulyatorini taqdim etadi, bu erda joylashtirishdan oldin turli auth tokenlari bilan operatsiyalarni sinab ko'rish mumkin. Qoidalarni har doim simulyatorda sinab ko'rish tavsiya etiladi — qoidadagi xato barcha foydalanuvchilarning shaxsiy ma'lumotlariga kirishni ochib qo'yishi mumkin. Google (2026) ma'lumotlariga ko'ra, Firebase loyihalaridagi ma'lumot sizib chiqishlarining 40% noto'g'ri sozlangan xavfsizlik qoidalari tufayli yuz beradi.

Tez-tez beriladigan savollar

Realtime Database nechta bir vaqtda ulanishni qo'llab-quvvatlaydi?

Bitta ma'lumotlar bazasi instansiyasiga 200 minggacha bir vaqtda ulanish. Limit oshib ketganda yangi ulanishlar bloklanadi. Masshtablash uchun bir nechta bazalarga sharding qo'llaniladi.

Foydalanuvchilarning online/oflayn ishtirokini qanday amalga oshirish mumkin?

OnDisconnect dan foydalaning — ulanish uzilganda "offline" yozish operatsiyasini ro'yxatdan o'tkazing. Server WebSocket uzilganda uni avtomatik bajaradi. Alohida .info/connected orqali ulanishni kuzatib boring.

Nega so'rovlarim ma'lumot qaytarmayapti?

Security Rules-da .indexOn ni tekshiring — e'lon qilingan indekssiz orderByChild bilan so'rov PERMISSION_DENIED qaytaradi. Shuningdek ma'lumotlar to'g'ri tugunga yozilganligiga va o'quvchining .read ruxsati borligiga ishonch hosil qiling.

Realtime Database-dan Firestore-ga ma'lumotlarni qanday ko'chirish mumkin?

Firebase Console Realtime Database-dan Firestore-ga bir tugma bilan eksport qilish imkonini beradi. JSON tuzilishi to'plamlar va hujjatlarga aylantiriladi. Maxsus migratsiya uchun Admin SDK dan foydalaning.

Realtime Database parollarni saqlash uchun xavfsizmi?

Yo'q, Realtime Database-da parollarni saqlash Google xavfsizlik qoidalari bilan taqiqlangan. Autentifikatsiya uchun Firebase Auth dan foydalaning — parol heshlari Realtime Database SDK orqali mavjud bo'lmagan izolyatsiya qilingan omborda saqlanadi.

Xulosa

  • Firebase Realtime Database — Google tomonidan 2012-yilda taqdim etilgan, WebSocket orqali real vaqtda sinxronlash bilan NoSQL JSON daraxti.
  • Ma'lumotlar JOIN va murakkab so'rovlarni qo'llab-quvvatlamaslik tufayli kalitlar orqali havolalar bilan tekis ro'yxatlarga normalizatsiya qilinadi.
  • OnDisconnect — mijoz ulanishi uzilganda ishtirok holatini atomik yozish uchun noyob mexanizm.
  • SMS tekshiruvi va operatsiyalar navbati bilan 10 MiB gacha oflayn kesh ilovaning internetsiz ishlashiga va tiklanganda sinxronlashiga imkon beradi.
  • Security Rules — .validate orqali turlar va qiymatlarni validatsiya qilishni qo'llab-quvvatlovchi kaskad kirish huquqi tizimi.
  • O'yinlar, chatlar va presence stsenariylari uchun tavsiya etiladi — ma'lumotlarni uzatishda minimal kechikishga sezgir ilovalar.
  • Narxlash Firestore-dagi kabi operatsiyalar soniga emas, balki saqlash hajmiga, yuklab olingan trafikka va bir vaqtda ulanishlarga asoslanadi.

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