Firebase Realtime Database: mi ez, JSON struktúra és szinkronizáció

Szerző: IT Sectr Megjelenés: 2026-04-28 Olvasási idő: 10 perc

A Firebase Realtime Database egy Google-féle felhőalapú NoSQL adatbázis, amely a változásokat valós időben szinkronizálja egy állandó WebSocket-kapcsolaton keresztül. Az adatok egyetlen JSON-faként tárolódnak, és bármely csomópont bármely változása azonnal eljut az összes csatlakoztatott klienshez. A Google, 2026 adatai szerint a Realtime Database akár 200 ezer egyidejű kapcsolatot is támogat egyetlen példányhoz. A szolgáltatás havi 1 GB tárhellyel és 10 GB forgalommal ingyenes korlátokkal érhető el.

Főbb pontok

  • Firebase Realtime Database — egy felhőalapú JSON-fa a változások valós idejű szinkronizációjával WebSocketen keresztül.
  • Az adatok offline is elérhetők — az SDK gyorsítótárazza az utolsó állapotot, és a kapcsolat helyreállításakor szinkronizál.
  • Akár 200 ezer egyidejű kapcsolatot támogat egyetlen adatbázispéldányhoz.
  • Az adatstruktúra — egyetlen JSON-fa, amely egyszerűsíti az olvasást, de a teljesítmény érdekében lapos normalizálást igényel.
  • Az árképzés az adatmennyiségen és az egyidejű kapcsolatok számán alapul, nem a műveletek számán.

Mi a Firebase Realtime Database

Firebase Realtime Database az egyik első valós idejű felhőadatbázis, amelyet a Google a Firebase-szel együtt indított el 2012-ben. Ez egy NoSQL adatbázis, ahol az adatok egyetlen JSON-faként tárolódnak, amely egy URL-en keresztül érhető el. A kliens SDK-k (Android, iOS, Web) WebSocketen keresztül feliratkoznak a fa adott csomópontjaira, és minden adatváltozáskor frissítéseket kapnak — anélkül, hogy pingelnék a szervert, és anélkül, hogy saját Push-mechanizmust kellene implementálniuk.

Történelem és fejlődés

Az eredeti Firebase-t 2011-ben alapította James Tamplin és Andrew Lee, és az első termék pont a Realtime Database volt. Miután a Google 2014-ben felvásárolta (a TechCrunch szerint — 50-100 millió dollár közötti összegért), az adatbázis integrálódott a Google Cloudba, és jelentősen nagyobb sávszélességet kapott. 2017-ben a Google bejelentette a Firestore-t evolúciós helyettesítőként, de a Realtime Database továbbra is aktívan támogatott és frissített. A Google (2026) adatai szerint a Realtime Database még mindig több mint 1,5 millió aktív projektben használatos.

Ingyenes korlátok és díjak

Spark tarifa (ingyenes) tartalmazza: 1 GB tárhely, 10 GB letöltött adat havonta, 100 egyidejű kapcsolat és adatbázis-támogatás egy régióban. A Blaze tarifán (pay-as-you-go) a többlet tárhelyért (1 $/GB), forgalomért (0,12 $/GB) és egyidejű kapcsolatokért (5 $ minden 100 ezer után a limit felett) kell fizetni. Teszteléshez emulációs mód is elérhető — firebase emulators:start — amely helyben futtatja a Realtime Database-t a felhőhöz való csatlakozás nélkül.

Adatstruktúra: JSON-fa és normalizálás

Realtime Database nem rendelkezik táblákkal, gyűjteményekkel vagy dokumentumokkal — minden egyetlen JSON-fa, amely a https://project-name-default-rtdb.firebaseio.com/ címen érhető el. A fa minden kulcsa vagy egy végérték (karakterlánc, szám, boolean, null), vagy egy beágyazott csomópont gyermekkulcsokkal. Az adatbázismotor nem támogatja a JOIN, alkérdéseket vagy aggregációkat — egy lekérdezés mindig egyetlen csomópont tartalmát adja vissza az összes gyermekelemmel együtt.

