Adattárolás a mobilfejlesztésben: mi ez, milyen módszerek vannak és hogyan működik

Szerző: IT Sectr Megjelenés: 2026-03-08 Olvasási idő: 9 perc

Az adattárolás az egyik kulcsfontosságú feladata egy mobilalkalmazásnak, amely befolyásolja a teljesítményt, biztonságot és felhasználói élményt. Ebben a cikkben áttekintjük a SQLite, Room, Core Data, Realm, Firebase Firestore, SharedPreferences, DataStore, Keystore és Keychain megoldásokat, valamint a szerializációs formátumokat (JSON, Protobuf) és könyvtárakat (Gson, Moshi, kotlinx.serialization). Ez az útmutató segít a kezdő fejlesztőknek kiválasztani a megfelelő adattárolási megoldást. További információ a hivatalos Android adattárolási útmutatóban.

Főbb pontok

  • Room (Android) és Core Data (iOS) a hivatalos ORM-ek a relációs adatbázisokkal való munkához az egyes platformokon
  • SharedPreferences (Android) helyét a DataStore veszi át — egy aszinkron és típusbiztos kulcs-érték tároló
  • A tokenek biztonságos tárolásához hardveres védelemmel ellátott Keystore (Android) és Keychain (iOS) használatos
  • Firebase Firestore egy NoSQL adatbázis valós idejű szinkronizációval és offline móddal
  • Szerializáció — objektumok JSON/Protobuf formátumba konvertálása Gson, Moshi, kotlinx.serialization segítségével

Helyi adatbázisok: SQLite, Room, Core Data, Realm

A strukturált adatok entitások közötti kapcsolatokkal történő tárolásához relációs adatbázisokat használunk.

SQLite

SQLite egy beágyazott relációs adatbázis, amely bármely mobil platformon működik. Nem igényel külön szervert, az adatok egyetlen fájlban tárolódnak. Az SQLite a Room (Android) és opcionálisan a Core Data (iOS) alapja. Könyvtárak: android.database.sqlite (Android), FMDB/Core Data (iOS), sqflite (Flutter).

Room (Android)

Room a hivatalos Android Architecture Components könyvtár a SQLite-tal való munkához. ORM réteget biztosít: Entity (tábla), DAO (lekérdezések), Database (belépési pont). A Room ellenőrzi az SQL lekérdezéseket fordítási időben, támogatja a korutinokat és Flow-t, és automatikusan migrálja a sémát.

kotlin
@Entity
data class User(
    @PrimaryKey val id: Int,
    val name: String,
    val email: String
)

@Dao
interface UserDao {
    @Query("SELECT * FROM user WHERE id = :id")
    suspend fun getUser(id: Int): User?
}

Core Data (iOS)

Core Data az Apple keretrendszere objektumgráf kezelésére. Nem tiszta adatbázis — egy perzisztencia réteg az SQLite, XML vagy bináris tárolás felett. A Core Data kezeli az objektumokat (NSManagedObject), kapcsolatokat, sémaverziózást, visszavonás/ismétlés és a több szálon történő munkát az NSManagedObjectContext segítségével.

Realm

Realm egy alternatíva a SQLite-ra, nagy teljesítményű mobil adatbázisként tervezve. A Realm gyorsabb, mint a SQLite olvasásban és írásban, támogatja a reaktív értesítéseket (Live Objects), a menet közbeni titkosítást és a platformfüggetlenséget (Android, iOS, Flutter, React Native). Hátrányok: megnövekedett APK/IPA méret és nagyobb memóriahasználat.

Kulcs-érték tárolók és beállítások

Kis mennyiségű adat (beállítások, tokenek, gyorsítótár) tárolásához egyszerű kulcs-érték tárolókat használunk.

SharedPreferences (Android)

SharedPreferences egy örökölt kulcs-érték tároló Androidon. Hátrányok: szinkron hozzáférés (blokkolja az UI-t olvasáskor), tipizálás hiánya, ANR kockázat nagy fájl betöltésekor. NEM ajánlott új projektekhez.

DataStore (Jetpack Android)

DataStore a SharedPreferences modern helyettesítője a Google-tól. Aszinkron módon működik Kotlin Coroutines és Flow segítségével, támogatja a Preferences DataStore-t (kulcs-érték) és a Proto DataStore-t (tipizált adatok Protobuf segítségével). A DataStore biztonságos az UI szál számára és támogatja a tranzakciókat.

NSUserDefaults (iOS)

UserDefaults a standard tároló kis beállításokhoz iOS-en. Támogatja a primitív típusokat, karakterláncokat, dátumokat, Data-t. A UserDefaults szinkron, ezért nagy adatmennyiségekhez nem alkalmas. Az értékek regisztrációja a register(defaults:) segítségével állítja be az alapértelmezett értékeket.

