ObjectBox: bu nədir, NoSQL VB və verilənlərlə iş

Müəllif: IT Sectr Dərc olunub: 2026-03-13 Oxuma vaxtı: 9 dəq

ObjectBox — mobil və edge cihazları üçün optimallaşdırılmış yüksək məhsuldar NoSQL verilənlər bazasıdır. SQLite-dən fərqli olaraq, SQL təbəqəsi olmayan düz fayllar əsasında öz saxlama formatından istifadə edir. ObjectBox Benchmarks, 2024 məlumatlarına görə, ObjectBox Android cihazlarında daxiletmə və oxuma əməliyyatlarını SQLite-dən 10–100 dəfə daha sürətli yerinə yetirir ki, bu da onu yüksək yüklü mobil tətbiqlər üçün ən yaxşı seçim edir.

Əsas qeydlər

  • ObjectBox — SQL və ORM təbəqəsi olmayan düz fayllarla NoSQL VB
  • Performans — yazma və oxuma əməliyyatlarında SQLite-dən 10–100 dəfə sürətli
  • Çapraz-platforma — Android, iOS, Linux, macOS, Windows və WebAssembly
  • Reaktivlik — dəyişiklikləri izləmək üçün daxili Observable və Flow
  • Asan inteqrasiya — SQL sorğuları olmadan anotasiyalar vasitəsilə kod generasiyası

ObjectBox nədir?

ObjectBox — Almaniyanın ObjectBox.io şirkəti tərəfindən hazırlanmış in-memory NoSQL verilənlər bazasıdır. Ənənəvi relational verilənlər bazalarından fərqli olaraq, ObjectBox obyektləri birbaşa düz fayllarda, öz SLOT (Super Lightweight Object Tree) formatından istifadə edərək saxlayır. Bu, ORM və SQL parserinin yükünü aradan qaldırır. SLOT formatı məhdud yaddaşa malik cihazlarda işləmək üçün optimallaşdırılıb: məlumatlar avtomatik defraqmentasiya olunur və VB ölçüsü eyni sayda qeydlərdə ekvivalent SQLite bazasından orta hesabla 4–6 dəfə kiçikdir.

ObjectBox bütün əsas mobil platformaları dəstəkləyir: Android, iOS və Flutter. Android üçün kod generasiyası ObjectBox Gradle Plugin vasitəsilə mövcuddur ki, bu da anotasiya edilmiş varlıqları emal edir və verilənlərlə iş üçün Box sinifləri yaradır. Flutter üçün Dart qabığı ilə native plagin istifadə olunur. Mobil platformalardan əlavə, ObjectBox Linux, macOS, Windows və WebAssembly-də işləyir ki, bu da məlumat modelinin mobil tətbiq və server sinxronizasiyası arasında təkrar istifadəsinə imkan verir.

ObjectBox (2023) tədqiqat məlumatlarına görə, verilənlər bazası Google Play-də 5000-dən çox tətbiqdə, o cümlədən 10 milyondan çox istifadəçisi olan tətbiqlərdə istifadə olunur. Əsas ssenarilər: məlumatların keşləşdirilməsi, oflayn rejimdə iş və zaman seriyalarının saxlanması (IoT). ObjectBox xüsusilə sağlamlıq izləmə və fitnes tətbiqlərində populyardır, burada sensor göstəricilərinin daimi internet bağlantısı olmadan cihazda sürətli yazılması və bir neçə cihazdan analitika toplanması tələb olunur.

Tarix və mövqeləşdirmə

ObjectBox Android platforması üçün Realm və SQLite-ə alternativ olaraq ortaya çıxdı. İlk stabil versiya 2018-ci ildə buraxıldı. Realm-dən əsas fərq — ObjectBox-də GPL məhdudiyyətləri yoxdur (Apache 2.0 istifadə olunur) və daha çox platformanı dəstəkləyir: mobil cihazlardan Linux serverlərinə qədər.

Əsas imkanlar

ObjectBox təmin edir: Box siniflərinin avtomatik generasiyası, sürətli axtarış üçün daxili indekslər, geri qaytarma dəstəyi ilə tranzaksiyalar, RxJava və Kotlin Flow vasitəsilə reaktiv sorğular, həmçinin ObjectBox Sync (mülkiyyət protokolu) vasitəsilə cihazlar arasında sinxronizasiya. Firebase Realtime Database-dən fərqli olaraq, ObjectBox Sync mərkəzi server olmadan peer-to-peer modelində işləyir ki, bu da gecikmələri və infrastruktur xərclərini azaldır.

ObjectBox necə işləyir?

ObjectBox məlumatları öz ikili .mdb (ObjectBox Data File) formatında saxlayır. Hər bir varlıq (Entity) bir fayla xəritələnir, burada qeydlər sabit yerdəyişmə ilə ardıcıl saxlanılır. Bu, faylı tam skan etmədən ayrı-ayrı obyektləri oxumaq və yazmaq imkanı verir.

