ObjectBox: Was ist das, NoSQL-DB und Arbeit mit Daten

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

ObjectBox ist eine hochleistungsfähige NoSQL-Datenbank, die für mobile und Edge-Geräte optimiert ist. Im Gegensatz zu SQLite verwendet sie ein eigenes Flat-File-Speicherformat ohne SQL-Ebene. Laut ObjectBox Benchmarks, 2024 führt ObjectBox Einfüge- und Leseoperationen 10–100 Mal schneller aus als SQLite auf Android-Geräten, was es zur besten Wahl für hochbelastete mobile Anwendungen macht.

Wichtige Punkte

  • ObjectBox — NoSQL-DB mit Flat-Files, ohne SQL- oder ORM-Ebene
  • Leistung — 10–100 Mal schneller als SQLite bei Schreib- und Leseoperationen
  • Plattformübergreifend — Android, iOS, Linux, macOS, Windows und WebAssembly
  • Reaktivität — integrierte Observable und Flow zur Änderungsverfolgung
  • Einfache Integration — Codegenerierung durch Annotationen, ohne SQL-Abfragen

Was ist ObjectBox?

ObjectBox ist eine In-Memory-NoSQL-Datenbank, die von der deutschen Firma ObjectBox.io entwickelt wurde. Im Gegensatz zu traditionellen relationalen Datenbanken speichert ObjectBox Objekte direkt in Flat-Files unter Verwendung seines eigenen SLOT-Formats (Super Lightweight Object Tree). Dies eliminiert den Overhead von ORM und SQL-Parsing. Das SLOT-Format ist für Geräte mit begrenztem Speicher optimiert: Daten werden automatisch defragmentiert, und die Datenbankgröße ist bei gleicher Anzahl von Datensätzen durchschnittlich 4–6 Mal kleiner als eine äquivalente SQLite-Datenbank.

ObjectBox unterstützt alle wichtigen mobilen Plattformen: Android, iOS und Flutter. Für Android ist die Codegenerierung über das ObjectBox Gradle Plugin verfügbar, das annotierte Entitäten verarbeitet und Box-Klassen für die Datenarbeit erstellt. Für Flutter wird ein natives Plugin mit einem Dart-Wrapper verwendet. Neben mobilen Plattformen läuft ObjectBox auf Linux, macOS, Windows und WebAssembly, was die Wiederverwendung des Datenmodells zwischen der mobilen App und der Serversynchronisation ermöglicht.

Laut einer ObjectBox-Studie (2023) wird die Datenbank in mehr als 5.000 Anwendungen bei Google Play verwendet, darunter Apps mit über 10 Millionen Nutzern. Hauptanwendungsfälle: Daten-Caching, Offline-Betrieb und Zeitreihenspeicherung (IoT). ObjectBox ist besonders beliebt in Gesundheits- und Fitness-Tracking-Apps, die schnelles Aufzeichnen von Sensorwerten auf dem Gerät ohne ständige Internetverbindung und das Sammeln von Analysen von mehreren Geräten erfordern.

Geschichte und Positionierung

ObjectBox entstand als Alternative zu Realm und SQLite für die Android-Plattform. Die erste stabile Version wurde 2018 veröffentlicht. Der Hauptunterschied zu Realm ist, dass ObjectBox keine GPL-Beschränkungen hat (verwendet Apache 2.0) und mehr Plattformen unterstützt: von mobilen Geräten bis zu Linux-Servern.

Hauptfunktionen

ObjectBox bietet: automatische Box-Klassengenerierung, integrierte Indizes für schnelle Suche, Transaktionen mit Rollback-Unterstützung, reaktive Abfragen über RxJava und Kotlin Flow sowie Geräte-zu-Geräte-Synchronisation über ObjectBox Sync (proprietäres Protokoll). Im Gegensatz zu Firebase Realtime Database arbeitet ObjectBox Sync nach einem Peer-to-Peer-Modell ohne zentralen Server, was Latenz und Infrastrukturkosten reduziert.

Wie funktioniert ObjectBox?

ObjectBox speichert Daten in seinem eigenen binären Format .mdb (ObjectBox Data File). Jede Entität wird auf eine Datei abgebildet, in der Datensätze sequentiell mit einem festen Offset gespeichert werden. Dies ermöglicht das Lesen und Schreiben einzelner Objekte ohne vollständiges Scannen der Datei.

Für die Arbeit mit ObjectBox ist kein SQL erforderlich: Abfragen werden über eine fluide API im Code erstellt. Der Compiler generiert Hilfsklassen MyObjectBox und Boxes, die alle CRUD-Operationen kapseln. Das Datenmodell wird durch Annotationen @Entity, @Id, @Index und @Relation beschrieben.

kotlin
// Connecting ObjectBox in Android
class App: Application() {
    lateinit var boxStore: BoxStore

