Gegevensopslag in mobiele ontwikkeling: wat het is, methoden en hoe het werkt

Auteur: IT Sectr Gepubliceerd: 2026-03-08 Leestijd: 9 min

Gegevensopslag is een van de belangrijkste taken van een mobiele applicatie en beïnvloedt prestaties, beveiliging en gebruikerservaring. In dit artikel behandelen we SQLite, Room, Core Data, Realm, Firebase Firestore, SharedPreferences, DataStore, Keystore en Keychain, evenals serialisatieformaten (JSON, Protobuf) en bibliotheken (Gson, Moshi, kotlinx.serialization). Deze gids helpt beginnende ontwikkelaars de juiste oplossing voor gegevensopslag te kiezen. Meer informatie vindt u in de officiële Android-handleiding voor gegevensopslag.

Belangrijkste punten

  • Room (Android) en Core Data (iOS) zijn de officiële ORM's voor het werken met relationele databases op elk platform
  • SharedPreferences (Android) wordt vervangen door DataStore — een asynchrone en typeveilige sleutel-waarde opslag
  • Voor veilige opslag van tokens worden Keystore (Android) en Keychain (iOS) met hardwarematige beveiliging gebruikt
  • Firebase Firestore is een NoSQL-database met real-time synchronisatie en offline modus
  • Serialisatie — omzetten van objecten naar JSON/Protobuf via Gson, Moshi, kotlinx.serialization

Lokale databases: SQLite, Room, Core Data, Realm

Voor het opslaan van gestructureerde gegevens met relaties tussen entiteiten worden relationele databases gebruikt.

SQLite

SQLite is een ingebedde relationele database die op elk mobiel platform werkt. Het vereist geen aparte server en gegevens worden in één bestand opgeslagen. SQLite is de basis voor Room (Android) en optioneel voor Core Data (iOS). Bibliotheken: android.database.sqlite (Android), FMDB/Core Data (iOS), sqflite (Flutter).

Room (Android)