ObjectBox ilə işləmək üçün SQL lazım deyil: sorğular koddakı fluent-API vasitəsilə qurulur. Kompilyator bütün CRUD əməliyyatlarını kapsulalayan köməkçi siniflər MyObjectBox və qutular (Box) yaradır. Məlumat modeli anotasiyalar @Entity, @Id, @Index və @Relation vasitəsilə təsvir olunur.

kotlin
// ObjectBox-u Android-də qoşma
class App: Application() {
    lateinit var boxStore: BoxStore

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

ObjectBox vs SQLite: performans müqayisəsi

Rəsmi etalonlara görə, ObjectBox əməliyyat sürətinə görə SQLite-dən əhəmiyyətli dərəcədə üstündür, xüsusilə toplu daxiletmə və kütləvi oxumada. Bununla belə, SQLite geniş yayılması və daxili SQL dəstəyi sayəsində mobil tətbiqlər üçün de-fakto standart olaraq qalır.

ƏməliyyatObjectBoxSQLiteFərq
Daxiletmə (1000 qeyd)~5 ms~180 msx36 sürətli
Oxuma (1000 qeyd)~3 ms~70 msx23 sürətli
Yeniləmə (1000 qeyd)~6 ms~150 msx25 sürətli
İndeks üzrə axtarış~0.1 ms~2 msx20 sürətli
VB ölçüsü (1000 obyekt)~28 KB~112 KB4 dəfə kiçik

ObjectBox nə zaman optimal deyil

ObjectBox mürəkkəb JOIN sorğuları, aqreqat funksiyalar (SUM, COUNT qruplaşdırma ilə) və ya mövcud SQL sxemi ilə inteqrasiya tələb olunan ssenarilərdə SQLite-dən geri qalır. Layihə artıq SQLite-dən Room ORM ilə istifadə edirsə — ObjectBox-a miqrasiya bütün məlumat giriş məntiqinin yenidən yazılmasını tələb edəcək. ObjectBox həmçinin fərdi SQL sorğularını dəstəkləmir — yalnız fluent-API. Bununla belə, tipik CRUD əməliyyatları və keşləşdirmə üçün ObjectBox 100 dəfəyə qədər performans artımı verir ki, bu da müxtəlif OS versiyaları olan Android cihazlarında rəsmi etalonlarla təsdiqlənir.

ObjectBox ilə kod nümunələri

ObjectBox varlıqları təyin etmək üçün anotasiyalardan istifadə edir. Kompilyasiyadan sonra put, get, remove və query metodları ilə Box sinifləri yaradılır. Aşağıda tapşırıq siyahısı tətbiqində Task modeli üçün tipik əməliyyatlar göstərilib.

Varlığın təyini

Hər bir varlıq @Entity ilə anotasiya olunur. @Id olan sahə əsas açar olur, @Index sahə üzrə axtarışı sürətləndirir. ObjectBox 0 dəyərində ID-nin avtomatik generasiyasını dəstəkləyir.

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

CRUD əməliyyatları

Box — varlıqlarla iş üçün əsas sinif. put() metodu obyekti saxlayır və ya yeniləyir, get() ID ilə oxuyur, remove() silir. Bütün əsas əməliyyatlar sinxrondur və çağıran thread-də yerinə yetirilir.

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

// Yaratma
val task = Task(title = "Məhsulları al", priority = 3)
val newId = taskBox.put(task)

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

// Yeniləmə
savedTask.isCompleted = true
taskBox.put(savedTask)

// Sil
taskBox.remove(newId)

Reaktiv sorğular

ObjectBox .subscribe() vasitəsilə reaktiv sorğuları dəstəkləyir. Abunəçi sorğu şərtinə uyğun gələn məlumatlarda hər hansı dəyişiklik olduqda bildiriş alır. Bu, elementlər əlavə edildikdə və ya silindikdə siyahını avtomatik yeniləyən UI üçün əlverişlidir.

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

query.subscribe { tasks ->
    // tasks — List, avtomatik yenilənir
    updateUi(tasks)
}

ObjectBox-də əlaqələr və sorğular

ObjectBox varlıqlar arasında əlaqələri dəstəkləyir — To-One, To-Many və Many-to-Many. Əlaqələr @Relation anotasiyası vasitəsilə təyin olunur. SQLite-dən fərqli olaraq, ObjectBox xarici açarlardan istifadə etmir: əlaqələr düz fayllardakı ID siyahıları vasitəsilə həyata keçirilir ki, bu da obyekt qrafiki üzrə naviqasiyanı sürətləndirir.

@Backlink vasitəsilə One-to-Many

@Backlink əlaqəsi ayrıca istinad sahəsi olmadan uşaq varlıqdan valideynə keçməyə imkan verir. ObjectBox avtomatik olaraq əks istinadı saxlayır ki, bu da məlumatların təkrarlanmasını və iki cədvəl arasında sinxronizasiyanı aradan qaldırır.

Fluent sorğular

ObjectBox Query Builder şərtlər zənciri qurmağa imkan verir: equal, notEqual, greater, less, in, contains, startsWith. Bütün şərtlər and/or vasitəsilə birləşdirilir. Nəticə sıralana, məhdudlaşdırıla və List və ya LazyList (böyük məlumat dəstləri üçün) kimi alına bilər.

Axtarışı sürətləndirmək üçün indekslərin konfiqurasiyası

ObjectBox @Id sahəsini avtomatik indeksləşdirir. Fərdi indekslər üçün tez-tez sorğulanan sahələrdə @Index anotasiyasından istifadə edin. İndekslər equal və in sorğularını sürətləndirir, lakin daxiletməni yavaşladır — axtarış aparılmayan sahələri indeksləşdirməyin. ObjectBox eyni anda bir neçə sahə üzrə filtrləmə üçün mürəkkəb indeksləri dəstəkləyir. Mürəkkəb indekslər siyahılardakı filtrlər üçün xüsusilə faydalıdır: məsələn, isCompleted və priority sahələrində mürəkkəb indekslə tamamlanmamış yüksək prioritetli tapşırıqların axtarışı onlarla dəfə sürətli olur.

ObjectBox Sync — cihazlar arasında sinxronizasiya

ObjectBox Sync — cihazlar arasında real vaxt rejimində məlumat sinxronizasiyası üçün mülkiyyət texnologiyasıdır. O, last-writer-wins ilə konflikt həlli ilə WebSocket əsaslı protokoldan istifadə edir. Sync oflayn sinxronizasiyaya ehtiyacı olan tətbiqlər üçün uyğundur: qeydlər, tapşırıq siyahıları, bir neçə sensordan IoT məlumatları. Bununla belə, istehsal üçün lisenziya alınması tələb olunur.

kotlin
// Çox şərtli sorğu
val highPriorityIncomplete = taskBox.query()
    .greater(Task_.priority, 5)
    .equal(Task_.isCompleted, false)
    .build()
    .find()

// Alt sətir üzrə axtarış
val searchResults = taskBox.query()
    .contains(Task_.title, "məhsul", StringOrder.CASE_INSENSITIVE)
    .build()
    .find()

Tez-tez verilən suallar

ObjectBox kommersiya istifadəsi üçün pulsuzdur?

ObjectBox Apache 2.0 lisenziyası altında yayılır ki, bu da məhdudiyyətsiz kommersiya istifadəsinə icazə verir. ObjectBox Sync (çapraz-platforma sinxronizasiyası) mülkiyyət funksiyasıdır və istehsal üçün lisenziya alınması tələb olunur.

ObjectBox çoxthreadliyi dəstəkləyirmi?

BoxStore thread-təhlükəsizdir: bir neçə thread eyni anda məlumatları oxuya bilər. Yazma Box səviyyəsində bloklanır. Mürəkkəb tranzaksiyalar üçün əməliyyatlar qrupunun atomarlığını təmin edən boxStore.runInTx() istifadə edin.

ObjectBox Kotlin Multiplatform ilə istifadə edilə bilərmi?

Bəli, ObjectBox 3.0 versiyasından Kotlin Multiplatform (KMP) dəstəkləyir. Android, iOS, JVM və Native hədəfləri mövcuddur. KMP üçün expect/actual dəstəyi ilə ayrıca Gradle plaginindən objectbox-kotlin istifadə olunur.

ObjectBox bazasının ehtiyat nüsxəsini necə etmək olar?

ObjectBox məlumatları tətbiq kataloqunda .mdb fayllarında saxlayır. Ehtiyat nüsxə üçün ObjectBox kataloqunu BoxStore.copy() vasitəsilə və ya boxStore.close() çağırışından sonra faylları əl ilə kopyalayın. Canlı faylları kopyalamaq olmaz — bu məlumatları zədələyər.

ObjectBox Room-dan nə ilə fərqlənir?

Room — SQLite üzərində ORM, SQL sorğuları tələb edir və obyektlərin xəritələnməsinə yük gətirir. ObjectBox SQL-siz NoSQL-dir, daha sürətlidir, lakin mürəkkəb JOIN-ləri dəstəkləmir və relational verilənlər bazası deyil. Seçim tapşırıqdan asılıdır: relational məlumatlar üçün — Room, sürətli obyekt saxlanması üçün — ObjectBox.

Xülasə

  • ObjectBox — mobil cihazlarda SQLite-dən 10–100 dəfə yüksək performanslı NoSQL VB
  • Düz fayllar — SQL təbəqəsi və ORM yükü olmadan öz SLOT formatı
  • Anotasiyalar — @Entity, @Id, @Index, @Relation məlumat modelini təsvir etmək üçün
  • Reaktivlik — UI-nin avtomatik yenilənməsi üçün daxili Observable və Flow
  • Çapraz-platforma — Android, iOS, Linux, macOS, Windows, WebAssembly
  • Keşləşdirmə və oflayn — mobil tətbiqlərdə ObjectBox-in əsas ssenarisi
  • Tövsiyə — məlumatlarla iş sürətinin relational bütövlükdən daha kritik olduğu tapşırıqlar üçün ObjectBox seçin

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun