ObjectBox: apa itu, basis data NoSQL dan bekerja dengan data

Penulis: IT Sectr Diterbitkan: 2026-03-13 Waktu membaca: 9 mnt

ObjectBox adalah basis data NoSQL berkinerja tinggi yang dioptimalkan untuk perangkat seluler dan edge. Tidak seperti SQLite, ia menggunakan format penyimpanannya sendiri berdasarkan file datar tanpa lapisan SQL. Menurut ObjectBox Benchmarks, 2024, ObjectBox menjalankan operasi penyisipan dan pembacaan 10–100 kali lebih cepat daripada SQLite di perangkat Android, menjadikannya pilihan terbaik untuk aplikasi seluler dengan beban tinggi.

Poin Utama

  • ObjectBox — basis data NoSQL dengan file datar, tanpa SQL dan lapisan ORM
  • Kinerja — 10–100 kali lebih cepat daripada SQLite pada operasi tulis dan baca
  • Lintas platform — Android, iOS, Linux, macOS, Windows dan WebAssembly
  • Reaktivitas — Observable dan Flow bawaan untuk melacak perubahan
  • Integrasi mudah — pembuatan kode melalui anotasi, tanpa kueri SQL

Apa itu ObjectBox?

ObjectBox adalah basis data NoSQL in-memory yang dikembangkan oleh perusahaan Jerman ObjectBox.io. Tidak seperti basis data relasional tradisional, ObjectBox menyimpan objek secara langsung dalam file datar menggunakan format SLOT (Super Lightweight Object Tree) miliknya sendiri. Ini menghilangkan overhead ORM dan parser SQL. Format SLOT dioptimalkan untuk bekerja pada perangkat dengan memori terbatas: data didefragmentasi secara otomatis, dan ukuran basis data rata-rata 4–6 kali lebih kecil daripada basis data SQLite yang setara dengan jumlah catatan yang sama.

ObjectBox mendukung semua platform seluler utama: Android, iOS dan Flutter. Untuk Android, pembuatan kode tersedia melalui ObjectBox Gradle Plugin yang memproses entitas yang dianotasi dan membuat kelas Box untuk bekerja dengan data. Untuk Flutter, digunakan plugin native dengan pembungkus Dart. Selain platform seluler, ObjectBox berfungsi di Linux, macOS, Windows dan WebAssembly, memungkinkan penggunaan kembali model data antara aplikasi seluler dan sinkronisasi server.

Menurut data riset ObjectBox (2023), basis data ini digunakan di lebih dari 5000 aplikasi di Google Play, termasuk aplikasi dengan audiens lebih dari 10 juta pengguna. Skenario utama: caching data, bekerja dalam mode offline dan penyimpanan deret waktu (IoT). ObjectBox sangat populer di aplikasi pelacakan kesehatan dan kebugaran, di mana diperlukan pencatatan cepat pembacaan sensor pada perangkat tanpa koneksi internet permanen dan pengumpulan analitik dari beberapa perangkat.

Sejarah dan posisi

ObjectBox muncul sebagai alternatif Realm dan SQLite untuk platform Android. Versi stabil pertama dirilis pada tahun 2018. Perbedaan utama dari Realm: ObjectBox tidak memiliki batasan GPL (menggunakan Apache 2.0) dan mendukung lebih banyak platform: dari perangkat seluler hingga server Linux.

Fitur utama

ObjectBox menyediakan: pembuatan kelas Box secara otomatis, indeks bawaan untuk pencarian cepat, transaksi dengan dukungan pembatalan, kueri reaktif melalui RxJava dan Kotlin Flow, serta sinkronisasi antar perangkat melalui ObjectBox Sync (protokol kepemilikan). Tidak seperti Firebase Realtime Database, ObjectBox Sync bekerja dalam model peer-to-peer tanpa server pusat, mengurangi latensi dan biaya infrastruktur.

Bagaimana cara kerja ObjectBox?

ObjectBox menyimpan data dalam format biner .mdb (ObjectBox Data File) miliknya. Setiap entitas dipetakan ke satu file, di mana catatan disimpan secara berurutan dengan offset tetap. Ini memungkinkan membaca dan menulis objek individu tanpa memindai seluruh file.

