ObjectBox: ano ito, NoSQL DB at pagtatrabaho sa data

May-akda: IT Sectr Nai-publish: 2026-03-13 Oras ng pagbabasa: 9 min

Ang ObjectBox ay isang mataas na pagganap na NoSQL database na na-optimize para sa mga mobile at edge device. Hindi tulad ng SQLite, gumagamit ito ng sariling format ng imbakan batay sa mga flat file na walang SQL layer. Ayon sa ObjectBox Benchmarks, 2024, ang ObjectBox ay nagsasagawa ng mga operasyon ng pagpasok at pagbasa ng 10–100 beses na mas mabilis kaysa sa SQLite sa mga Android device, na ginagawa itong pinakamahusay na pagpipilian para sa mga high-load na mobile application.

Mga Pangunahing Punto

  • ObjectBox — NoSQL database na may flat file, walang SQL at ORM layer
  • Pagganap — 10–100 beses na mas mabilis kaysa sa SQLite sa pagsulat at pagbasa
  • Cross-platform — Android, iOS, Linux, macOS, Windows at WebAssembly
  • Reaktibidad — built-in na Observable at Flow para sa pagsubaybay ng mga pagbabago
  • Madaling integrasyon — code generation sa pamamagitan ng mga anotasyon, walang SQL query

Ano ang ObjectBox?

ObjectBox ay isang in-memory NoSQL database na binuo ng German company na ObjectBox.io. Hindi tulad ng tradisyonal na relational database, direktang nag-iimbak ang ObjectBox ng mga bagay sa flat file gamit ang sarili nitong SLOT (Super Lightweight Object Tree) na format. Inaalis nito ang overhead ng ORM at SQL parser. Ang SLOT format ay na-optimize para sa pagtatrabaho sa mga device na may limitadong memorya: ang data ay awtomatikong dinedefragment, at ang laki ng database ay nasa average na 4–6 na beses na mas maliit kaysa sa katumbas na SQLite database na may parehong bilang ng mga tala.

Sinusuportahan ng ObjectBox ang lahat ng pangunahing mobile platform: Android, iOS at Flutter. Para sa Android, available ang code generation sa pamamagitan ng ObjectBox Gradle Plugin na nagpoproseso ng mga naka-annotate na entity at lumilikha ng Box classes para sa pagtatrabaho sa data. Para sa Flutter, ginagamit ang native plugin na may Dart wrapper. Bukod sa mga mobile platform, gumagana ang ObjectBox sa Linux, macOS, Windows at WebAssembly, na nagpapahintulot sa muling paggamit ng modelo ng data sa pagitan ng mobile app at server synchronization.

Ayon sa data ng pananaliksik ng ObjectBox (2023), ang database ay ginagamit sa mahigit 5000 app sa Google Play, kabilang ang mga app na may audience na mahigit 10 milyong user. Mga pangunahing sitwasyon: pag-cache ng data, pagtatrabaho sa offline mode at pag-iimbak ng time series (IoT). Ang ObjectBox ay lalong popular sa mga health tracking at fitness app, kung saan kinakailangan ang mabilis na pag-record ng sensor readings sa device nang walang permanenteng koneksyon sa internet at pagkolekta ng analytics mula sa maraming device.

Kasaysayan at pagpoposisyon

ObjectBox ay lumitaw bilang alternatibo sa Realm at SQLite para sa Android platform. Ang unang stable na bersyon ay inilabas noong 2018. Pangunahing pagkakaiba sa Realm: ang ObjectBox ay walang mga limitasyon sa GPL (gumagamit ng Apache 2.0) at sumusuporta sa mas maraming platform: mula sa mobile device hanggang sa Linux server.

Mga pangunahing kakayahan

ObjectBox ay nagbibigay ng: awtomatikong pagbuo ng Box classes, built-in na index para sa mabilis na paghahanap, mga transaksyon na may suporta sa pag-urong, mga reaktibong query sa pamamagitan ng RxJava at Kotlin Flow, pati na rin ang synchronization sa pagitan ng mga device sa pamamagitan ng ObjectBox Sync (proprietary protocol). Hindi tulad ng Firebase Realtime Database, ang ObjectBox Sync ay gumagana sa peer-to-peer na modelo nang walang central server, na nagbabawas ng latency at mga gastos sa imprastraktura.

Paano gumagana ang ObjectBox?

ObjectBox ay nag-iimbak ng data sa sarili nitong binary .mdb (ObjectBox Data File) na format. Ang bawat entity ay naka-map sa isang file, kung saan ang mga tala ay iniimbak nang sunud-sunod na may fixed offset. Pinapayagan nito ang pagbasa at pagsulat ng mga indibidwal na bagay nang hindi kailangang i-scan ang buong file.