    override fun onCreate() {
        super.onCreate()
        boxStore = MyObjectBox.builder()
            .androidContext(this)
            .build()
    }
}

ObjectBox vs SQLite: Leistungsvergleich

Laut offiziellen Benchmarks übertrifft ObjectBox SQLite in der Geschwindigkeit deutlich, insbesondere bei Batch-Einfügungen und Massen-Lesevorgängen. SQLite bleibt jedoch aufgrund seiner weiten Verbreitung und integrierten SQL-Unterstützung der De-facto-Standard für mobile Anwendungen.

OperationObjectBoxSQLiteUnterschied
Einfügen (1000 Datensätze)~5 ms~180 ms×36 schneller
Lesen (1000 Datensätze)~3 ms~70 ms×23 schneller
Aktualisieren (1000 Datensätze)~6 ms~150 ms×25 schneller
Index-Suche~0.1 ms~2 ms×20 schneller
DB-Größe (1000 Objekte)~28 KB~112 KB4 Mal kleiner

Wann ObjectBox nicht optimal ist

ObjectBox ist SQLite in Szenarien unterlegen, die komplexe JOIN-Abfragen, Aggregatfunktionen (SUM, COUNT mit Gruppierung) oder die Integration in ein bestehendes SQL-Schema erfordern. Wenn das Projekt bereits SQLite mit Room ORM verwendet, erfordert die Migration zu ObjectBox das Umschreiben der gesamten Datenzugriffslogik. ObjectBox unterstützt auch keine benutzerdefinierten SQL-Abfragen — nur eine fluide API. Für typische CRUD-Operationen und Caching bietet ObjectBox jedoch eine bis zu 100-fache Leistungsverbesserung, wie durch offizielle Benchmarks auf Android-Geräten mit verschiedenen OS-Versionen bestätigt.

Codebeispiele mit ObjectBox

ObjectBox verwendet Annotationen zur Definition von Entitäten. Nach der Kompilierung werden Box-Klassen mit put-, get-, remove- und query-Methoden erstellt. Nachfolgend sind typische Operationen für ein Task-Modell in einer To-Do-Listen-App aufgeführt.

Definieren einer Entität

Jede Entität wird mit @Entity annotiert. Ein Feld mit @Id wird zum Primärschlüssel, und @Index beschleunigt die Suche in diesem Feld. ObjectBox unterstützt die automatische ID-Generierung, wenn der Wert 0 ist.

kotlin
@Entity
data class Task(
    @Id var id: Long = 0,
    @Index var title: String = "",
    var isCompleted: Boolean = false,
    var priority: Int = 0
)

CRUD-Operationen

Box ist die Hauptklasse für die Arbeit mit Entitäten. Die Methode put() speichert oder aktualisiert ein Objekt, get() liest nach ID und remove() löscht. Alle grundlegenden Operationen sind synchron und werden im aufrufenden Thread ausgeführt.

kotlin
val taskBox: Box<Task> = boxStore.boxFor(Task::class.java)

// Create
val task = Task(title = "Buy products", priority = 3)
val newId = taskBox.put(task)

// Read
val savedTask = taskBox.get(newId)

// Update
savedTask.isCompleted = true
taskBox.put(savedTask)

// Delete
taskBox.remove(newId)

Reaktive Abfragen

ObjectBox unterstützt reaktive Abfragen über .subscribe(). Der Abonnent erhält Benachrichtigungen, wenn sich Daten ändern, die der Abfragebedingung entsprechen. Dies ist praktisch für die Benutzeroberfläche, die die Liste automatisch aktualisiert, wenn Elemente hinzugefügt oder entfernt werden.

kotlin
val query = taskBox.query()
    .equal(Task_.isCompleted, false)
    .orderDesc(Task_.priority)
    .build()

query.subscribe { tasks ->
    // tasks — List, wird automatisch aktualisiert
    updateUi(tasks)
}

Beziehungen und Abfragen in ObjectBox

ObjectBox unterstützt Beziehungen zwischen Entitäten — Eins-zu-Eins, Eins-zu-Viele und Viele-zu-Viele. Beziehungen werden über die @Relation-Annotation definiert. Im Gegensatz zu SQLite verwendet ObjectBox keine Fremdschlüssel: Beziehungen werden über ID-Listen in Flat-Files implementiert, was die Navigation im Objektgraphen beschleunigt.

Eins-zu-Viele über @Backlink

Die @Backlink-Beziehung ermöglicht den Zugriff von einer untergeordneten Entität auf ihre übergeordnete Entität ohne ein separates Referenzfeld. ObjectBox pflegt den Backlink automatisch, wodurch Datenduplizierung und Synchronisation zwischen zwei Tabellen entfallen.

Fluide Abfragen

