Datenspeicherung in der mobilen Entwicklung: was es ist, welche Methoden es gibt und wie es funktioniert

Autor: IT Sectr Veröffentlicht: 2026-03-08 Lesezeit: 9 Min.

Die Datenspeicherung ist eine der zentralen Aufgaben einer mobilen Anwendung und wirkt sich auf Leistung, Sicherheit und Benutzererfahrung aus. In diesem Artikel behandeln wir SQLite, Room, Core Data, Realm, Firebase Firestore, SharedPreferences, DataStore, Keystore und Keychain sowie Serialisierungsformate (JSON, Protobuf) und Bibliotheken (Gson, Moshi, kotlinx.serialization). Dieser Leitfaden hilft angehenden Entwicklern, die richtige Datenspeicherlösung zu finden. Weitere Informationen finden Sie im offiziellen Android-Leitfaden zur Datenspeicherung.

Wichtige Erkenntnisse

  • Room (Android) und Core Data (iOS) sind die offiziellen ORMs für die Arbeit mit relationalen Datenbanken auf jeder Plattform
  • SharedPreferences (Android) wird durch DataStore ersetzt — einen asynchronen und typsicheren Schlüssel-Wert-Speicher
  • Für die sichere Speicherung von Token werden Keystore (Android) und Keychain (iOS) mit Hardwareschutz verwendet
  • Firebase Firestore ist eine NoSQL-Datenbank mit Echtzeitsynchronisierung und Offline-Modus
  • Serialisierung — Konvertierung von Objekten in JSON/Protobuf mit Gson, Moshi, kotlinx.serialization

Lokale Datenbanken: SQLite, Room, Core Data, Realm

Für die Speicherung strukturierter Daten mit Beziehungen zwischen Entitäten werden relationale Datenbanken verwendet.

SQLite

SQLite ist eine eingebettete relationale Datenbank, die auf allen mobilen Plattformen funktioniert. Sie benötigt keinen separaten Server, die Daten werden in einer einzigen Datei gespeichert. SQLite ist die Grundlage für Room (Android) und optional für Core Data (iOS). Bibliotheken: android.database.sqlite (Android), FMDB/Core Data (iOS), sqflite (Flutter).

Room (Android)

Room ist die offizielle Android Architecture Components Bibliothek für die Arbeit mit SQLite. Sie bietet eine ORM-Schicht: Entity (Tabelle), DAO (Abfragen), Database (Einstiegspunkt). Room prüft SQL-Abfragen zur Kompilierzeit, unterstützt Koroutinen und Flow und migriert das Schema automatisch.

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 ist Apples Framework zur Verwaltung eines Objektgraphen. Es ist keine reine Datenbank — es ist eine Persistenzschicht über SQLite, XML oder binärem Speicher. Core Data verwaltet Objekte (NSManagedObject), Beziehungen, Schema-Versionierung, Rückgängig/Wiederholen und Multithreading über NSManagedObjectContext.

Realm

Realm ist eine Alternative zu SQLite, entwickelt als Hochleistungs-Mobil-Datenbank. Realm ist beim Lesen und Schreiben schneller als SQLite, unterstützt reaktive Benachrichtigungen (Live Objects), Verschlüsselung im laufenden Betrieb und Plattformübergreifend (Android, iOS, Flutter, React Native). Nachteile: größere APK/IPA-Größe und höherer Speicherverbrauch.

Schlüssel-Wert-Speicher und Einstellungen

Für die Speicherung kleiner Datenmengen (Einstellungen, Token, Cache) werden einfache Schlüssel-Wert-Speicher verwendet.

SharedPreferences (Android)

SharedPreferences ist ein veralteter Schlüssel-Wert-Speicher in Android. Nachteile: synchroner Zugriff (blockiert die UI beim Lesen), fehlende Typisierung, ANR-Risiko beim Laden großer Dateien. NICHT für neue Projekte empfohlen.

DataStore (Jetpack Android)

DataStore ist der moderne Ersatz für SharedPreferences von Google. Es arbeitet asynchron über Kotlin Coroutines und Flow, unterstützt Preferences DataStore (Schlüssel-Wert) und Proto DataStore (typisierte Daten über Protobuf). DataStore ist sicher für den UI-Thread und unterstützt Transaktionen.

NSUserDefaults (iOS)

UserDefaults ist der Standardspeicher für kleine Einstellungen in iOS. Es unterstützt primitive Typen, Zeichenketten, Daten und Data. UserDefaults ist synchron und daher nicht für große Datenmengen geeignet. Die Registrierung von Werten über register(defaults:) legt Standardwerte fest.

Cloud-Datenbanken: Firebase Firestore und Realtime DB

Für die Datenspeicherung in Anwendungen, die eine Synchronisierung zwischen Geräten erfordern, werden Firebase-Cloud-Datenbanken verwendet.

Cloud Firestore

Firebase Firestore ist eine NoSQL-Dokumentendatenbank mit Echtzeit-Abonnements, automatischer Skalierung, leistungsstarken Abfragen und integriertem Offline-Modus. Daten werden in Sammlungen und Dokumenten (JSON-ähnliche Strukturen) organisiert. Firestore unterstützt Transaktionen und Batch-Operationen. Ideal für Chats, Feeds und soziale Apps.

Firebase Realtime Database

Firebase Realtime Database ist eine ältere Firebase-NoSQL-Datenbank, die Daten als einzelnen JSON-Baum speichert. Einfacher als Firestore, aber weniger flexibel bei Abfragen und Skalierung. Empfohlen für einfache Echtzeitanwendungen (Online-Status, einfache Chats).

Merkmal Cloud Firestore Firebase Realtime DB
DatenmodellSammlungen → DokumenteJSON-Baum
AbfragenKomplex (Filtern, Sortieren, Grenzen)Einfach (nach Schlüssel)
SkalierungAutomatischManuelles Sharding
Offline-ModusJa (persistenter Cache)Ja
PreisPro Lese-/SchreiboperationPro Traffic + Speicher

Sicherer Speicher: Keystore, Keychain und EncryptedSharedPreferences

Die Speicherung von Token, Passwörtern und Verschlüsselungsschlüsseln erfordert spezielle geschützte Speicher.

Android Keystore

Android Keystore ist ein Systemspeicher für kryptografische Schlüssel. Schlüssel werden in einer Hardware-Umgebung (TEE — Trusted Execution Environment) gespeichert, die für Apps und das Betriebssystem unzugänglich ist. Unterstützt Schlüsselgenerierung, Verschlüsselung und Signierung. Ab Android 9+ mit StrongBox Keymaster (dedizierter Chip).

iOS Keychain

Keychain Services ist ein sicherer iOS-Speicher für Passwörter, Schlüssel und Zertifikate. Daten werden mit der Hardware Secure Enclave verschlüsselt. Keychain unterstützt Zugänglichkeitsstufen: Always, WhenUnlocked, WhenUnlockedThisDeviceOnly, AfterFirstUnlock.

EncryptedSharedPreferences (Android)

EncryptedSharedPreferences ist ein Wrapper um SharedPreferences mit Schlüssel- und Wertverschlüsselung über AES256-GCM und HKDF. Implementiert in der AndroidX Security Bibliothek. Empfohlen für die Speicherung von Token und vertraulichen Einstellungen.

Bei IT Sectr verwenden wir Android Keystore + EncryptedSharedPreferences zur Speicherung von Aktualisierungstoken und biometriebasierten Schlüsseln. Auf iOS verwenden wir Keychain mit der Stufe kSecAttrAccessibleWhenUnlockedThisDeviceOnly für maximale Sicherheit.

Dateispeicher: Internal, External, Cache Directory

Für die Dateispeicherung (Bilder, Videos, Dokumente) bieten mobile Plattformen verschiedene Speichertypen.

Android Storage

Android unterscheidet zwischen Internal Storage (/data/data/package/ — privater Speicher) und External Storage (SD-Karte oder emulierte Partition). Cache Directory ist temporärer Speicher, den das System löschen kann. Scoped Storage (Android 10+) schränkt den Zugriff auf External Storage ein — Apps sehen nur ihre eigenen Dateien oder Dateien über MediaStore/SAF.

iOS Storage

iOS bietet Documents Directory (iCloud-Backup, persistente Daten), Library/Caches (temporäre Dateien, kein Backup) und Tmp Directory (temporär, löschbar). Verwenden Sie NSFileManager für die Arbeit mit dem Dateisystem. iOS 11+ unterstützt File Provider für Cloud-Dateien.

Datenserialisierung: JSON, Protobuf und Bibliotheken

Serialisierung konvertiert Objekte in ein Format für die Übertragung oder Speicherung. Deserialisierung ist der umgekehrte Prozess.

Formate

JSON (JavaScript Object Notation) ist das beliebteste Format: lesbar, flexibel, von allen Plattformen unterstützt. XML ist strenger, wird in Legacy-Systemen verwendet. Protobuf (Protocol Buffers) ist ein binäres Format von Google: 3-10x kompakter als JSON, schneller zu parsen, mit striktem Schema. Wird für Hochlastsysteme und Mikrodienste verwendet.

