Firebase Realtime DB — bu nədir, arxitekturası və JSON ilə iş

Müəllif: IT Sectr Dərc olunub: 2026-03-12 Oxuma vaxtı: 10 dəq

Firebase Realtime Database — 2012-ci ildə Google tərəfindən mobil və web tətbiqlər üçün yaradılmış bulud JSON real vaxt məlumat bazasıdır. Bütün məlumatlar bir böyük JSON ağacında saxlanılır və WebSocket əlaqəsi vasitəsilə qoşulmuş müştərilər arasında real vaxtda sinxronlaşdırılır. Rəsmi sənədlərə Firebase, 2025 əsasən, Realtime Database 200 000-ə qədər eyni vaxtlı əlaqə və saniyədə 1000-ə qədər yazma əməliyyatını dəstəkləyir. Məlumat bazası server infrastrukturu tələb etmir və iOS, Android, Web və server platformaları üçün SDK təqdim edir.

Başlıca məqamlar

  • Firebase Realtime DB — müştərilər arasında real vaxtda məlumat sinxronizasiyası olan bulud JSON məlumat bazasıdır.
  • Məlumatlar unikal yolla əlçatan olan hər bir qovşağı olan bir JSON ağacı şəklində saxlanılır.
  • Daxili oflayn rejimi tətbiqin internet olmadan işləməsinə və əlaqə bərpa edildikdən sonra dəyişiklikləri sinxronlaşdırmasına imkan verir.
  • 200 000-ə qədər eyni vaxtlı qoşulma və saniyədə 1000 yazma əməliyyatını dəstəkləyir.
  • Məlumatlara girişi idarə etmək üçün Firebase Authentication və fərdi təhlükəsizlik qaydaları ilə inteqrasiya edir.

Firebase Realtime Database nədir?

Firebase Realtime Database — bütün qoşulmuş müştərilər arasında məlumatları real vaxtda saxlayan və sinxronlaşdıran bulud NoSQL məlumat bazasıdır. 2012-ci ildə Firebase kimi (Google tərəfindən satın alınmazdan əvvəl) yaradılmışdır və mobil tərtibatçılar üçün ilk bulud real vaxt məlumat bazası olmuşdur. Məlumatlar JSON formatında təqdim edilir və hər bir qovşağın unikal yolu olan iyerarxik ağaca təşkil olunur.

Realtime Database-in əsas dəyəri — daxili sinxronizasiyadır. Tətbiq hər hansı bir cihazda məlumatları dəyişdikdə, bütün digər qoşulmuş müştərilər daimi əlaqə vasitəsilə dərhal yeniləmə alırlar. Bu, tərtibatçını öz sinxronizasiya mexanizmini, WebSocket serverini və ya müştərilər arasında məlumat ötürmək üçün REST API-ni tətbiq etməkdən azad edir.

Məlumat bazası bütün əsas platformalar üçün SDK təqdim edir: Android (Java, Kotlin), iOS (Swift, Objective-C), Web (JavaScript) və Admin SDK vasitəsilə server mühitləri. Google məlumatlarına görə, Realtime Database bütün dünyada 1,5 milyondan çox aktiv Firebase layihəsində istifadə olunur. Daha müasir Firestore-un yaranmasına baxmayaraq, Realtime Database sadə məlumat strukturu olan layihələr üçün məşhur seçim olaraq qalır.

Məlumat strukturu: JSON ağacı

Relyasiya məlumat bazalarından fərqli olaraq, Realtime Database cədvəl və sətirlərdən istifadə etmir. Bütün məlumatlar iç-içə JavaScript obyektlərinə bənzəyən bir JSON ağacını təşkil edir. Məsələn, istifadəçiləri və onların mesajlarını saxlamaq üçün iyerarxiya yaradılır: users/userId/name və messages/messageId/text. Ağacdakı hər bir yol sətirdir və məlumatlara bu yol vasitəsilə birbaşa daxil olmaq olar.

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

Əhəmiyyətli xüsusiyyət — dərin iç-içəlik performansa təsir edir. Tətbiq müəyyən bir yol üzrə məlumatları oxuyarkən, həmin yolun bütün uşaq qovşaqlarını yükləyir. Buna görə məlumat strukturunu mümkün qədər düz, 3–4 səviyyədən dərin iç-içəlikdən qaçaraq dizayn etmək tövsiyə olunur. Bu problemi həll etmək üçün məlumatların denormalizasiyası tətbiq olunur — məlumatların ağacın müxtəlif qovşaqlarında təkrarlanması.

Realtime Database vs Firestore: nə vaxt seçməli

