ObjectBox: bu nima, NoSQL MB va ma'lumotlar bilan ishlash

Muallif: IT Sectr Nashr etilgan: 2026-03-13 O'qish vaqti: 9 daq

ObjectBox — yuqori samaradorlikka ega NoSQL ma'lumotlar bazasi bo'lib, mobil va edge qurilmalari uchun optimallashtirilgan. SQLite dan farqli o'laroq, u SQL qatlamisiz tekis fayllarga asoslangan o'zining saqlash formatidan foydalanadi. ObjectBox Benchmarks, 2024 ma'lumotlariga ko'ra, ObjectBox Android qurilmalarida qo'shish va o'qish amallarini SQLite dan 10–100 marta tezroq bajaradi, bu esa uni yuqori yuklamali mobil ilovalar uchun eng yaxshi tanlovga aylantiradi.

Asosiy fikrlar

  • ObjectBox — SQL va ORM qatlamisiz tekis fayllar bilan NoSQL MB
  • Samaradorlik — yozish va o'qish amallarida SQLite dan 10–100 marta tezroq
  • Ko'p platformalilik — Android, iOS, Linux, macOS, Windows va WebAssembly
  • Reaktivlik — o'zgarishlarni kuzatish uchun o'rnatilgan Observable va Flow
  • Oson integratsiya — SQL so'rovlarisiz annotatsiyalar orqali kod generatsiyasi

ObjectBox nima?

ObjectBox — nemis ObjectBox.io kompaniyasi tomonidan ishlab chiqilgan in-memory NoSQL ma'lumotlar bazasi. An'anaviy relyatsion ma'lumotlar bazalaridan farqli o'laroq, ObjectBox ob'ektlarni to'g'ridan-to'g'ri tekis fayllarda, o'zining SLOT (Super Lightweight Object Tree) formatidan foydalanib saqlaydi. Bu ORM va SQL parserining yukini bartaraf qiladi. SLOT formati cheklangan xotiraga ega qurilmalarda ishlash uchun optimallashtirilgan: ma'lumotlar avtomatik defragmentatsiya qilinadi va MB hajmi bir xil miqdordagi yozuvlarga ega ekvivalent SQLite bazasidan o'rtacha 4–6 marta kichikroq.

ObjectBox barcha asosiy mobil platformalarni qo'llab-quvvatlaydi: Android, iOS va Flutter. Android uchun kod generatsiyasi ObjectBox Gradle Plugin orqali mavjud bo'lib, u annotatsiya qilingan entity-larni qayta ishlaydi va ma'lumotlar bilan ishlash uchun Box sinflarini yaratadi. Flutter uchun Dart o'rami bilan native plagin ishlatiladi. Mobil platformalardan tashqari, ObjectBox Linux, macOS, Windows va WebAssembly da ishlaydi, bu esa ma'lumotlar modelini mobil ilova va server sinxronizatsiyasi o'rtasida qayta ishlatish imkonini beradi.

ObjectBox (2023) tadqiqot ma'lumotlariga ko'ra, ma'lumotlar bazasi Google Play da 5000 dan ortiq ilovalarda, jumladan 10 milliondan ortiq foydalanuvchiga ega ilovalarda qo'llaniladi. Asosiy stsenariylar: ma'lumotlarni keshlashtirish, oflayn rejimda ishlash va vaqt seriyalarini saqlash (IoT). ObjectBox, ayniqsa, sog'liqni kuzatish va fitnes ilovalarida mashhur bo'lib, bunda doimiy internet aloqasisiz qurilmada sensor ko'rsatkichlarini tez yozib olish va bir nechta qurilmalardan analitika to'plash talab qilinadi.

Tarix va pozitsiyalash

ObjectBox Android platformasi uchun Realm va SQLite ga alternativa sifatida paydo bo'ldi. Birinchi barqaror versiya 2018 yilda chiqarilgan. Realm dan asosiy farq — ObjectBox da GPL cheklovlari yo'q (Apache 2.0 ishlatiladi) va ko'proq platformalarni qo'llab-quvvatlaydi: mobil qurilmalardan Linux serverlarigacha.

Asosiy imkoniyatlar

ObjectBox ta'minlaydi: Box sinflarining avtomatik generatsiyasi, tez qidirish uchun o'rnatilgan indekslar, qaytarish qo'llab-quvvatlashi bilan tranzaksiyalar, RxJava va Kotlin Flow orqali reaktiv so'rovlar, shuningdek ObjectBox Sync (xususiy protokol) orqali qurilmalar o'rtasida sinxronizatsiya. Firebase Realtime Database dan farqli o'laroq, ObjectBox Sync markaziy serversiz peer-to-peer modelida ishlaydi, bu esa kechikishlar va infratuzilma xarajatlarini kamaytiradi.

ObjectBox qanday ishlaydi?

ObjectBox ma'lumotlarni o'zining ikkilik .mdb (ObjectBox Data File) formatida saqlaydi. Har bir entity (Entity) bir faylga xaritalanadi, unda yozuvlar sobit siljish bilan ketma-ket saqlanadi. Bu faylni to'liq skanerlamasdan alohida ob'ektlarni o'qish va yozish imkonini beradi.

ObjectBox bilan ishlash uchun SQL kerak emas: so'rovlar koddagi fluent-API orqali quriladi. Kompilyator barcha CRUD amallarini inkapsulatsiya qiladigan yordamchi sinflar MyObjectBox va qutilar (Box) yaratadi. Ma'lumotlar modeli annotatsiyalar @Entity, @Id, @Index va @Relation orqali tavsiflanadi.