Room is de officiële Android Architecture Components-bibliotheek voor het werken met SQLite. Het biedt een ORM-laag: Entity (tabel), DAO (query's), Database (ingangspunt). Room controleert SQL-query's tijdens het compileren, ondersteunt coroutines en Flow en migreert automatisch het 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 is het framework van Apple voor het beheren van een objectgraaf. Het is geen pure database — het is een persistentielaag bovenop SQLite, XML of binaire opslag. Core Data beheert objecten (NSManagedObject), relaties, schemaversiebeheer, ongedaan maken/opnieuw uitvoeren en multithreading via NSManagedObjectContext.

Realm

Realm is een alternatief voor SQLite, ontworpen als een hoogwaardige mobiele database. Realm is sneller dan SQLite bij lezen en schrijven, ondersteunt reactieve meldingen (Live Objects), on-the-fly encryptie en cross-platform (Android, iOS, Flutter, React Native). Nadelen: grotere APK/IPA-grootte en hoger geheugengebruik.

Sleutel-waarde opslag en instellingen

Voor het opslaan van kleine hoeveelheden gegevens (instellingen, tokens, cache) worden eenvoudige sleutel-waarde opslagen gebruikt.

SharedPreferences (Android)

SharedPreferences is een verouderde sleutel-waarde opslag in Android. Nadelen: synchrone toegang (blokkeert UI bij lezen), gebrek aan typering, ANR-risico bij het laden van grote bestanden. NIET aanbevolen voor nieuwe projecten.

DataStore (Jetpack Android)

DataStore is de moderne vervanging van SharedPreferences van Google. Het werkt asynchroon via Kotlin Coroutines en Flow, ondersteunt Preferences DataStore (sleutel-waarde) en Proto DataStore (getypeerde gegevens via Protobuf). DataStore is veilig voor de UI-thread en ondersteunt transacties.

NSUserDefaults (iOS)

UserDefaults is de standaardopslag voor kleine instellingen in iOS. Het ondersteunt primitieve typen, tekenreeksen, datums, Data. UserDefaults is synchroon en daarom niet geschikt voor grote gegevensvolumes. Registratie van waarden via register(defaults:) stelt standaardwaarden in.

Clouddatabases: Firebase Firestore en Realtime DB

Voor gegevensopslag in toepassingen die synchronisatie tussen apparaten vereisen, worden Firebase-clouddatabases gebruikt.

Cloud Firestore

Firebase Firestore is een NoSQL-documentdatabase met real-time abonnementen, automatisch schalen, krachtige query's en ingebouwde offline modus. Gegevens worden georganiseerd in verzamelingen en documenten (JSON-achtige structuren). Firestore ondersteunt transacties en batchbewerkingen. Ideaal voor chats, feeds en sociale apps.

Firebase Realtime Database

Firebase Realtime Database is een oudere Firebase NoSQL-database die gegevens opslaat als één JSON-boom. Eenvoudiger dan Firestore maar minder flexibel in query's en schalen. Aanbevolen voor eenvoudige real-time toepassingen (online status, eenvoudige chats).

KenmerkCloud FirestoreFirebase Realtime DB
GegevensmodelVerzamelingen → DocumentenJSON-boom
Query'sComplex (filteren, sorteren, limieten)Eenvoudig (op sleutel)
SchalenAutomatischHandmatig sharden
Offline modusJa (permanente cache)Ja
PrijzenPer lees-/schrijfbewerkingPer verkeer + opslag

Veilige opslag: Keystore, Keychain en EncryptedSharedPreferences

Het opslaan van tokens, wachtwoorden en encryptiesleutels vereist speciale beveiligde opslag.

Android Keystore

Android Keystore is een systeemopslag voor cryptografische sleutels. Sleutels worden opgeslagen in een hardwareomgeving (TEE — Trusted Execution Environment), ontoegankelijk voor apps en het besturingssysteem. Het ondersteunt sleutelgeneratie, encryptie en ondertekening. Android 9+ bevat StrongBox Keymaster (dedicated chip).

iOS Keychain

Keychain Services is een veilige iOS-opslag voor wachtwoorden, sleutels en certificaten. Gegevens worden versleuteld met behulp van de hardware Secure Enclave. Keychain ondersteunt toegankelijkheidsniveaus: Always, WhenUnlocked, WhenUnlockedThisDeviceOnly, AfterFirstUnlock.

EncryptedSharedPreferences (Android)

EncryptedSharedPreferences is een wrapper rond SharedPreferences met sleutel- en waardecodering via AES256-GCM en HKDF. Geïmplementeerd in de AndroidX Security-bibliotheek. Aanbevolen voor het opslaan van tokens en gevoelige instellingen.

Bij IT Sectr gebruiken we Android Keystore + EncryptedSharedPreferences voor het opslaan van vernieuwingstokens en biometrische sleutels. Op iOS gebruiken we Keychain met het niveau kSecAttrAccessibleWhenUnlockedThisDeviceOnly voor maximale beveiliging.

Bestandsopslag: Internal, External, Cache Directory

Voor bestandsopslag (afbeeldingen, video's, documenten) bieden mobiele platforms verschillende soorten opslag.

Android Storage

Android maakt onderscheid tussen Internal Storage (/data/data/package/ — privéopslag) en External Storage (SD-kaart of geëmuleerde partitie). Cache Directory is tijdelijke opslag die het systeem kan wissen. Scoped Storage (Android 10+) beperkt de toegang tot External Storage — apps zien alleen hun eigen bestanden of bestanden via MediaStore/SAF.

iOS Storage

iOS biedt Documents Directory (iCloud-back-up, permanente gegevens), Library/Caches (tijdelijke bestanden, geen back-up) en Tmp Directory (tijdelijk, kunnen worden gewist). Gebruik NSFileManager om met het bestandssysteem te werken. iOS 11+ ondersteunt File Provider voor cloudbestanden.

Gegevensserialisatie: JSON, Protobuf en bibliotheken

Serialisatie converteert objecten naar een formaat voor verzending of opslag. Deserialisatie is het omgekeerde proces.

Formaten

JSON (JavaScript Object Notation) is het populairste formaat: leesbaar, flexibel, ondersteund door alle platforms. XML is strikter, gebruikt in verouderde systemen. Protobuf (Protocol Buffers) is een binair formaat van Google: 3-10x compacter dan JSON, sneller te parseren, met een strikt schema. Gebruikt voor systemen met hoge belasting en microservices.

Android-bibliotheken

  • Gson (Google) — eenvoudig, flexibel, maar traag. Werkt automatisch met Java/Kotlin-objecten
  • Moshi (Square) — sneller dan Gson, betere Kotlin-ondersteuning (niet-null eigenschappen, standaardwaarden, sealed klassen)
  • kotlinx.serialization — native Kotlin-serialisatie van JetBrains, werkt tijdens het compileren, ondersteunt JSON, Protobuf, CBOR

iOS-bibliotheken

JSONSerialization is de ingebouwde API voor het werken met JSON. Codable (Encodable/Decodable) is een modern Swift-protocol voor automatische serialisatie naar JSON, Property List en andere formaten.

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)

Cross-platformoplossingen: Hive, ObjectBox, Drift

Voor Flutter en React Native bestaan er eigen efficiënte opslagbibliotheken.

Hive (Flutter)

Hive is een lichte, snelle sleutel-waarde opslag voor Flutter. Het vereist geen native code (pure Dart), ondersteunt typering via TypeAdapter en werkt in isolates. Ideaal voor cache, instellingen en kleine gegevensvolumes.

ObjectBox

ObjectBox is een hoogwaardige ingebedde database voor Flutter, Android en iOS. Het is 10+ keer sneller dan SQLite en gebruikt een platte bestandsstructuur voor minimale overhead. Ondersteunt relaties, query's en reactieve abonnementen (ObjectBox Dart).

Drift (voorheen Moor)

Drift is een reactieve SQLite-bibliotheek voor Flutter en Dart. Het biedt typeveilige query's, migraties, DAO-functies en Stream-ondersteuning (reactieve updates). Drift is de primaire keuze voor Flutter-projecten die SQLite nodig hebben.

Veelgestelde vragen

Wat is beter voor lokale gegevensopslag: Room of Core Data?

De keuze hangt af van het platform: Room (Android) is de officiële SQLite-gebaseerde bibliotheek met compilatie-tijd querycontrole. Core Data (iOS) is het framework van Apple met een objectgraaf. Voor cross-platformprojecten zijn Realm of SQLite via ORM geschikt.

Wat is het verschil tussen SharedPreferences en DataStore?

SharedPreferences is een oude implementatie met synchrone toegang en ANR-risico. DataStore (Jetpack) is een moderne vervanging op basis van Kotlin Coroutines en Flow, die asynchroniteit, typering en foutbeveiliging ondersteunt.

Hoe bewaart u tokens en wachtwoorden veilig in een mobiele app?

Android: EncryptedSharedPreferences of Android Keystore. iOS: Keychain Services met toegankelijkheid WhenUnlockedThisDeviceOnly. Voor kritieke gegevens gebruikt u Secure Enclave (iOS) en hardware-Keystore (Android) met biometrie.

Wat is Firebase Firestore en wanneer moet het worden gebruikt?

Cloud Firestore is een NoSQL-database van Firebase met real-time synchronisatie, offline modus en automatisch schalen. Geschikt voor chats, nieuwsfeeds en projecten die synchronisatie tussen apparaten nodig hebben.

Welke ORM's bestaan er voor Flutter en React Native?

Flutter: Hive (snelle sleutel-waarde), Floor (SQLite ORM), Drift (Moor, reactieve SQLite), ObjectBox (hoogwaardige ingebedde DB). React Native: Realm, WatermelonDB (lazy loading) en AsyncStorage (vergelijkbaar met SharedPreferences).

Samenvatting

  • Room (Android) en Core Data (iOS) zijn de officiële oplossingen voor relationele databases op elk platform
  • DataStore vervangt SharedPreferences voor asynchrone opslag van instellingen
  • Keystore / Keychain zijn verplicht voor veilige opslag van tokens en sleutels
  • Firebase Firestore is de beste keuze voor real-time synchronisatie tussen apparaten
  • Kotlinx.serialization (Android) en Codable (iOS) zijn moderne serialisatiebenaderingen
  • Voor Flutter: Drift (SQLite), Hive (sleutel-waarde), ObjectBox (hoge prestaties)
  • Realm is een cross-platform alternatief voor SQLite met reactieve meldingen

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project