Realtime Database və Firestore tez-tez Google-dan iki bulud real vaxt məlumat bazası kimi müqayisə edilir. Onlar arasında seçim layihənin xüsusi tələblərindən asılıdır: sorğuların mürəkkəbliyi, tələb olunan ardıcıllıq və planlaşdırılan yük. Hər bir bazanın güclü tərəflərini başa düşmək düzgün arxitektura qərarı verməyə kömək edir.

Realtime Database-in əsas üstünlüyü aşağı sinxronizasiya gecikməsidir. Bütün məlumatlar əlavə abstraksiya qatları olmadan bir JSON ağacında saxlanıldığı üçün sinxronizasiya Firestore-dan daha sürətlidir. Yeniləmələrin çatdırılma sürətinin kritik olduğu tətbiqlər üçün (söhbətlər, onlayn oyunlar, birgə redaktə sistemləri) Realtime Database daha uyğun seçim ola bilər.

Nə vaxt Realtime Database istifadə etməli

Realtime Database sadə məlumat strukturu və yüksək yeniləmə tezliyi olan ssenarilər üçün daha uyğundur. Tipik nümunələr: söhbətlər, real vaxtda bəyənmələr, yazı göstəriciləri, istifadəçi varlıq statusları. Bu həm də məhdud büdcəli prototiplər və layihələr üçün yaxşı seçimdir, çünki qiymətləndirmə əməliyyatların sayına deyil, məlumatların həcminə əsaslanır.

Digər tərəfdən, mürəkkəb sorğulu tətbiqlər üçün (bir neçe sahə üzrə filtrləmə, sıralama, aqreqasiya) Firestore daha güclü imkanlar təqdim edir. Realtime Database yalnız bir parametr üzrə filtrləməni dəstəkləyir və nəticləri eyni anda bir neçə sahə üzrə sıralaya bilmir. Layihə müştəri tərəfdə mürəkkəb məlumat analitikası planlaşdırırsa, Firestore daha praktik seçim olacaqdır.

Realtime Database-də sinxronizasiya necə işləyir

Realtime Database ikitərəfli məlumat sinxronizasiyası üçün daimi WebSocket əlaqəsindən istifadə edir. Müştəri müəyyən bir yolda setValue və ya updateChildren çağırdıqda, məlumatlar açıq kanal vasitəsilə Firebase serverinə göndərilir. Server dəyişiklikləri tətbiq edir və yeniləmələri millisaniyələr ərzində bütün abunə olmuş müştərilərə yayır. Hər bir əlaqə unikal sessiya açarı ilə müyyənləşdirilir.

Abunə mexanizmi listenerlər vasitəsilə işləyir. Tərtibatçı müəyyən bir qovşağın dəyişməsinə abunə ola (addListenerForSingleValueEvent) və ya daimi yeniləmələr ala bilər (addValueEventListener). Hər məlumat dəyişikliyində göstərilən yol üzrə tam məlumat anı görüntüsü ilə onDataChange callback-i çağırılır. Bu, Firestore-dan fərqlidir — orada yalnız dəyişdirilmiş sənədlər gəlir, Realtime Database-də isə həmişə qovşağın bütün məlumatları yüklənir.

Oflayn rejim və konfliktlərin idarə edilməsi

Realtime Database disk keşi vasitəsilə Android və iOS-da oflayn rejimi dəstəkləyir. SDK məlumatların yerli sürümünü saxlayır və şəbəkə olmadıqda yazma əməliyyatlarını emal etməyə davam edir. Əlaqə bərpa edildikdə, bütün yığılmış dəyişikliklər serverə göndərilir. Konfliktləri həll etmək üçün last-write-wins strategiyası istifadə olunur, lakin tərtibatçı toqquşmaları həll etmək üçün ServerValue.TIMESTAMP vasitəsilə fərdi məntiq tətbiq edə bilər.

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

// Məlumat yazılışı
myRef.push().setValue(
    hashMapOf(
        "text" to "Yeni mesaj",
        "timestamp" to ServerValue.TIMESTAMP
    )
)