Felhőadatbázisok: Firebase Firestore és Realtime DB

Az eszközök közötti szinkronizációt igénylő alkalmazások adattárolásához Firebase felhőadatbázisokat használunk.

Cloud Firestore

Firebase Firestore egy NoSQL dokumentumadatbázis valós idejű feliratkozásokkal, automatikus skálázással, hatékony lekérdezésekkel és beépített offline móddal. Az adatok gyűjteményekbe és dokumentumokba (JSON-szerű struktúrák) szerveződnek. A Firestore támogatja a tranzakciókat és a kötegelt műveleteket. Ideális csevegésekhez, hírfolyamokhoz és közösségi alkalmazásokhoz.

Firebase Realtime Database

Firebase Realtime Database egy régebbi Firebase NoSQL adatbázis, amely az adatokat egyetlen JSON-faként tárolja. Egyszerűbb, mint a Firestore, de kevésbé rugalmas a lekérdezésekben és a skálázásban. Egyszerű valós idejű alkalmazásokhoz (online állapot, egyszerű csevegések) ajánlott.

JellemzőCloud FirestoreFirebase Realtime DB
AdatmodellGyűjtemények → DokumentumokJSON-fa
LekérdezésekÖsszetett (szűrés, rendezés, korlátok)Egyszerű (kulcs szerint)
SkálázásAutomatikusKézi sharding
Offline módIgen (perzisztens gyorsítótár)Igen
ÁrOlvasási/írási műveletenkéntForgalom + tárolás szerint

Biztonságos tárolás: Keystore, Keychain és EncryptedSharedPreferences

A tokenek, jelszavak és titkosítási kulcsok tárolása speciális védett tárolókat igényel.

Android Keystore

Android Keystore egy rendszertároló kriptográfiai kulcsok számára. A kulcsok hardveres környezetben (TEE — Trusted Execution Environment) tárolódnak, amely az alkalmazások és az operációs rendszer számára hozzáférhetetlen. Támogatja a kulcsgenerálást, titkosítást és aláírást. Android 9+ tartalmazza a StrongBox Keymaster-t (dedikált chip).

iOS Keychain

Keychain Services egy biztonságos iOS-tároló jelszavak, kulcsok és tanúsítványok számára. Az adatok a hardveres Secure Enclave segítségével vannak titkosítva. A Keychain támogatja a hozzáférhetőségi szinteket: Always, WhenUnlocked, WhenUnlockedThisDeviceOnly, AfterFirstUnlock.

EncryptedSharedPreferences (Android)

EncryptedSharedPreferences egy burkoló a SharedPreferences köré kulcs- és értéktitkosítással AES256-GCM és HKDF segítségével. Az AndroidX Security könyvtárban van megvalósítva. Tokenek és érzékeny beállítások tárolására ajánlott.

Az IT Sectr-nél Android Keystore + EncryptedSharedPreferences-t használunk a frissítési tokenek és biometrikus kulcsok tárolására. iOS-en a kSecAttrAccessibleWhenUnlockedThisDeviceOnly szintű Keychain-t használjuk a maximális biztonság érdekében.

Fájltárolás: Internal, External, Cache Directory

A fájltároláshoz (képek, videók, dokumentumok) a mobil platformok több típusú tárolót kínálnak.

Android Storage

Az Android megkülönbözteti a Internal Storage-t (/data/data/csomag/ — privát tároló) és az External Storage-t (SD kártya vagy emulált partíció). A Cache Directory egy ideiglenes tároló, amelyet a rendszer törölhet. A Scoped Storage (Android 10+) korlátozza a hozzáférést az External Storage-hoz — az alkalmazások csak saját fájljaikat vagy a MediaStore/SAF segítségével elért fájlokat látják.

iOS Storage

Az iOS Documents Directory (iCloud biztonsági mentés, állandó adatok), Library/Caches (ideiglenes fájlok, nincs biztonsági mentés) és Tmp Directory (ideiglenes, törölhető) tárolókat biztosít. Használja az NSFileManager-t a fájlrendszerrel való munkához. iOS 11+ támogatja a File Provider-t a felhőfájlokhoz.

Adatszerializáció: JSON, Protobuf és könyvtárak

A szerializáció az objektumokat átviteli vagy tárolási formátumba konvertálja. A deszerializáció a fordított folyamat.

Formátumok

JSON (JavaScript Object Notation) a legnépszerűbb formátum: olvasható, rugalmas, minden platform támogatja. XML szigorúbb, örökölt rendszerekben használatos. Protobuf (Protocol Buffers) egy bináris formátum a Google-tól: 3-10-szer kompaktabb, mint a JSON, gyorsabb elemzés, szigorú sémával. Nagy terhelésű rendszerekhez és mikroszolgáltatásokhoz használatos.

Android könyvtárak

  • Gson (Google) — egyszerű, rugalmas, de lassú. Automatikusan működik Java/Kotlin objektumokkal
  • Moshi (Square) — gyorsabb, mint a Gson, jobb Kotlin-támogatás (nem null tulajdonságok, alapértelmezett értékek, sealed osztályok)
  • kotlinx.serialization — natív Kotlin-szerializáció a JetBrains-től, fordítási időben működik, támogatja a JSON, Protobuf, CBOR formátumokat

iOS könyvtárak

JSONSerialization a beépített API a JSONnal való munkához. Codable (Encodable/Decodable) egy modern Swift protokoll az automatikus szerializációhoz JSON, Property List és más formátumokba.

swift
struct User: Codable {
    let id: Int
    let name: String
    let email: String
}
let user = User(id: 1, name: "Alice", email: "alice@example.com")
let encoder = JSONEncoder()
let jsonData = try encoder.encode(user)

Platformfüggetlen megoldások: Hive, ObjectBox, Drift

A Flutter és React Native számára saját hatékony tárolási könyvtárak léteznek.

Hive (Flutter)

Hive egy könnyű, gyors kulcs-érték tároló Flutter számára. Nem igényel natív kódot (tiszta Dart), támogatja a tipizálást TypeAdapter segítségével, és izolátumokban működik. Ideális gyorsítótárhoz, beállításokhoz és kis adatmennyiségekhez.

ObjectBox

ObjectBox egy nagy teljesítményű beágyazott adatbázis Flutter, Android és iOS számára. 10+szor gyorsabb, mint a SQLite, lapos fájlszerkezetet használ a minimális többletterhelés érdekében. Támogatja a kapcsolatokat, lekérdezéseket és reaktív feliratkozásokat (ObjectBox Dart).

Drift (korábban Moor)

Drift egy reaktív SQLite könyvtár Flutter és Dart számára. Típusbiztos lekérdezéseket, migrációkat, DAO függvényeket és Stream támogatást (reaktív frissítések) biztosít. A Drift az elsődleges választás az SQLite-ot igénylő Flutter projektekhez.

Gyakran Ismételt Kérdések

Melyik jobb a helyi adattároláshoz: Room vagy Core Data?

A választás a platformtól függ: Room (Android) a hivatalos SQLite-alapú könyvtár fordítási idejű lekérdezés-ellenőrzéssel. A Core Data (iOS) az Apple keretrendszere objektumgráffal. Platformfüggetlen projektekhez a Realm vagy a SQLite ORM-en keresztül megfelelő.

Mi a különbség a SharedPreferences és a DataStore között?

A SharedPreferences egy régi implementáció szinkron hozzáféréssel és ANR kockázattal. DataStore (Jetpack) egy modern helyettesítő Kotlin Coroutines és Flow alapokon, amely támogatja az aszinkronitást, tipizálást és hibavédelmet.

Hogyan tárolhatók biztonságosan a tokenek és jelszavak egy mobilalkalmazásban?

Android: EncryptedSharedPreferences vagy Android Keystore. iOS: Keychain Services WhenUnlockedThisDeviceOnly hozzáférhetőséggel. Kritikus adatokhoz használja a Secure Enclave-t (iOS) és a hardveres Keystore-t (Android) biometriával.

Mi az a Firebase Firestore és mikor kell használni?

Cloud Firestore egy NoSQL adatbázis a Firebase-től valós idejű szinkronizációval, offline móddal és automatikus skálázással. Alkalmas csevegésekhez, hírcsatornákhoz és olyan projektekhez, amelyek eszközök közötti szinkronizációt igényelnek.

Milyen ORM-ek léteznek Flutter és React Native számára?

Flutter: Hive (gyors kulcs-érték), Floor (SQLite ORM), Drift (Moor, reaktív SQLite), ObjectBox (nagy teljesítményű beágyazott adatbázis). React Native: Realm, WatermelonDB (lusta betöltés) és AsyncStorage (SharedPreferences analóg).

Összegzés

  • Room (Android) és Core Data (iOS) a hivatalos megoldások a relációs adatbázisokhoz az egyes platformokon
  • DataStore a SharedPreferences helyébe lép a beállítások aszinkron tárolásához
  • Keystore / Keychain kötelező a tokenek és kulcsok biztonságos tárolásához
  • Firebase Firestore a legjobb választás az eszközök közötti valós idejű szinkronizációhoz
  • Kotlinx.serialization (Android) és Codable (iOS) modern szerializációs megközelítések
  • Flutter esetén: Drift (SQLite), Hive (kulcs-érték), ObjectBox (nagy teljesítmény)
  • Realm egy platformfüggetlen alternatíva a SQLite-hoz reaktív értesítésekkel

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