Untuk bekerja dengan ObjectBox tidak perlu SQL: kueri dibangun melalui fluent-API dalam kode. Kompiler menghasilkan kelas pembantu MyObjectBox dan kotak (Box) yang merangkum semua operasi CRUD. Model data dijelaskan melalui anotasi @Entity, @Id, @Index dan @Relation.

kotlin
// Menghubungkan ObjectBox di Android
class App: Application() {
    lateinit var boxStore: BoxStore

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

ObjectBox vs SQLite: perbandingan kinerja

Menurut tolok ukur resmi, ObjectBox secara signifikan mengungguli SQLite dalam kecepatan operasi, terutama pada penyisipan batch dan pembacaan massal. Namun SQLite tetap menjadi standar de facto untuk aplikasi seluler karena penyebarannya yang luas dan dukungan SQL bawaan.

OperasiObjectBoxSQLitePerbedaan
Penyisipan (1000 catatan)~5 ms~180 msx36 lebih cepat
Pembacaan (1000 catatan)~3 ms~70 msx23 lebih cepat
Pembaruan (1000 catatan)~6 ms~150 msx25 lebih cepat
Pencarian berdasarkan indeks~0.1 ms~2 msx20 lebih cepat
Ukuran basis data (1000 objek)~28 KB~112 KB4 kali lebih kecil

Kapan ObjectBox tidak optimal

ObjectBox kalah dari SQLite dalam skenario yang memerlukan kueri JOIN kompleks, fungsi agregat (SUM, COUNT dengan pengelompokan) atau integrasi dengan skema SQL yang ada. Jika proyek sudah menggunakan SQLite dengan Room ORM, migrasi ke ObjectBox akan memerlukan penulisan ulang seluruh logika akses data. ObjectBox juga tidak mendukung kueri SQL kustom, hanya fluent-API. Namun untuk operasi CRUD tipikal dan caching, ObjectBox memberikan peningkatan kinerja hingga 100 kali lipat, yang dikonfirmasi oleh tolok ukur resmi pada perangkat Android dengan berbagai versi OS.

Contoh kode dengan ObjectBox

ObjectBox menggunakan anotasi untuk mendefinisikan entitas. Setelah kompilasi, dibuat kelas Box dengan metode put, get, remove dan query. Di bawah ini adalah operasi tipikal untuk model Task dalam aplikasi daftar tugas.

Mendefinisikan entitas

Setiap entitas dianotasi dengan @Entity. Bidang dengan @Id menjadi kunci utama, @Index mempercepat pencarian berdasarkan bidang. ObjectBox mendukung pembuatan ID otomatis pada nilai 0.

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

Operasi CRUD

Box adalah kelas utama untuk bekerja dengan entitas. Metode put() menyimpan atau memperbarui objek, get() membaca berdasarkan ID, remove() menghapus. Semua operasi dasar bersifat sinkron dan dijalankan pada thread pemanggil.

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

// Membuat
val task = Task(title = "Membeli produk", priority = 3)
val newId = taskBox.put(task)

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

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

// Menghapus
taskBox.remove(newId)

Kueri reaktif

ObjectBox mendukung kueri reaktif melalui .subscribe(). Pelanggan menerima pemberitahuan pada setiap perubahan data yang sesuai dengan kondisi kueri. Ini berguna untuk UI yang secara otomatis memperbarui daftar saat menambah atau menghapus elemen.

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

query.subscribe { tasks ->
    // tasks — List, diperbarui secara otomatis
    updateUi(tasks)
}

Relasi dan kueri di ObjectBox

ObjectBox mendukung relasi antar entitas — To-One, To-Many dan Many-to-Many. Relasi didefinisikan melalui anotasi @Relation. Tidak seperti SQLite, ObjectBox tidak menggunakan kunci asing: relasi diimplementasikan melalui daftar ID dalam file datar, yang mempercepat navigasi melalui graf objek.

One-to-Many melalui @Backlink

Relasi @Backlink memungkinkan navigasi dari entitas anak ke induk tanpa bidang referensi terpisah. ObjectBox secara otomatis memelihara referensi balik, menghilangkan duplikasi data dan sinkronisasi antara dua tabel.

Kueri fluent

ObjectBox Query Builder memungkinkan membangun rantai kondisi: equal, notEqual, greater, less, in, contains, startsWith. Semua kondisi digabungkan melalui and/or. Hasilnya dapat diurutkan, dibatasi dan diperoleh sebagai List atau LazyList (untuk kumpulan data besar).

Konfigurasi indeks untuk mempercepat pencarian

ObjectBox secara otomatis mengindeks bidang @Id. Untuk indeks kustom, gunakan anotasi @Index pada bidang yang sering di-kueri. Indeks mempercepat kueri equal dan in, tetapi memperlambat penyisipan — jangan indeks bidang yang tidak dicari. ObjectBox mendukung indeks komposit untuk pemfilteran simultan pada beberapa bidang. Indeks komposit sangat berguna untuk filter dalam daftar: misalnya, pencarian tugas yang belum selesai dengan prioritas tinggi dilakukan puluhan kali lebih cepat dengan indeks komposit pada bidang isCompleted dan priority.

ObjectBox Sync — sinkronisasi antar perangkat

ObjectBox Sync adalah teknologi kepemilikan untuk sinkronisasi data antar perangkat secara real-time. Ia menggunakan protokol berbasis WebSocket dengan resolusi konflik berdasarkan last-writer-wins. Sync cocok untuk aplikasi yang memerlukan sinkronisasi offline: catatan, daftar tugas, data IoT dari beberapa sensor. Namun untuk produksi diperlukan pembelian lisensi.

kotlin
// Kueri dengan beberapa kondisi
val highPriorityIncomplete = taskBox.query()
    .greater(Task_.priority, 5)
    .equal(Task_.isCompleted, false)
    .build()
    .find()

// Pencarian substring
val searchResults = taskBox.query()
    .contains(Task_.title, "produk", StringOrder.CASE_INSENSITIVE)
    .build()
    .find()

Pertanyaan yang Sering Diajukan

Apakah ObjectBox gratis untuk penggunaan komersial?

ObjectBox didistribusikan di bawah lisensi Apache 2.0 yang memungkinkan penggunaan komersial tanpa batasan. Fitur ObjectBox Sync (sinkronasi lintas platform) bersifat kepemilikan dan memerlukan pembelian lisensi untuk produksi.

Apakah ObjectBox mendukung multithreading?

BoxStore aman untuk thread: beberapa thread dapat membaca data secara bersamaan. Penulisan diblokir di tingkat Box. Untuk transaksi kompleks gunakan boxStore.runInTx() yang menjamin atomisitas grup operasi.

Bisakah ObjectBox digunakan dengan Kotlin Multiplatform?

Ya, ObjectBox mendukung Kotlin Multiplatform (KMP) mulai versi 3.0. Target Android, iOS, JVM dan Native tersedia. Untuk KMP digunakan plugin Gradle terpisah objectbox-kotlin dengan dukungan expect/actual.

Bagaimana cara membuat cadangan basis data ObjectBox?

ObjectBox menyimpan data dalam file .mdb di direktori aplikasi. Untuk cadangan, salin seluruh direktori ObjectBox melalui BoxStore.copy() atau salin file secara manual setelah memanggil boxStore.close(). File aktif tidak boleh disalin — ini akan merusak data.

Apa perbedaan ObjectBox dengan Room?

Room adalah ORM di atas SQLite, memerlukan kueri SQL dan memiliki overhead pemetaan objek. ObjectBox adalah NoSQL tanpa SQL, jauh lebih cepat, tetapi tidak mendukung JOIN kompleks dan bukan basis data relasional. Pilihan tergantung pada tugas: untuk data relasional — Room, untuk penyimpanan objek cepat — ObjectBox.

Kesimpulan

  • ObjectBox — basis data NoSQL dengan kinerja 10–100 kali lebih tinggi daripada SQLite di perangkat seluler
  • File datar — format SLOT milik sendiri tanpa lapisan SQL dan biaya ORM
  • Anotasi — @Entity, @Id, @Index, @Relation untuk mendeskripsikan model data
  • Reaktivitas — Observable dan Flow bawaan untuk pembaruan UI otomatis
  • Lintas platform — Android, iOS, Linux, macOS, Windows, WebAssembly
  • Caching dan offline — skenario utama ObjectBox dalam aplikasi seluler
  • Rekomendasi — pilih ObjectBox untuk tugas di mana kecepatan pemrosesan data lebih penting daripada integritas relasional

Kami akan mengembangkan aplikasi seluler turnkey

IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.

Diskusikan proyek

Baca juga