// Daimi yeniləmə ilə oxu
myRef.addValueEventListener(object : ValueEventListener {
    override fun onDataChange(snapshot: DataSnapshot) {
        val data = snapshot.getValue()
        Log.d("TAG", "Məlumatlar: $data")
    }

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

Trafik və performans optimallaşdırma üçün müəyyən uşaq qovşaqların dəyişikliklərini izləmək lazım olduqda, value listeners əvəzinə child listeners istifadə etmək tövsiyə olunur. ChildEventListener uşaq elementlərin əlavə edilməsi, dəyişdirilməsi, silinməsi və daşınması üçün ayrı callbacklər təqdim edir ki, bu da UI yeniləmələrini daha dəqiq idarə etməyə və hər məlumat dəyişikliyində bütün siyahı elementlərinin yenidən çəkilməsinin qarşısını almağa imkan verir.

Təhlükəsizlik qaydaları və məlumat validasiyası

Realtime Database məlumatlara girişi idarə etmək üçün deklarativ qayda dilindən istifadə edir. Qaydalar JSON ağacının hər bir yolu üzrə məlumatları kimin oxuya və yaza biləcəyini təsvir edir. Onlar hər sorğudan əvvəl Firebase serverində yoxlanılır və icazə üçün server məntiqi tələb etmir. Qaydalar elastik giriş konfiqurasiyası üçün dəyişənləri, daxili obyektləri və funksiyaları dəstəkləyir.

Əvvəlcədən məlumat bazasına giriş bütün istifadəçilər üçün qadağandır. Tərtibatçı ağacın müxtəlif səviyyələrində ".read"".write" qaydalarından istifadə edərək tədricən giriş açır. Şərtlər auth dəyişəni vasitəsilə autentifikasiyanı, sorğu növünü (read/write) və data obyekti vasitəsilə mövcud məlumatları yoxlaya bilər. Bundan əlavə, qaydalar newData obyekti vasitəsilə yazılan məlumatların validasiyasını dəstəkləyir.

js
{
  "rules": {
    "users": {
      "$uid": {
        // Yalnız sahib öz məlumatlarını oxuya bilər
        ".read": "$uid === auth.uid",
        // Yalnız sahib yaza bilər
        ".write": "$uid === auth.uid",
        // Yazarkən sahə validasiyası
        ".validate": "newData.hasChildren(['name', 'email'])"
      }
    },
    "messages": {
      // İstənilən autentifikasiya olunmuş şəxs oxuya bilər
      ".read": "auth !== null",
      // Yalnız autentifikasiya olunmuş şəxs yaza bilər
      ".write": "auth !== null",
      ".indexOn": ["timestamp"]
    }
  }
}

Qaydalar həmçinin ".indexOn" direktivi vasitəsilə məlumatların indekslənməsini dəstəkləyir. Olmazsa, sıralama ilə sorğular (orderByChild) rədd ediləcək və ya səmərəsiz yerinə yetiriləcək. İndekslər müəyyən bir sahə üzrə sıralamanın aparıldığı hər bir yol üçün göstərilir. Qaydalar kaskaddır: daha dərin qaydalar valideyn qaydalarını ləğv edir və əgər hansısa səviyyədə giriş yoxdursa, valideyn qaydasından asılı olaraq icazə verilmiş və ya qadağan edilmiş hesab olunur.

Məlumat növləri və məhdudiyyətlər

Realtime Database beş məlumat növünü dəstəkləyir: String, Number, Boolean, Map (obyekt) və List (massiv). İç-içəlik dərinliyi 32 səviyyə ilə məhdudlaşdırılıb və bir qovşağın maksimum ölçüsü 256 MB-dır. Baza ilə səmərəli işləmək üçün düz məlumat strukturu dizayn etmək və böyük həcmdə məlumat yükləyən dərin sorğulardan qaçmaq üçün denormalizasiyadan istifadə etmək tövsiyə olunur.

Android-də Realtime Database istifadə nümunəsi

Statuslar üçün (online/offline) Android tətbiqində Realtime Database inteqrasiyasının praktik nümunəsini nəzərdən keçirək. Tətbiq istifadəçilərin siyahısını onların real vaxtda yenilənən cari statusu ilə göstərəcək. Nümayiş üçün istifadəçiləri müyyənləşdirmək üçün Firebase Authentication və asinxron əməliyyatlar üçün korutinlər istifadə olunur.

Asılılıqların qurulması və işə salma

Əvvəlcə, tətbiq modulunun build.gradle faylına firebase-database-ktx asılılığını əlavə edin. Kitabxana versiyası bütün komponentlərin uyğunluğunu təmin etmək üçün Firebase BoM vasitəsilə idarə olunur. Asılılığı əlavə etdikdən sonra Firebase-i Application sinfində və ya ViewModel-də tənbəl işəsalma vasitəsilə işə salmaq lazımdır.

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"
}

Qurulumdan sonra istifadəçilərlə işləmək üçün repozitoriya yaradılır. Hər bir istifadəçi /users/{uid} qovşağında name, email və status sahələri ilə təmsil olunur. Statusu izləmək üçün onDisconnect — müştəri əlaqəsi kəsildikdə avtomatik olaraq yazma əməliyyatını yerinə yetirən xüsusi Firebase mexanizmi istifadə olunur. Bu, tətbiq bağlandıqda və ya şəbəkə itirildikdə müştəri tərəfində əlavə kod olmadan istifadəçi statusunun "offline" olaraq dəyişməsini təmin edir.

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()
            }
}