ObjectBox Query Builder ermöglicht das Erstellen von Bedingungsketten: equal, notEqual, greater, less, in, contains, startsWith. Alle Bedingungen können über and/or kombiniert werden. Das Ergebnis kann sortiert, begrenzt und als List oder LazyList (für große Datensätze) abgerufen werden.

Einrichten von Indizes für schnellere Suche

ObjectBox indiziert automatisch das @Id-Feld. Für benutzerdefinierte Indizes verwenden Sie die @Index-Annotation auf Feldern, die häufig abgefragt werden. Indizes beschleunigen equal- und in-Abfragen, verlangsamen jedoch Einfügungen — indizieren Sie keine Felder, die nicht durchsucht werden. ObjectBox unterstützt zusammengesetzte Indizes zum gleichzeitigen Filtern nach mehreren Feldern. Zusammengesetzte Indizes sind besonders nützlich für Listenfilter: Beispielsweise ist die Suche nach unvollständigen Aufgaben mit hoher Priorität mit einem zusammengesetzten Index auf den Feldern isCompleted und priority um ein Vielfaches schneller.

ObjectBox Sync — Synchronisation zwischen Geräten

ObjectBox Sync ist eine proprietäre Technologie zur Echtzeit-Datensynchronisation zwischen Geräten. Sie verwendet ein WebSocket-basiertes Protokoll mit Konfliktlösung nach dem Last-Writer-Wins-Prinzip. Sync eignet sich für Apps, die eine Offline-Synchronisation benötigen: Notizen, Aufgabenlisten, IoT-Daten von mehreren Sensoren. Für die Produktion ist jedoch der Erwerb einer Lizenz erforderlich.

kotlin
// Query with multiple conditions
val highPriorityIncomplete = taskBox.query()
    .greater(Task_.priority, 5)
    .equal(Task_.isCompleted, false)
    .build()
    .find()

// Substring search
val searchResults = taskBox.query()
    .contains(Task_.title, "product", StringOrder.CASE_INSENSITIVE)
    .build()
    .find()

Häufig gestellte Fragen

Ist ObjectBox kostenlos für die kommerzielle Nutzung?

ObjectBox wird unter der Apache 2.0-Lizenz vertrieben, die eine uneingeschränkte kommerzielle Nutzung erlaubt. Die ObjectBox Sync-Funktion (plattformübergreifende Synchronisation) ist proprietär und erfordert den Erwerb einer Lizenz für die Produktion.

Unterstützt ObjectBox Multithreading?

BoxStore ist threadsicher: Mehrere Threads können gleichzeitig Daten lesen. Schreibvorgänge werden auf Box-Ebene gesperrt. Für komplexe Transaktionen verwenden Sie boxStore.runInTx(), das die Atomizität einer Gruppe von Operationen garantiert.

Kann ObjectBox mit Kotlin Multiplatform verwendet werden?

Ja, ObjectBox unterstützt Kotlin Multiplatform (KMP) ab Version 3.0. Verfügbar sind die Ziele Android, iOS, JVM und Native. Für KMP wird ein separates Gradle-Plugin objectbox-kotlin mit expect/actual-Unterstützung verwendet.

Wie sichert man eine ObjectBox-Datenbank?

ObjectBox speichert Daten in .mdb-Dateien im App-Verzeichnis. Für ein Backup kopieren Sie das gesamte ObjectBox-Verzeichnis über BoxStore.copy() oder kopieren Sie die Dateien manuell nach dem Aufruf von boxStore.close(). Live-Dateien können nicht kopiert werden — dies würde die Daten beschädigen.

Was ist der Unterschied zwischen ObjectBox und Room?

Room ist ein ORM auf Basis von SQLite, erfordert SQL-Abfragen und hat einen Object-Mapping-Overhead. ObjectBox ist eine NoSQL-Datenbank ohne SQL, eine Größenordnung schneller, unterstützt aber keine komplexen JOINs und ist keine relationale Datenbank. Die Wahl hängt von der Aufgabe ab: Für relationale Daten — Room, für schnelle Objektspeicherung — ObjectBox.

Zusammenfassung

  • ObjectBox — NoSQL-DB mit 10–100x Leistung gegenüber SQLite auf mobilen Geräten
  • Flat-Files — proprietäres SLOT-Format ohne SQL-Ebene und ORM-Overhead
  • Annotationen — @Entity, @Id, @Index, @Relation zur Beschreibung des Datenmodells
  • Reaktivität — integrierte Observable und Flow zur automatischen UI-Aktualisierung
  • Plattformübergreifend — Android, iOS, Linux, macOS, Windows, WebAssembly
  • Caching und Offline — primärer Anwendungsfall von ObjectBox in mobilen Apps
  • Empfehlung — wählen Sie ObjectBox für Aufgaben, bei denen die Datenzugriffsgeschwindigkeit wichtiger ist als die relationale Integrität

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

Lesen Sie auch