Adatnormalizálás

A JOIN hiánya miatt a Realtime Database-ben az adatnormalizálás kötelező. A beágyazott fa (felhasználó → bejegyzéseinek listája) helyett az adatok lapos listákra vannak bontva, kulcsokon keresztüli hivatkozásokkal. Ez a szabványos megközelítés: az adatok denormalizálódnak, hogy egy csomópont olvasása ne húzza magával a teljes kontextust. Például a csevegőüzenetek listája külön tárolódik a felhasználói profiloktól, és minden bejegyzés csak a szerző ID-ját tartalmazza, nem a teljes profilját.

MegközelítésPélda struktúraProbléma
Beágyazottusers/{uid}/posts/{postId}/contentA user olvasása betölti az összes bejegyzést
Laposposts/{postId}/authorId + users/{uid}/nameKét lekérdezést igényel
Denormalizáltposts/{postId}/authorName (másolt)Duplikáció frissítéskor

Lekérdezések a Realtime Database-ben

Lekérdezések a Realtime Database-ben filter segítségével (orderByChild, orderByKey, orderByValue, limitToFirst, limitToLast, equalTo, startAt, endAt) hajtódnak végre. A Firestore-tól eltérően az indexek manuálisan jönnek létre a Rules szakaszon (.indexOn) keresztül. Ha az index nincs deklarálva, a rendezéssel rendelkező lekérdezés PERMISSION_DENIED hibát ad vissza. A lekérdezések csak egy mezőn működnek — az összetett lekérdezések (ár szerinti szűrés + dátum szerinti rendezés) nem támogatottak. Az összetett szűréshez az adatok gyakran különböző csomópontokban duplikálódnak eltérő rendezési kulcsokkal.

Realtime Database vs Firestore: mit válasszunk

A Realtime Database és a Firestore közötti választás az egyik gyakori architektúrális döntés a projekt indításakor. A Google a Firestore-t ajánlja a legtöbb új alkalmazáshoz, de a Realtime Database továbbra is a legjobb választás azokban a forgatókönyvekben, ahol a minimális adatátviteli késleltetés kritikus.

Három kulcsfontosságú forgatókönyv a Realtime Database-hez

Első forgatókönyv — többszereplős játékok állapotszinkronizációval (sakk, kártyajátékok, valós idejű akció). A Realtime Database késleltetése 10-30 ms, szemben a Firestore 50-100 ms-ával ugyanabban a régióban. Második forgatókönyv — csevegések és üzenetküldők magas üzenetgyakorisággal. A Realtime Database az adatmennyiség alapján díjazott, nem az írások száma alapján, ami jelentősen olcsóbbá teszi a Firestore-nál másodpercenként 1 üzenet feletti gyakoriságnál. Harmadik forgatókönyv — a felhasználók online/offline jelenléte (presence), ahol a Realtime Database onDisconnect-kezelői lehetővé teszik az állapot atomi beállítását a kapcsolat megszakadásakor.

A Google (2026) adatai szerint az új Firebase-projektek körülbelül 15%-a tudatosan választja a Realtime Database-t — amikor a csapat világosan érti a késleltetési, adatstruktúra- és költségvetési követelményeket. A fennmaradó 85%-ban a Firestore a biztonságosabb választás a jobb skálázhatóság, az erősebb lekérdezések és az automatikus replikáció miatt.

Realtime Database integrálása Androidban

A Realtime Database csatlakoztatása egy Android-alkalmazáshoz a firebase-database-ktx függőség hozzáadásával történik a build.gradle fájlban. A FirebaseDatabase objektum a getInstance(url) segítségével érhető el — több adatbázis is csatlakoztatható egyetlen Firebase-projekten belül. Az inicializálás után az SDK automatikusan WebSocket-kapcsolatot létesít a szerverrel, és megkezdi az adatok szinkronizációját.

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

// Inicializálás egyéni URL-lel
val database = FirebaseDatabase.getInstance(
    "https://my-project-default-rtdb.firebaseio.com/"
)
val ref = database.getReference("chats")

Adatok írása és olvasása

Realtime Database a DatabaseReference objektumot használja minden művelethez. A setValue() adatokat ír a megadott csomópontba, teljesen felülírva annak teljes tartalmát. A push() automatikusan egyedi kulcsot generál (időbélyeg alapján) egy elem lista hozzáadásához — ez a szabványos módja a csevegőüzenetek, bejegyzések és rekordok létrehozásának. Az updateChildren() több csomópontot atomi módon módosít egyetlen műveletben. Az addValueEventListener feliratkozik egy csomópont változásaira, és minden adatfrissítéskor callback-et kap.

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

Valós idejű szinkronizáció és offline mód

A szinkronizációs mechanizmus a Realtime Database-ben a WebSocket protokollon alapul (korábban — long-polling). A kliens feliratkozási kérelmet küld egy adott csomópontra, és a szerver nyitva tartja a kapcsolatot. A feliratkozott csomópont minden adatváltozásakor a szerver elküldi a kliensnek a csomópont teljes JSON-ját. A kliens oldali SDK automatikusan frissíti a helyi állapotot, és meghívja a megfelelő callback-eket (onDataChange).

OnDisconnect — kapcsolat-megszakítási triggerek

OnDisconnect — a Realtime Database egyedi képessége, amely hiányzik a Firestore-ból. A fejlesztő regisztrálhat egy írási műveletet, amely automatikusan végrehajtódik a szerveren a kliens kapcsolatának megszakadásakor. Ezt a jelenléti állapotokhoz használják: "user123/status": "online" onDisconnect.setValue("offline") paraméterrel. Ha a felhasználó bezárta az alkalmazást vagy elvesztette az internetet, a szerver automatikusan beállítja az "offline" állapotot, legfeljebb 3 percen belül (beállítható a Firebase konzolban).

Offline gyorsítótár

Persistence a Realtime Database-ben egy sorral aktiválható: FirebaseDatabase.getInstance().setPersistenceEnabled(true). Az SDK az összes feliratkozott csomópont utolsó állapotát a lemezen gyorsítótárazza (alapértelmezés szerint 10 MiB-ig, 100 MiB-ig állítható). Kapcsolat elvesztésekor a kliens tovább dolgozik a gyorsítótárazott adatokkal, és az összes írási művelet sorba kerül. Amikor a kapcsolat helyreáll, az SDK az összes felhalmozott változtatást a helyes sorrendben (FIFO) elküldi a szerverre.

A Google (2026) adatai szerint a persistence gyorsítótárat használó alkalmazások 40%-kal ritkábban veszítenek el felhasználói adatokat kapcsolat megszakadásakor. Ha azonban a kliens több mint 1000 halasztott műveletet halmozott fel, a szerver elutasíthatja az összeset, és teljes szinkronizációt kérhet — ez egy védelmi mechanizmus az elavult kliensek ellen.

Biztonsági szabályok és validálás

Security Rules a Realtime Database-ben egy JSON-konfiguráció, amely leírja, hogy ki és milyen feltételek mellett olvashat és írhat adatokat az egyes csomópontokban. A szabályok a Google szerverén működnek, és minden művelet előtt végrehajtódnak. Alapértelmezés szerint (éles környezetben) ajánlott a szabályokat "zárt" módban beállítani — csak a hitelesített felhasználók férhetnek hozzá.

A rules struktúrája

A Realtime Database szabályai JSON formátumban íródnak .read, .write, .validate, .indexOn szakaszokkal. A Firestore-tól eltérően (amely match szintaxist használ), a Realtime Database beágyazott objektumokat használ, amelyek tükrözik az adatstruktúrát. A feltételek ellenőrzik az auth-ot (hitelesítés), data-t (meglévő adatok), newData-t (új adatok íráskor) és now-t (szerveridő). A validációs szabályok (.validate) lehetővé teszik a típusok, értéktartományok és adatstruktúrák ellenőrzését.

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

Kaszkád viselkedés és a rules tesztelése

A Realtime Database szabályai kaszkádolva öröklődnek — ha a felső szinten .read = false, akkor az összes gyermek csomópont nem érhető el olvasásra, függetlenül a saját szabályaiktól. A Firebase egy szabály-szimulátort biztosít a konzolban, ahol a műveletek különböző auth tokenekkel tesztelhetők az élesítés előtt. Javasolt mindig tesztelni a szabályokat a szimulátorban — egy hiba a szabályban hozzáférhetővé teheti az összes felhasználó privát adatait. A Google (2026) adatai szerint a Firebase-projektek adatszivárgásainak 40%-át helytelenül konfigurált biztonsági szabályok okozzák.

Gyakran ismételt kérdések

Hány egyidejű kapcsolatot bír el a Realtime Database?

Akár 200 ezer egyidejű kapcsolatot egyetlen adatbázispéldányhoz. A korlát túllépésekor az új kapcsolatok blokkolódnak. A skálázáshoz több adatbázisra történő sharding használatos.

Hogyan valósítható meg a felhasználók online/offline jelenléte?

Használja az onDisconnect függvényt — regisztráljon egy "offline" írási műveletet a kapcsolat megszakadásakor. A szerver automatikusan végrehajtja azt a WebSocket megszakadásakor. Külön kövesse nyomon a kapcsolatot a .info/connected segítségével.

Miért nem adnak vissza adatokat a lekérdezéseim?

Ellenőrizze a .indexOn elemet a Security Rules-ban — deklarált index nélkül az orderByChild lekérdezés PERMISSION_DENIED hibát ad vissza. Győződjön meg arról is, hogy az adatok a megfelelő csomópontba vannak írva, és az olvasó rendelkezik .read jogosultsággal.

Hogyan lehet áthelyezni adatokat a Realtime Database-ből a Firestore-ba?

A Firebase Console exportálást biztosít a Realtime Database-ből a Firestore-ba egyetlen kattintással. A JSON-struktúra gyűjteményekké és dokumentumokká alakul. Egyéni migrációhoz használja az Admin SDK-t.

Biztonságos a Realtime Database a jelszavak tárolására?

Nem, a jelszavak tárolása a Realtime Database-ben tilos a Google biztonsági szabályai szerint. Hitelesítéshez használja a Firebase Auth-ot — a jelszóhashek elkülönített tárolóban vannak, amely a Realtime Database SDK-n keresztül nem érhető el.

Összefoglalás

  • Firebase Realtime Database — egy NoSQL JSON-fa valós idejű szinkronizációval WebSocketen keresztül, amelyet a Google 2012-ben vezetett be.
  • Az adatok lapos listákba normalizálódnak kulcsokon keresztüli hivatkozásokkal a JOIN és az összetett lekérdezések hiánya miatt.
  • OnDisconnect — egyedi mechanizmus a jelenléti állapot atomi írására a kliens kapcsolatának megszakadásakor.
  • SMS-ellenőrzés és akár 10 MiB offline gyorsítótár műveleti sorral lehetővé teszi az alkalmazás számára, hogy internet nélkül működjön, és a kapcsolat helyreállításakor szinkronizáljon.
  • Security Rules — kaszkád hozzáférési jogosultsági rendszer típusok és értékek .validate-en keresztüli validálásának támogatásával.
  • Játékokhoz, csevegésekhez és presence forgatókönyvekhez ajánlott — olyan alkalmazások, amelyek érzékenyek a minimális adatátviteli késleltetésre.
  • Az árképzés a tárhely mennyiségén, a letöltött forgalmon és az egyidejű kapcsolatokon alapul, nem a műveletek számán, mint a Firestore esetében.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is