Android-Bibliotheken

  • Gson (Google) — einfach, flexibel, aber langsam. Arbeitet automatisch mit Java/Kotlin-Objekten
  • Moshi (Square) — schneller als Gson, bessere Kotlin-Unterstützung (nicht-null Eigenschaften, Standardwerte, versiegelte Klassen)
  • kotlinx.serialization — native Kotlin-Serialisierung von JetBrains, arbeitet zur Kompilierzeit, unterstützt JSON, Protobuf, CBOR

iOS-Bibliotheken

JSONSerialization ist die integrierte API für die Arbeit mit JSON. Codable (Encodable/Decodable) ist ein modernes Swift-Protokoll für die automatische Serialisierung in JSON, Property List und andere 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)

Plattformübergreifende Lösungen: Hive, ObjectBox, Drift

Für Flutter und React Native gibt es eigene effiziente Speicherbibliotheken.

Hive (Flutter)

Hive ist ein leichter, schneller Schlüssel-Wert-Speicher für Flutter. Benötigt keinen nativen Code (reines Dart), unterstützt Typisierung über TypeAdapter und arbeitet in Isolaten. Ideal für Cache, Einstellungen und kleine Datenmengen.

ObjectBox

ObjectBox ist eine hochleistungsfähige eingebettete Datenbank für Flutter, Android und iOS. Sie ist 10x schneller als SQLite und verwendet eine flache Dateistruktur für minimalen Overhead. Unterstützt Beziehungen, Abfragen und reaktive Abonnements (ObjectBox Dart).

Drift (ehemals Moor)

Drift ist eine reaktive SQLite-Bibliothek für Flutter und Dart. Sie bietet typsichere Abfragen, Migrationen, DAO-Funktionen und Stream-Unterstützung (reaktive Aktualisierungen). Drift ist die erste Wahl für Flutter-Projekte, die SQLite benötigen.

Häufig gestellte Fragen

Was ist besser für die lokale Datenspeicherung: Room oder Core Data?

Die Wahl hängt von der Plattform ab: Room (Android) ist die offizielle SQLite-basierte Bibliothek mit Kompilierzeit-Prüfung. Core Data (iOS) ist Apples Framework mit Objektgraph. Für plattformübergreifende Projekte sind Realm oder SQLite über ORM geeignet.

Was ist der Unterschied zwischen SharedPreferences und DataStore?

SharedPreferences ist eine alte Implementierung mit synchronem Zugriff und ANR-Risiko. DataStore (Jetpack) ist ein moderner Ersatz auf Basis von Kotlin Coroutines und Flow, der Asynchronität, Typisierung und Fehlerschutz unterstützt.

Wie speichert man Token und Passwörter sicher in einer mobilen App?

Android: EncryptedSharedPreferences oder Android Keystore. iOS: Keychain Services mit Zugänglichkeit WhenUnlockedThisDeviceOnly. Für kritische Daten verwenden Sie Secure Enclave (iOS) und Hardware-Keystore (Android) mit Biometrie.

Was ist Firebase Firestore und wann sollte man es verwenden?

Cloud Firestore ist eine NoSQL-Datenbank von Firebase mit Echtzeitsynchronisierung, Offline-Modus und automatischer Skalierung. Geeignet für Chats, Nachrichtenfeeds und Projekte, die eine Synchronisierung zwischen Geräten benötigen.

Welche ORMs gibt es für Flutter und React Native?

Flutter: Hive (schneller Schlüssel-Wert), Floor (SQLite ORM), Drift (Moor, reaktives SQLite), ObjectBox (hochleistungsfähige eingebettete DB). React Native: Realm, WatermelonDB (Lazy Loading) und AsyncStorage (Analog zu SharedPreferences).

Zusammenfassung

  • Room (Android) und Core Data (iOS) sind die offiziellen Lösungen für relationale Datenbanken auf jeder Plattform
  • DataStore ersetzt SharedPreferences für die asynchrone Speicherung von Einstellungen
  • Keystore / Keychain sind für die sichere Speicherung von Token und Schlüsseln obligatorisch
  • Firebase Firestore ist die beste Wahl für die Echtzeitsynchronisierung zwischen Geräten
  • Kotlinx.serialization (Android) und Codable (iOS) sind moderne Serialisierungsansätze
  • Für Flutter: Drift (SQLite), Hive (Schlüssel-Wert), ObjectBox (hohe Leistung)
  • Realm ist eine plattformübergreifende Alternative zu SQLite mit reaktiven Benachrichtigungen

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen