Stocarea datelor în dezvoltarea mobilă: ce este, metode și cum funcționează

Autor: IT Sectr Publicat: 2026-03-08 Timp de citire: 9 min

Stocarea datelor este una dintre sarcinile cheie ale unei aplicații mobile, care afectează performanța, securitatea și experiența utilizatorului. În acest articol vom acoperi SQLite, Room, Core Data, Realm, Firebase Firestore, SharedPreferences, DataStore, Keystore și Keychain, precum și formatele de serializare (JSON, Protobuf) și bibliotecile (Gson, Moshi, kotlinx.serialization). Acest ghid va ajuta dezvoltatorii începători să aleagă soluția corectă de stocare a datelor. Mai multe informații în ghidul oficial Android privind stocarea datelor.

Puncte cheie

  • Room (Android) și Core Data (iOS) sunt ORM-urile oficiale pentru lucrul cu baze de date relaționale pe fiecare platformă
  • SharedPreferences (Android) este înlocuit de DataStore — un depozit asincron și tip-securizat de perechi cheie-valoare
  • Pentru stocarea sigură a tokenurilor se utilizează Keystore (Android) și Keychain (iOS) cu protecție hardware
  • Firebase Firestore este o bază de date NoSQL cu sincronizare în timp real și mod offline
  • Serializarea — conversia obiectelor în JSON/Protobuf prin Gson, Moshi, kotlinx.serialization

Baze de date locale: SQLite, Room, Core Data, Realm

Pentru stocarea datelor structurate cu relații între entități se utilizează baze de date relaționale.

SQLite

SQLite este o bază de date relațională încorporată care funcționează pe orice platformă mobilă. Nu necesită un server separat, datele sunt stocate într-un singur fișier. SQLite stă la baza Room (Android) și opțional pentru Core Data (iOS). Biblioteci: android.database.sqlite (Android), FMDB/Core Data (iOS), sqflite (Flutter).

Room (Android)

Room este biblioteca oficială Android Architecture Components pentru lucrul cu SQLite. Oferă un strat ORM: Entity (tabel), DAO (interogări), Database (punct de intrare). Room verifică interogările SQL în timpul compilării, suportă corutine și Flow și migrează automat schema.

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 este framework-ul Apple pentru gestionarea unui graf de obiecte. Nu este o bază de date pură — este un strat de persistență peste SQLite, XML sau stocare binară. Core Data gestionează obiecte (NSManagedObject), relații, versionarea schemei, anulare/refacere și multithreading prin NSManagedObjectContext.

Realm

Realm este o alternativă la SQLite, proiectată ca o bază de date mobilă de înaltă performanță. Realm este mai rapid decât SQLite la citire și scriere, suportă notificări reactive (Live Objects), criptare în timp real și cross-platform (Android, iOS, Flutter, React Native). Dezavantaje: dimensiune APK/IPA mărită și consum mai mare de memorie.

Depozite cheie-valoare și setări

Pentru stocarea unor volume mici de date (setări, tokenuri, cache) se utilizează depozite simple de perechi cheie-valoare.

SharedPreferences (Android)

SharedPreferences este un depozit moștenit de perechi cheie-valoare în Android. Dezavantaje: acces sincron (blochează UI la citire), lipsa tipizării, risc ANR la încărcarea fișierelor mari. NU este recomandat pentru proiecte noi.

DataStore (Jetpack Android)

DataStore este înlocuitorul modern pentru SharedPreferences de la Google. Funcționează asincron prin Kotlin Coroutines și Flow, suportă Preferences DataStore (cheie-valoare) și Proto DataStore (date tipizate prin Protobuf). DataStore este sigur pentru thread-ul UI și suportă tranzacții.

NSUserDefaults (iOS)

UserDefaults este depozitul standard pentru setări mici în iOS. Suportă tipuri primitive, șiruri, date, Data. UserDefaults este sincron, deci nu este potrivit pentru volume mari de date. Înregistrarea valorilor prin register(defaults:) stabilește valorile implicite.

Baze de date în cloud: Firebase Firestore și Realtime DB

Pentru stocarea datelor în aplicații care necesită sincronizare între dispozitive, se utilizează baze de date cloud Firebase.

Cloud Firestore

Firebase Firestore este o bază de date documentară NoSQL cu abonamente în timp real, scalare automată, interogări puternice și mod offline încorporat. Datele sunt organizate în colecții și documente (structuri similare JSON). Firestore suportă tranzacții și operații în lot. Ideal pentru chat-uri, fluxuri și aplicații sociale.

Firebase Realtime Database

Firebase Realtime Database este o bază de date NoSQL mai veche Firebase care stochează datele ca un singur arbore JSON. Mai simplă decât Firestore, dar mai puțin flexibilă în interogări și scalare. Recomandată pentru aplicații simple în timp real (stare online, chat-uri simple).

CaracteristicăCloud FirestoreFirebase Realtime DB
Model de dateColecții → DocumenteArbore JSON
InterogăriComplexe (filtrare, sortare, limite)Simple (după cheie)
ScalareAutomatăPartiționare manuală
Mod offlineDa (cache persistent)Da
PrețPer operații citire/scrierePer trafic + stocare

Stocare securizată: Keystore, Keychain și EncryptedSharedPreferences

Stocarea tokenurilor, parolelor și cheilor de criptare necesită depozite protejate speciale.

Android Keystore

Android Keystore este un depozit de sistem pentru chei criptografice. Cheile sunt stocate într-un mediu hardware (TEE — Trusted Execution Environment), inaccesibil aplicațiilor și sistemului de operare. Suportă generarea de chei, criptare și semnare. Android 9+ include StrongBox Keymaster (cip dedicat).

iOS Keychain

Keychain Services este un depozit securizat iOS pentru parole, chei și certificate. Datele sunt criptate folosind Secure Enclave hardware. Keychain suportă niveluri de accesibilitate: Always, WhenUnlocked, WhenUnlockedThisDeviceOnly, AfterFirstUnlock.

EncryptedSharedPreferences (Android)

EncryptedSharedPreferences este un wrapper peste SharedPreferences cu criptare chei și valori prin AES256-GCM și HKDF. Implementat în biblioteca AndroidX Security. Recomandat pentru stocarea tokenurilor și setărilor sensibile.

La IT Sectr, folosim Android Keystore + EncryptedSharedPreferences pentru stocarea tokenurilor de reîmprospătare și cheilor biometrice. Pe iOS, folosim Keychain cu nivelul kSecAttrAccessibleWhenUnlockedThisDeviceOnly pentru securitate maximă.

Stocare fișiere: Internal, External, Cache Directory

Pentru stocarea fișierelor (imagini, videoclipuri, documente), platformele mobile oferă mai multe tipuri de stocare.

Android Storage

Android face distincție între Internal Storage (/data/data/pachet/ — stocare privată) și External Storage (card SD sau partiție emulată). Cache Directory este stocare temporară pe care sistemul o poate curăța. Scoped Storage (Android 10+) restricționează accesul la External Storage — aplicațiile văd doar propriile fișiere sau fișiere prin MediaStore/SAF.

iOS Storage

iOS oferă Documents Directory (backup iCloud, date persistente), Library/Caches (fișiere temporare, fără backup) și Tmp Directory (temporare, pot fi curățate). Utilizați NSFileManager pentru lucrul cu sistemul de fișiere. iOS 11+ suportă File Provider pentru fișiere cloud.

Serializarea datelor: JSON, Protobuf și biblioteci

Serializarea convertește obiectele într-un format pentru transmitere sau stocare. Deserializarea este procesul invers.

Formate

JSON (JavaScript Object Notation) este cel mai popular format: lizibil, flexibil, acceptat de toate platformele. XML este mai strict, utilizat în sisteme moștenite. Protobuf (Protocol Buffers) este un format binar de la Google: de 3-10 ori mai compact decât JSON, parsare mai rapidă, cu schemă strictă. Folosit pentru sisteme cu încărcare mare și microservicii.

