ObjectBox: co to je, NoSQL databáze a práce s daty

Autor: IT Sectr Publikováno: 2026-03-13 Doba čtení: 9 min

ObjectBox je výkonná NoSQL databáze optimalizovaná pro mobilní a edge zařízení. Na rozdíl od SQLite používá vlastní formát úložiště založený na plochých souborech bez SQL vrstvy. Podle ObjectBox Benchmarks, 2024, ObjectBox provádí operace vkládání a čtení 10–100krát rychleji než SQLite na zařízeních Android, což z něj činí nejlepší volbu pro vysoce zatížené mobilní aplikace.

Hlavní body

  • ObjectBox — NoSQL databáze s plochými soubory, bez SQL a ORM vrstvy
  • Výkon — 10–100krát rychlejší než SQLite při operacích zápisu a čtení
  • Multiplatformnost — Android, iOS, Linux, macOS, Windows a WebAssembly
  • Reaktivita — vestavěné Observable a Flow pro sledování změn
  • Snadná integrace — generování kódu pomocí anotací, bez SQL dotazů

Co je ObjectBox?

ObjectBox je in-memory NoSQL databáze vyvinutá německou společností ObjectBox.io. Na rozdíl od tradičních relačních databází ukládá ObjectBox objekty přímo do plochých souborů pomocí vlastního formátu SLOT (Super Lightweight Object Tree). To eliminuje režii ORM a SQL parseru. Formát SLOT je optimalizován pro práci na zařízeních s omezenou pamětí: data jsou automaticky defragmentována a velikost databáze je v průměru 4–6krát menší než ekvivalentní databáze SQLite se stejným počtem záznamů.

ObjectBox podporuje všechny hlavní mobilní platformy: Android, iOS a Flutter. Pro Android je k dispozici generování kódu prostřednictvím ObjectBox Gradle Plugin, který zpracovává anotované entity a vytváří třídy Box pro práci s daty. Pro Flutter se používá nativní plugin s Dart obalem. Kromě mobilních platforem ObjectBox funguje na Linux, macOS, Windows a WebAssembly, což umožňuje opětovné použití datového modelu mezi mobilní aplikací a synchronizací serveru.

Podle výzkumných dat ObjectBox (2023) se databáze používá ve více než 5000 aplikacích v Google Play, včetně aplikací s publikem přesahujícím 10 milionů uživatelů. Hlavní scénáře: ukládání do mezipaměti, práce v offline režimu a ukládání časových řad (IoT). ObjectBox je obzvláště populární v aplikacích pro sledování zdraví a fitness, kde je vyžadováno rychlé zaznamenávání údajů ze senzorů na zařízení bez stálého internetového připojení a shromažďování analýz z více zařízení.

Historie a pozicionování

ObjectBox se objevil jako alternativa k Realm a SQLite pro platformu Android. První stabilní verze byla vydána v roce 2018. Klíčový rozdíl oproti Realm — ObjectBox nemá omezení GPL (používá Apache 2.0) a podporuje více platforem: od mobilních zařízení po Linuxové servery.

Hlavní možnosti

ObjectBox poskytuje: automatické generování tříd Box, vestavěné indexy pro rychlé vyhledávání, transakce s podporou vrácení, reaktivní dotazy prostřednictvím RxJava a Kotlin Flow a synchronizaci mezi zařízeními prostřednictvím ObjectBox Sync (vlastní protokol). Na rozdíl od Firebase Realtime Database, ObjectBox Sync funguje v modelu peer-to-peer bez centrálního serveru, což snižuje latenci a náklady na infrastrukturu.

Jak ObjectBox funguje?

ObjectBox ukládá data ve vlastním binárním formátu .mdb (ObjectBox Data File). Každá entita je mapována na jeden soubor, kde jsou záznamy uloženy sekvenčně s pevným offsetem. To umožňuje číst a zapisovat jednotlivé objekty bez úplného skenování souboru.

Pro práci s ObjectBox není potřeba SQL: dotazy se vytvářejí prostřednictvím fluent-API v kódu. Kompilátor generuje pomocné třídy MyObjectBox a boxy (Box), které zapouzdřují všechny operace CRUD. Datový model je popsán prostřednictvím anotací @Entity, @Id, @Index a @Relation.

kotlin
// Připojení ObjectBox v Androidu
class App: Application() {
    lateinit var boxStore: BoxStore

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

ObjectBox vs SQLite: srovnání výkonu

Podle oficiálních benchmarků ObjectBox výrazně překonává SQLite v rychlosti operací, zejména při dávkovém vkládání a hromadném čtení. SQLite však zůstává de facto standardem pro mobilní aplikace díky rozšířenosti a vestavěné podpoře SQL.

OperaceObjectBoxSQLiteRozdíl
Vkládání (1000 záznamů)~5 ms~180 msx36 rychlejší
Čtení (1000 záznamů)~3 ms~70 msx23 rychlejší
Aktualizace (1000 záznamů)~6 ms~150 msx25 rychlejší
Vyhledávání podle indexu~0.1 ms~2 msx20 rychlejší
Velikost databáze (1000 objektů)~28 KB~112 KB4krát menší

Kdy ObjectBox není optimální

ObjectBox prohrává s SQLite ve scénářích, kde jsou potřeba složité JOIN dotazy, agregační funkce (SUM, COUNT s grupováním) nebo integrace s existujícím SQL schématem. Pokud projekt již používá SQLite s Room ORM, migrace na ObjectBox bude vyžadovat přepsání celé logiky přístupu k datům. ObjectBox také nepodporuje vlastní SQL dotazy — pouze fluent-API. Pro typické operace CRUD a ukládání do mezipaměti však ObjectBox poskytuje zvýšení výkonu až 100krát, což potvrzují oficiální benchmarky na zařízeních Android s různými verzemi OS.

Příklady kódu s ObjectBox

ObjectBox používá anotace k definování entit. Po kompilaci se vytvoří třídy Box s metodami put, get, remove a query. Níže jsou uvedeny typické operace pro model Task v aplikaci seznamu úkolů.

Definice entity

Každá entita je anotována @Entity. Pole s @Id se stává primárním klíčem, @Index urychluje vyhledávání podle pole. ObjectBox podporuje automatické generování ID při hodnotě 0.

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

CRUD operace

Box je hlavní třída pro práci s entitami. Metoda put() ukládá nebo aktualizuje objekt, get() čte podle ID, remove() maže. Všechny základní operace jsou synchronní a provádějí se ve volajícím vlákně.

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

// Vytvoření
val task = Task(title = "Nákup produktů", priority = 3)
val newId = taskBox.put(task)

// Čtení
val savedTask = taskBox.get(newId)

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

// Smazání
taskBox.remove(newId)

Reaktivní dotazy

ObjectBox podporuje reaktivní dotazy prostřednictvím .subscribe(). Předplatitel dostává oznámení při každé změně dat odpovídající podmínce dotazu. To je vhodné pro UI, které automaticky aktualizuje seznam při přidávání nebo odebírání prvků.

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

query.subscribe { tasks ->
    // tasks — List, aktualizuje se automaticky
    updateUi(tasks)
}

Vztahy a dotazy v ObjectBox

ObjectBox podporuje vztahy mezi entitami — To-One, To-Many a Many-to-Many. Vztahy se definují pomocí anotace @Relation. Na rozdíl od SQLite, ObjectBox nepoužívá cizí klíče: vztahy jsou implementovány prostřednictvím seznamů ID v plochých souborech, což urychluje navigaci v grafu objektů.

One-to-Many prostřednictvím @Backlink

Vztah @Backlink umožňuje přechod z podřízené entity na nadřazenou bez samostatného referenčního pole. ObjectBox automaticky udržuje zpětný odkaz, čímž eliminuje duplikaci dat a synchronizaci mezi dvěma tabulkami.

Fluent dotazy

ObjectBox Query Builder umožňuje vytvářet řetězce podmínek: equal, notEqual, greater, less, in, contains, startsWith. Všechny podmínky se kombinují pomocí and/or. Výsledek lze třídit, omezit a získat jako List nebo LazyList (pro velké datové sady).

Konfigurace indexů pro urychlení vyhledávání

ObjectBox automaticky indexuje pole @Id. Pro vlastní indexy použijte anotaci @Index na polích, podle kterých se často dotazujete. Indexy urychlují dotazy equal a in, ale zpomalují vkládání — neindexujte pole, podle kterých se nevyhledává. ObjectBox podporuje složené indexy pro současné filtrování podle více polí. Složené indexy jsou zvláště užitečné pro filtry v seznamech: například vyhledávání nedokončených úkolů s vysokou prioritou je desítkykrát rychlejší se složeným indexem na polích isCompleted a priority.

ObjectBox Sync — synchronizace mezi zařízeními

ObjectBox Sync — proprietární technologie pro synchronizaci dat mezi zařízeními v reálném čase. Používá protokol založený na WebSocket s řešením konfliktů podle last-writer-wins. Sync je vhodný pro aplikace, které potřebují offline synchronizaci: poznámky, seznamy úkolů, IoT data z více senzorů. Pro produkci je však vyžadován nákup licence.

kotlin
// Dotaz s více podmínkami
val highPriorityIncomplete = taskBox.query()
    .greater(Task_.priority, 5)
    .equal(Task_.isCompleted, false)
    .build()
    .find()

// Vyhledávání podřetězce
val searchResults = taskBox.query()
    .contains(Task_.title, "produkt", StringOrder.CASE_INSENSITIVE)
    .build()
    .find()

Často kladené otázky

Je ObjectBox zdarma pro komerční použití?

ObjectBox je distribuován pod licencí Apache 2.0, která povoluje komerční použití bez omezení. Funkce ObjectBox Sync (multiplatformní synchronizace) je proprietární a vyžaduje nákup licence pro produkci.

Podporuje ObjectBox multithreading?

BoxStore je thread-safe: více vláken může současně číst data. Zápis je blokován na úrovni Box. Pro složité transakce použijte boxStore.runInTx(), který zaručuje atomicitu skupiny operací.

Lze ObjectBox použít s Kotlin Multiplatform?

Ano, ObjectBox podporuje Kotlin Multiplatform (KMP) od verze 3.0. K dispozici jsou cíle Android, iOS, JVM a Native. Pro KMP se používá samostatný Gradle plugin objectbox-kotlin s podporou expect/actual.

Jak vytvořit zálohu databáze ObjectBox?

ObjectBox ukládá data v souborech .mdb v adresáři aplikace. Pro zálohu zkopírujte celý adresář ObjectBox pomocí BoxStore.copy() nebo ručně po volání boxStore.close(). Živé soubory nelze kopírovat — poškodilo by to data.

Čím se ObjectBox liší od Room?

Room je ORM nad SQLite, vyžaduje SQL dotazy a má režii na mapování objektů. ObjectBox je NoSQL bez SQL, mnohem rychlejší, ale nepodporuje složité JOINy a není relační databází. Volba závisí na úkolu: pro relační data — Room, pro rychlé ukládání objektů — ObjectBox.

Shrnutí

  • ObjectBox — NoSQL databáze s 10–100krát vyšším výkonem než SQLite na mobilních zařízeních
  • Ploché soubory — vlastní formát SLOT bez SQL vrstvy a ORM nákladů
  • Anotace — @Entity, @Id, @Index, @Relation pro popis datového modelu
  • Reaktivita — vestavěné Observable a Flow pro automatickou aktualizaci UI
  • Multiplatformnost — Android, iOS, Linux, macOS, Windows, WebAssembly
  • Cache a offline — hlavní scénář ObjectBox v mobilních aplikacích
  • Doporučení — vyberte ObjectBox pro úkoly, kde je rychlost zpracování dat důležitější než relační integrita

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také