Nümunənin əsas elementi onDisconnect-dir. Bu mexanizm müştəri əlaqəsi kəsildikdə serverdə yerinə yetiriləcək yazma əməliyyatını təyin etməyə imkan verir. Bu halda istifadəçi ayrıldıqda, onun statusu tətbiqin bağlanma hadisəsini emal etməyə ehtiyac olmadan avtomatik olaraq "offline" olaraq təyin edilir. Tətbiq qəzaya uğrayarsa, Firebase özü onDisconnect əməliyyatını yerinə yetirəcək və digər istifadəçilər düzgün statusu görəcəklər.

Tez-tez verilən suallar

Firebase Realtime Database və Firestore arasındakı fərq nədir?

Realtime Database məlumatları bir JSON ağacında saxlayır və daha aşağı sinxronizasiya gecikməsi təmin edir. Firestore sənəd kolleksiyalarından istifadə edir, mürəkkəb sorğuları və güclü ardıcıllığı dəstəkləyir. Realtime Database sadə söhbətlər və statuslar üçün daha yaxşıdır, Firestore — mürəkkəb məlumat strukturu və analitikası olan tətbiqlər üçün.

Realtime Database-də maksimum məlumat ölçüsü nə qədərdir?

Realtime Database-də bir qovşağın maksimum ölçüsü 256 MB-dır. İç-içəlik dərinliyi 32 səviyyə ilə məhdudlaşdırılıb. Bir Firebase layihəsi üçün bir neçə Realtime Database məlumat bazası yaradıla bilər (Spark planında 5-ə qədər və Blaze planında 100-ə qədər), bu da məlumatları müxtəlif nüsxələr arasında bölməyə imkan verir.

Realtime Database-də autentifikasiya necə işləyir?

Realtime Database Firebase Authentication ilə inteqrasiya edir. Təhlükəsizlik qaydalarında autentifikasiya olunmuş istifadəçinin uid-sini ehtiva edən auth dəyişəni mövcuddur. Tərtibatçı məlumat sahibinin uid uyğunluğunu yoxlayaraq JSON ağacının ayrı-ayrı qovşaqları səviyyəsində girişi məhdudlaşdıra bilər. Anonim və autentifikasiya olunmamış istifadəçilərin auth = null-dır.

Realtime Database əməliyyatları dəstəkləyirmi?

Bəli, Realtime Database runTransaction metodu vasitəsilə əməliyyatları dəstəkləyir. Əməliyyat bir qovşaq üçün oxu-dəyişiklik-yazma əməliyyatının atomarlığını təmin edir. Eyni vaxtlı dəyişikliklər zamanı əməliyyat cari məlumatlarla təkrarlanır. Bu, sayıcılar, reytinqlər və məlumat ardıcıllığının vacib olduğu digər ssenarilər üçün faydalıdır.

Realtime Database-dən internet olmadan istifadə etmək olarmı?

Bəli, Realtime Database Android və iOS-da oflayn rejimi dəstəkləyir. SDK məlumatları lokal olaraq keşləyir və şəbəkə olmadıqda yazma əməliyyatlarını emal etməyə davam edir. Əlaqə bərpa edildikdən sonra bütün yığılmış dəyişikliklər serverlə sinxronlaşdırılır. Oflayn rejimi aktivləşdirmək üçün müvafiq qovşaqda keepSynced(true) metodundan istifadə olunur.

Nəticə

  • Firebase Realtime Database — WebSocket vasitəsilə müştərilər arasında real vaxtda sinxronizasiya olan bulud JSON məlumat bazasıdır.
  • Məlumatlar iyerarxik quruluşlu və hər bir qovşağa unikal yollarla əlçatan olan JSON ağacında saxlanılır.
  • Disk keşi ilə daxili oflayn rejimi tətbiqin internet əlaqəsi olmadan işləməsinə imkan verir.
  • onDisconnect mexanizmi əlaqə kəsilərkən avtomatik olaraq əməliyyatları yerinə yetirir — varlıq statusları üçün idealdır.
  • Təhlükəsizlik qaydaları və məlumat validasiyası server kodu olmadan deklarativ şəkildə konfiqurasiya olunur.
  • Qiymətləndirmə əməliyyatların sayına deyil, məlumat həcminə əsaslanır ki, bu da tez-tez yeniləmələri olan tətbiqlər üçün faydalıdır.
  • Sadə məlumat strukturu və minimal gecikmə tələbləri olan layihələr üçün Realtime Database optimal seçim olaraq qalır.

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.

Layihəni müzakirə et

Həm də oxuyun