Para sa pagtatrabaho sa ObjectBox, hindi kailangan ang SQL: ang mga query ay binuo sa pamamagitan ng fluent-API sa code. Ang compiler ay bumubuo ng mga helper class na MyObjectBox at mga kahon (Box) na nag-e-encapsulate ng lahat ng CRUD operations. Ang modelo ng data ay inilalarawan sa pamamagitan ng mga anotasyon @Entity, @Id, @Index at @Relation.

kotlin
// Pagkonekta ng ObjectBox sa Android
class App: Application() {
    lateinit var boxStore: BoxStore

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

ObjectBox vs SQLite: paghahambing ng pagganap

Ayon sa opisyal na mga benchmark, ang ObjectBox ay makabuluhang nahihigitan ang SQLite sa bilis ng operasyon, lalo na sa batch insertion at mass reading. Gayunpaman, ang SQLite ay nananatiling de facto standard para sa mga mobile application dahil sa pagkalat at built-in na SQL support.

OperasyonObjectBoxSQLitePagkakaiba
Pagpasok (1000 tala)~5 ms~180 msx36 mas mabilis
Pagbasa (1000 tala)~3 ms~70 msx23 mas mabilis
Pag-update (1000 tala)~6 ms~150 msx25 mas mabilis
Paghahanap ayon sa index~0.1 ms~2 msx20 mas mabilis
Laki ng database (1000 bagay)~28 KB~112 KB4 na beses mas maliit

Kailan hindi optimal ang ObjectBox

ObjectBox ay natatalo sa SQLite sa mga sitwasyon kung saan kailangan ang mga kumplikadong JOIN query, aggregate functions (SUM, COUNT na may pagpapangkat) o integrasyon sa umiiral na SQL schema. Kung ang proyekto ay gumagamit na ng SQLite na may Room ORM, ang paglipat sa ObjectBox ay mangangailangan ng muling pagsulat ng buong lohika ng pag-access sa data. Hindi rin sinusuportahan ng ObjectBox ang custom na SQL query, tanging fluent-API. Gayunpaman, para sa tipikal na CRUD operations at caching, ang ObjectBox ay nagbibigay ng pagtaas ng pagganap hanggang 100 beses, na kinumpirma ng opisyal na mga benchmark sa Android device na may iba't ibang bersyon ng OS.

Mga halimbawa ng code sa ObjectBox

ObjectBox ay gumagamit ng mga anotasyon para sa pagtukoy ng mga entity. Pagkatapos ng compilation, nilikha ang Box classes na may mga pamamaraang put, get, remove at query. Sa ibaba ay ipinapakita ang mga tipikal na operasyon para sa modelong Task sa isang to-do list app.

Pagtukoy ng entity

Ang bawat entity ay naka-annotate ng @Entity. Ang field na may @Id ay nagiging pangunahing susi, ang @Index ay nagpapabilis ng paghahanap ayon sa field. Sinusuportahan ng ObjectBox ang awtomatikong pagbuo ng ID sa halagang 0.

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

CRUD operations

Box ay ang pangunahing klase para sa pagtatrabaho sa mga entity. Ang pamamaraang put() ay nag-iimbak o nag-a-update ng bagay, ang get() ay nagbabasa ayon sa ID, ang remove() ay nagtatanggal. Lahat ng pangunahing operasyon ay synchronous at isinasagawa sa tumatawag na thread.

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

// Paglikha
val task = Task(title = "Bumili ng mga produkto", priority = 3)
val newId = taskBox.put(task)

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

// Pag-update
savedTask.isCompleted = true
taskBox.put(savedTask)

// Pag-alis
taskBox.remove(newId)

Mga reaktibong query

ObjectBox ay sumusuporta sa mga reaktibong query sa pamamagitan ng .subscribe(). Ang subscriber ay tumatanggap ng mga abiso sa bawat pagbabago ng data na tumutugma sa kondisyon ng query. Ito ay maginhawa para sa UI na awtomatikong nag-a-update ng listahan kapag nagdadagdag o nagtatanggal ng mga elemento.

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

query.subscribe { tasks ->
    // tasks — List, awtomatikong ina-update
    updateUi(tasks)
}

Mga relasyon at query sa ObjectBox

ObjectBox ay sumusuporta sa mga relasyon sa pagitan ng mga entity — To-One, To-Many at Many-to-Many. Ang mga relasyon ay tinutukoy sa pamamagitan ng anotasyong @Relation. Hindi tulad ng SQLite, ang ObjectBox ay hindi gumagamit ng foreign key: ang mga relasyon ay ipinapatupad sa pamamagitan ng mga listahan ng ID sa flat file, na nagpapabilis sa pag-navigate sa graph ng bagay.

One-to-Many sa pamamagitan ng @Backlink

Ang relasyong @Backlink ay nagpapahintulot sa pag-navigate mula sa child entity patungo sa parent nang walang hiwalay na reference field. Awtomatikong pinapanatili ng ObjectBox ang back reference, na inaalis ang pagdoble ng data at synchronization sa pagitan ng dalawang table.

Fluent query

ObjectBox Query Builder ay nagpapahintulot sa pagbuo ng mga chain ng condition: equal, notEqual, greater, less, in, contains, startsWith. Lahat ng condition ay pinagsama sa pamamagitan ng and/or. Ang resulta ay maaaring i-sort, limitahan at makuha bilang List o LazyList (para sa malalaking set ng data).

Pag-configure ng mga index para sa pagpapabilis ng paghahanap

ObjectBox ay awtomatikong nag-i-index ng @Id field. Para sa custom na index, gamitin ang anotasyong @Index sa mga field na madalas na query. Pinapabilis ng mga index ang equal at in query, ngunit pinapabagal ang pagpasok — huwag i-index ang mga field na hindi pinaghahanap. Sinusuportahan ng ObjectBox ang mga composite index para sa sabay-sabay na pag-filter sa maraming field. Ang mga composite index ay lalong kapaki-pakinabang para sa mga filter sa listahan: halimbawa, ang paghahanap ng mga hindi natapos na gawain na may mataas na priyoridad ay ginagawa nang sampu-sampung beses na mas mabilis gamit ang composite index sa mga field na isCompleted at priority.

ObjectBox Sync — synchronization sa pagitan ng mga device

ObjectBox Sync ay isang proprietary na teknolohiya para sa real-time na synchronization ng data sa pagitan ng mga device. Gumagamit ito ng protocol na batay sa WebSocket na may conflict resolution ayon sa last-writer-wins. Ang Sync ay angkop para sa mga app na nangangailangan ng offline synchronization: mga tala, listahan ng gawain, data ng IoT mula sa maraming sensor. Gayunpaman, para sa produksyon kinakailangan ang pagbili ng lisensya.

kotlin
// Query na may maraming kondisyon
val highPriorityIncomplete = taskBox.query()
    .greater(Task_.priority, 5)
    .equal(Task_.isCompleted, false)
    .build()
    .find()

// Paghahanap ng substring
val searchResults = taskBox.query()
    .contains(Task_.title, "produkto", StringOrder.CASE_INSENSITIVE)
    .build()
    .find()

Mga Madalas Itanong

Libre ba ang ObjectBox para sa komersyal na paggamit?

ObjectBox ay ipinamamahagi sa ilalim ng lisensyang Apache 2.0 na nagpapahintulot sa komersyal na paggamit nang walang limitasyon. Ang tampok na ObjectBox Sync (cross-platform synchronization) ay proprietary at nangangailangan ng pagbili ng lisensya para sa produksyon.

Sinusuportahan ba ng ObjectBox ang multithreading?

BoxStore ay thread-safe: maraming thread ang maaaring magbasa ng data nang sabay-sabay. Ang pagsulat ay naka-block sa antas ng Box. Para sa mga kumplikadong transaksyon gamitin ang boxStore.runInTx() na ginagarantiyahan ang atomicity ng grupo ng mga operasyon.

Maaari bang gamitin ang ObjectBox sa Kotlin Multiplatform?

Oo, ObjectBox ay sumusuporta sa Kotlin Multiplatform (KMP) mula sa bersyon 3.0. Available ang mga target na Android, iOS, JVM at Native. Para sa KMP ginagamit ang hiwalay na Gradle plugin na objectbox-kotlin na may suporta sa expect/actual.

Paano gumawa ng backup ng ObjectBox database?

ObjectBox ay nag-iimbak ng data sa .mdb file sa direktoryo ng app. Para sa backup, kopyahin ang buong direktoryo ng ObjectBox sa pamamagitan ng BoxStore.copy() o manu-manong kopyahin ang mga file pagkatapos tawagan ang boxStore.close(). Ang mga live na file ay hindi maaaring kopyahin — masisira nito ang data.

Paano naiiba ang ObjectBox sa Room?

Room ay ORM sa ibabaw ng SQLite, nangangailangan ng SQL query at may overhead sa pagmamapa ng bagay. Ang ObjectBox ay NoSQL na walang SQL, mas mabilis, ngunit hindi sumusuporta sa kumplikadong JOIN at hindi relational database. Ang pagpili ay depende sa gawain: para sa relational data — Room, para sa mabilis na pag-iimbak ng bagay — ObjectBox.

Buod

  • ObjectBox — NoSQL database na may 10–100 beses na mas mataas na pagganap kaysa sa SQLite sa mga mobile device
  • Flat file — sariling SLOT format na walang SQL layer at ORM cost
  • Mga anotasyon — @Entity, @Id, @Index, @Relation para sa paglalarawan ng modelo ng data
  • Reaktibidad — built-in na Observable at Flow para sa awtomatikong pag-update ng UI
  • Cross-platform — Android, iOS, Linux, macOS, Windows, WebAssembly
  • Caching at offline — pangunahing sitwasyon ng ObjectBox sa mga mobile app
  • Rekomendasyon — piliin ang ObjectBox para sa mga gawain kung saan ang bilis ng pagproseso ng data ay mas mahalaga kaysa relational integrity

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din