Biblioteci Android

  • Gson (Google) — simplu, flexibil, dar lent. Funcționează automat cu obiecte Java/Kotlin
  • Moshi (Square) — mai rapid decât Gson, suport Kotlin mai bun (proprietăți non-null, valori implicite, clase sealed)
  • kotlinx.serialization — serializare Kotlin nativă de la JetBrains, funcționează la compilare, suportă JSON, Protobuf, CBOR

Biblioteci iOS

JSONSerialization este API-ul încorporat pentru lucrul cu JSON. Codable (Encodable/Decodable) este un protocol Swift modern pentru serializare automată în JSON, Property List și alte formate.

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)

Soluții cross-platform: Hive, ObjectBox, Drift

Pentru Flutter și React Native există biblioteci de stocare eficiente proprii.

Hive (Flutter)

Hive este un depozit cheie-valoare ușor și rapid pentru Flutter. Nu necesită cod nativ (Dart pur), suportă tipizarea prin TypeAdapter și funcționează în izolate. Ideal pentru cache, setări și volume mici de date.

ObjectBox

ObjectBox este o bază de date încorporată de înaltă performanță pentru Flutter, Android și iOS. Este de 10+ ori mai rapidă decât SQLite, folosește o structură de fișier plată pentru un overhead minim. Suportă relații, interogări și abonamente reactive (ObjectBox Dart).

Drift (fost Moor)

Drift este o bibliotecă SQLite reactivă pentru Flutter și Dart. Oferă interogări tip-securizate, migrări, funcții DAO și suport Stream (actualizări reactive). Drift este alegerea principală pentru proiectele Flutter care necesită SQLite.

Întrebări frecvente

Ce este mai bun pentru stocarea locală a datelor: Room sau Core Data?

Alegerea depinde de platformă: Room (Android) este biblioteca oficială bazată pe SQLite cu verificarea interogărilor în timpul compilării. Core Data (iOS) este framework-ul Apple cu un graf de obiecte. Pentru proiecte cross-platform, Realm sau SQLite prin ORM sunt potrivite.

Care este diferența dintre SharedPreferences și DataStore?

SharedPreferences este o implementare veche cu acces sincron și risc ANR. DataStore (Jetpack) este un înlocuitor modern bazat pe Kotlin Coroutines și Flow, care suportă asincronitate, tipizare și protecție împotriva erorilor.

Cum să stocați în siguranță tokenurile și parolele într-o aplicație mobilă?

Android: EncryptedSharedPreferences sau Android Keystore. iOS: Keychain Services cu accesibilitatea WhenUnlockedThisDeviceOnly. Pentru date critice, utilizați Secure Enclave (iOS) și Keystore hardware (Android) cu biometrie.

Ce este Firebase Firestore și când ar trebui utilizat?

Cloud Firestore este o bază de date NoSQL de la Firebase cu sincronizare în timp real, mod offline și scalare automată. Potrivită pentru chat-uri, fluxuri de știri și proiecte care necesită sincronizare între dispozitive.

Ce ORM-uri există pentru Flutter și React Native?

Flutter: Hive (cheie-valoare rapid), Floor (ORM SQLite), Drift (Moor, SQLite reactiv), ObjectBox (bază de date încorporată de înaltă performanță). React Native: Realm, WatermelonDB (încărcare lentă) și AsyncStorage (analog SharedPreferences).

Rezumat

  • Room (Android) și Core Data (iOS) sunt soluțiile oficiale pentru baze de date relaționale pe fiecare platformă
  • DataStore înlocuiește SharedPreferences pentru stocarea asincronă a setărilor
  • Keystore / Keychain sunt obligatorii pentru stocarea sigură a tokenurilor și cheilor
  • Firebase Firestore este cea mai bună alegere pentru sincronizarea în timp real între dispozitive
  • Kotlinx.serialization (Android) și Codable (iOS) sunt abordări moderne de serializare
  • Pentru Flutter: Drift (SQLite), Hive (cheie-valoare), ObjectBox (performanță ridicată)
  • Realm este o alternativă cross-platform la SQLite cu notificări reactive

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul