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 — 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.
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.
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.
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.
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.
| Yondashuv | Tuzilish namunasi | Muammo |
|---|---|---|
| Ichma-ich | users/{uid}/posts/{postId}/content | User o'qish barcha postlarni yuklaydi |
| Tekis | posts/{postId}/authorId + users/{uid}/name | Ikki so'rov talab qiladi |
| Denormalizatsiya | posts/{postId}/authorName (nusxalangan) | Yangilashda dublikatsiya |
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 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.
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 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.
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")
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.
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) }
}
}
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 — 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).
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.
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.
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.
{
"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"
}
}
}
}
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
Bitta ma'lumotlar bazasi instansiyasiga 200 minggacha bir vaqtda ulanish. Limit oshib ketganda yangi ulanishlar bloklanadi. Masshtablash uchun bir nechta bazalarga sharding qo'llaniladi.
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.
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.
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.
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
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.