kotlin
// ObjectBox-ni Android-ga ulash
class App: Application() {
    lateinit var boxStore: BoxStore

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

ObjectBox vs SQLite: samaradorlik taqqoslashi

Rasmiy benchmarklarga ko'ra, ObjectBox amallar tezligi bo'yicha SQLite dan sezilarli darajada ustun turadi, ayniqsa ommaviy qo'shish va ommaviy o'qishda. Biroq, SQLite keng tarqalganligi va o'rnatilgan SQL qo'llab-quvvatlashi tufayli mobil ilovalar uchun de-fakto standart bo'lib qolmoqda.

AmalObjectBoxSQLiteFarq
Qo'shish (1000 ta yozuv)~5 ms~180 msx36 tezroq
O'qish (1000 ta yozuv)~3 ms~70 msx23 tezroq
Yangilash (1000 ta yozuv)~6 ms~150 msx25 tezroq
Indeks bo'yicha qidirish~0.1 ms~2 msx20 tezroq
MB hajmi (1000 ob'ekt)~28 KB~112 KB4 marta kichik

ObjectBox qachon optimal emas

ObjectBox murakkab JOIN so'rovlari, agregat funksiyalar (SUM, COUNT guruhlash bilan) yoki mavjud SQL sxemasi bilan integratsiya talab qilinadigan stsenariylarda SQLite dan ortda qoladi. Agar loyiha allaqachon SQLite dan Room ORM bilan foydalanayotgan bo'lsa — ObjectBox ga migratsiya barcha ma'lumotlarga kirish mantiqini qayta yozishni talab qiladi. ObjectBox shuningdek maxsus SQL so'rovlarini qo'llab-quvvatlamaydi — faqat fluent-API. Biroq, odatiy CRUD amallari va keshlashtirish uchun ObjectBox 100 martagacha samaradorlik oshishini beradi, bu turli OS versiyalaridagi Android qurilmalarida rasmiy benchmarklar bilan tasdiqlangan.

ObjectBox bilan kod namunalari

ObjectBox entity-larni aniqlash uchun annotatsiyalardan foydalanadi. Kompilyatsiyadan so'ng put, get, remove va query metodlari bilan Box sinflari yaratiladi. Quyida vazifalar ro'yxati ilovasidagi Task modeli uchun odatiy amallar keltirilgan.

Entity ni aniqlash

Har bir entity @Entity bilan annotatsiya qilinadi. @Id maydoni asosiy kalitga aylanadi, @Index maydon bo'yicha qidirishni tezlashtiradi. ObjectBox 0 qiymatida ID ning avtomatik generatsiyasini qo'llab-quvvatlaydi.

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

CRUD amallari

Box — entity lar bilan ishlash uchun asosiy sinf. put() metodi ob'ektni saqlaydi yoki yangilaydi, get() ID bo'yicha o'qiydi, remove() o'chiradi. Barcha asosiy amallar sinxron bo'lib, chaqiruvchi thread da bajariladi.

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

// Yaratish
val task = Task(title = "Mahsulotlarni sotib olish", priority = 3)
val newId = taskBox.put(task)

// O'qish
val savedTask = taskBox.get(newId)

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

// O'chirish
taskBox.remove(newId)

Reaktiv so'rovlar

ObjectBox .subscribe() orqali reaktiv so'rovlarni qo'llab-quvvatlaydi. Obunachi so'rov shartiga mos keladigan ma'lumotlardagi har qanday o'zgarish haqida bildirishnoma oladi. Bu elementlar qo'shilganda yoki o'chirilganda ro'yxatni avtomatik yangilaydigan UI uchun qulay.

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

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

ObjectBox da aloqalar va so'rovlar

ObjectBox entity lar o'rtasida aloqalarni qo'llab-quvvatlaydi — To-One, To-Many va Many-to-Many. Aloqalar @Relation annotatsiyasi orqali belgilanadi. SQLite dan farqli o'laroq, ObjectBox tashqi kalitlardan foydalanmaydi: aloqalar tekis fayllardagi ID ro'yxatlari orqali amalga oshiriladi, bu ob'ekt grafi bo'ylab navigatsiyani tezlashtiradi.

@Backlink orqali One-to-Many

@Backlink aloqasi alohida havola maydonisiz bola entity dan ota-onaga o'tish imkonini beradi. ObjectBox avtomatik ravishda teskari havolani saqlaydi, bu ma'lumotlarning takrorlanishini va ikki jadval o'rtasidagi sinxronizatsiyani bartaraf qiladi.

Fluent so'rovlar

ObjectBox Query Builder shartlar zanjirini qurish imkonini beradi: equal, notEqual, greater, less, in, contains, startsWith. Barcha shartlar and/or orqali birlashtiriladi. Natijani saralash, cheklash va List yoki LazyList (katta ma'lumotlar to'plami uchun) sifatida olish mumkin.

Qidirishni tezlashtirish uchun indekslarni sozlash

ObjectBox @Id maydonini avtomatik indekslaydi. Maxsus indekslar uchun tez-tez so'raladigan maydonlarda @Index annotatsiyasidan foydalaning. Indekslar equal va in so'rovlarini tezlashtiradi, lekin qo'shishni sekinlashtiradi — qidirish amalga oshirilmaydigan maydonlarni indekslamang. ObjectBox bir vaqtning o'zida bir nechta maydon bo'yicha filtrlash uchun murakkab indekslarni qo'llab-quvvatlaydi. Kombinatsiyalangan indekslar ro'yxatlardagi filtrlar uchun ayniqsa foydali: masalan, isCompleted va priority maydonlarida kombinatsiyalangan indeks bilan tugallanmagan yuqori prioritetli vazifalarni qidirish o'nlab marta tezroq amalga oshiriladi.

ObjectBox Sync — qurilmalar o'rtasida sinxronizatsiya

ObjectBox Sync — qurilmalar o'rtasida real vaqt rejimida ma'lumotlarni sinxronlashtirish uchun xususiy texnologiya. U last-writer-wins bilan konfliktlarni hal qilish bilan WebSocket asosidagi protokoldan foydalanadi. Sync oflayn sinxronizatsiyaga muhtoj ilovalar uchun mos keladi: eslatmalar, vazifalar ro'yxati, bir nechta sensorlardan IoT ma'lumotlari. Biroq, ishlab chiqarish uchun litsenziya sotib olish talab qilinadi.

kotlin
// Bir nechta shartli so'rov
val highPriorityIncomplete = taskBox.query()
    .greater(Task_.priority, 5)
    .equal(Task_.isCompleted, false)
    .build()
    .find()

// Qator ostida qidirish
val searchResults = taskBox.query()
    .contains(Task_.title, "mahsulot", StringOrder.CASE_INSENSITIVE)
    .build()
    .find()

Tez-tez beriladigan savollar

ObjectBox tijorat foydalanish uchun bepulmi?

ObjectBox Apache 2.0 litsenziyasi ostida tarqatiladi, bu cheklovlarsiz tijorat foydalanishga ruxsat beradi. ObjectBox Sync (ko'p platformali sinxronizatsiya) xususiy funksiya bo'lib, ishlab chiqarish uchun litsenziya sotib olishni talab qiladi.

ObjectBox ko'p threadlilikni qo'llab-quvvatlaydimi?

BoxStore thread-xavfsiz: bir nechta thread bir vaqtning o'zida ma'lumotlarni o'qiy oladi. Yozish Box darajasida bloklanadi. Murakkab tranzaksiyalar uchun operatsiyalar guruhining atomarligini kafolatlaydigan boxStore.runInTx() dan foydalaning.

ObjectBox Kotlin Multiplatform bilan ishlatilishi mumkinmi?

Ha, ObjectBox 3.0 versiyasidan Kotlin Multiplatform (KMP) ni qo'llab-quvvatlaydi. Android, iOS, JVM va Native targetlari mavjud. KMP uchun expect/actual qo'llab-quvvatlashi bilan alohida Gradle plaginidan objectbox-kotlin foydalaniladi.

ObjectBox bazasining zaxira nusxasini qanday qilish mumkin?

ObjectBox ma'lumotlarni ilova katalogidagi .mdb fayllarida saqlaydi. Zaxira nusxasi uchun ObjectBox katalogini BoxStore.copy() orqali yoki boxStore.close() chaqirilgandan keyin fayllarni qo'lda nusxalang. Jonli fayllarni nusxalash mumkin emas — bu ma'lumotlarni buzadi.

ObjectBox Room dan qanday farq qiladi?

Room — SQLite ustidagi ORM, SQL so'rovlarini talab qiladi va ob'ektlarni xaritalash uchun yukga ega. ObjectBox SQL siz NoSQL dir, ancha tezroq, lekin murakkab JOIN larni qo'llab-quvvatlamaydi va relyatsion ma'lumotlar bazasi emas. Tanlov vazifaga bog'liq: relyatsion ma'lumotlar uchun — Room, tez ob'ekt saqlash uchun — ObjectBox.

Xulosa

  • ObjectBox — mobil qurilmalarda SQLite dan 10–100 marta yuqori samaradorlikka ega NoSQL MB
  • Tekis fayllar — SQL qatlami va ORM xarajatisiz o'zining SLOT formati
  • Annotatsiyalar — @Entity, @Id, @Index, @Relation ma'lumotlar modelini tavsiflash uchun
  • Reaktivlik — UI ni avtomatik yangilash uchun o'rnatilgan Observable va Flow
  • Ko'p platformalilik — Android, iOS, Linux, macOS, Windows, WebAssembly
  • Keshlashtirish va oflayn — mobil ilovalarda ObjectBox ning asosiy stsenariysi
  • Tavsiya — ma'lumotlar bilan ishlash tezligi relyatsion yaxlitlikdan muhimroq bo'lgan vazifalar uchun ObjectBox ni tanlang

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing