ObjectBox: یہ کیا ہے، NoSQL DB اور ڈیٹا کے ساتھ کام کرنا

مصنف: IT Sectr اشاعت: 2026-03-13 مطالعے کا وقت: 9 منٹ

ObjectBox ایک اعلیٰ کارکردگی والا NoSQL ڈیٹا بیس ہے جو موبائل اور ایج ڈیوائسز کے لیے بہتر بنایا گیا ہے۔ SQLite کے برعکس، یہ SQL پرت کے بغیر اپنی فلیٹ فائل اسٹوریج فارمیٹ کا استعمال کرتا ہے۔ ObjectBox Benchmarks, 2024 کے مطابق، ObjectBox Android ڈیوائسز پر SQLite کے مقابلے میں 10–100 گنا تیزی سے داخل اور پڑھنے کے آپریشنز انجام دیتا ہے، جو اسے زیادہ بوجھ والی موبائل ایپلیکیشنز کے لیے بہترین انتخاب بناتا ہے۔

اہم نکات

  • ObjectBox — فلیٹ فائلوں کے ساتھ NoSQL DB، SQL یا ORM پرت کے بغیر
  • کارکردگی — لکھنے اور پڑھنے کے آپریشنز میں SQLite سے 10–100 گنا تیز
  • کراس پلیٹ فارم — Android، iOS، Linux، macOS، Windows اور WebAssembly
  • ردعمل — تبدیلیوں کی نگرانی کے لیے بلٹ ان Observable اور Flow
  • آسان انضمام — نوٹیشنز کے ذریعے کوڈ جنریشن، SQL استفسارات کے بغیر

ObjectBox کیا ہے؟

ObjectBox ایک ان میموری NoSQL ڈیٹا بیس ہے جسے جرمن کمپنی ObjectBox.io نے تیار کیا ہے۔ روایتی رلیشنل ڈیٹا بیس کے برعکس، ObjectBox اپنے SLOT (Super Lightweight Object Tree) فارمیٹ کا استعمال کرتے ہوئے اشیاء کو براہ راست فلیٹ فائلوں میں اسٹور کرتا ہے۔ یہ ORM اور SQL تجزیہ کے اوور ہیڈ کو ختم کرتا ہے۔ SLOT فارمیٹ محدود میموری والے آلات کے لیے بہتر بنایا گیا ہے: ڈیٹا خود بخود ڈیفراگمنٹ ہوتا ہے اور ڈیٹا بیس کا سائز ریکارڈز کی اسی تعداد والے مساوی SQLite ڈیٹا بیس سے اوسطاً 4–6 گنا چھوٹا ہوتا ہے۔

ObjectBox تمام بڑے موبائل پلیٹ فارمز کو سپورٹ کرتا ہے: Android، iOS اور Flutter۔ Android کے لیے، ObjectBox Gradle Plugin کے ذریعے کوڈ جنریشن دستیاب ہے، جو نوٹ شدہ ہستیوں پر کارروائی کرتا ہے اور ڈیٹا کے ساتھ کام کرنے کے لیے Box کلاسز بناتا ہے۔ Flutter کے لیے Dart ریپر کے ساتھ ایک مقامی پلگ ان استعمال کیا جاتا ہے۔ موبائل پلیٹ فارمز کے علاوہ، ObjectBox Linux، macOS، Windows اور WebAssembly پر چلتا ہے، جس سے موبائل ایپ اور سرور سنکرونائزیشن کے درمیان ڈیٹا ماڈل کو دوبارہ استعمال کیا جا سکتا ہے۔

ObjectBox مطالعہ (2023) کے مطابق، ڈیٹا بیس Google Play پر 5,000 سے زیادہ ایپلیکیشنز میں استعمال ہوتا ہے، جس میں 10 ملین سے زیادہ صارفین والی ایپس بھی شامل ہیں۔ اہم استعمال کی صورتیں: ڈیٹا کیشنگ، آف لائن آپریشن اور ٹائم سیریز اسٹوریج (IoT)۔ ObjectBox خاص طور پر صحت اور فٹنس ٹریکنگ ایپس میں مقبول ہے جنہیں مسلسل انٹرنیٹ کنیکشن کے بغیر ڈیوائس پر سینسر ریڈنگز کی تیز ریکارڈنگ اور متعدد آلات سے تجزیہ جمع کرنے کی ضرورت ہوتی ہے۔

تاریخ اور پوزیشننگ

ObjectBox Android پلیٹ فارم کے لیے Realm اور SQLite کے متبادل کے طور پر سامنے آیا۔ پہلا مستحکم ورژن 2018 میں جاری کیا گیا تھا۔ Realm سے اہم فرق یہ ہے کہ ObjectBox پر کوئی GPL پابندیاں نہیں ہیں (Apache 2.0 استعمال کرتا ہے) اور یہ زیادہ پلیٹ فارمز کو سپورٹ کرتا ہے: موبائل آلات سے لے کر Linux سرورز تک۔

اہم خصوصیات

ObjectBox فراہم کرتا ہے: خودکار Box کلاس جنریشن، تیز تلاش کے لیے بلٹ ان انڈیکسز، واپسی کی حمایت کے ساتھ لین دین، RxJava اور Kotlin Flow کے ذریعے ری ایکٹیو استفسارات، اور ObjectBox Sync (ملکیتی پروٹوکول) کے ذریعے ڈیوائس ٹو ڈیوائس سنکرونائزیشن۔ Firebase Realtime Database کے برعکس، ObjectBox Sync مرکزی سرور کے بغیر پیر ٹو پیئر ماڈل پر کام کرتا ہے، جس سے تاخیر اور انفراسٹرکچر کے اخراجات کم ہوتے ہیں۔

ObjectBox کیسے کام کرتا ہے؟

ObjectBox ڈیٹا کو اپنے بائنری فارمیٹ .mdb (ObjectBox Data File) میں ذخیرہ کرتا ہے۔ ہر ہستی ایک فائل پر میپ ہوتی ہے، جہاں ریکارڈز ایک مقررہ آفسیٹ کے ساتھ ترتیب وار ذخیرہ ہوتے ہیں۔ یہ مکمل فائل اسکین کیے بغیر انفرادی اشیاء کو پڑھنے اور لکھنے کی اجازت دیتا ہے۔

ObjectBox کے ساتھ کام کرنے کے لیے SQL کی ضرورت نہیں ہے: استفسارات کوڈ میں fluent API کے ذریعے بنائے جاتے ہیں۔ کمپائلر معاون کلاسز MyObjectBox اور Boxes تیار کرتا ہے جو تمام CRUD آپریشنز کو انکیپسلیٹ کرتی ہیں۔ ڈیٹا ماڈل نوٹیشنز @Entity، @Id، @Index اور @Relation کے ذریعے بیان کیا جاتا ہے۔

kotlin
// Connecting ObjectBox in Android
class App: Application() {
    lateinit var boxStore: BoxStore

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

ObjectBox بمقابلہ SQLite: کارکردگی کا موازنہ

سرکاری بینچ مارکس کے مطابق، ObjectBox رفتار میں SQLite سے نمایاں طور پر بہتر ہے، خاص طور پر بیچ انسرٹس اور بڑے پیمانے پر پڑھنے میں۔ تاہم، SQLite اپنی وسعت اور بلٹ ان SQL سپورٹ کی وجہ سے موبائل ایپلیکیشنز کے لیے ڈی فیکٹو معیار بنا ہوا ہے۔

آپریشنObjectBoxSQLiteفرق
انسرٹ (1000 ریکارڈ)~5 ms~180 ms×36 تیز
پڑھنا (1000 ریکارڈ)~3 ms~70 ms×23 تیز
اپ ڈیٹ (1000 ریکارڈ)~6 ms~150 ms×25 تیز
انڈیکس تلاش~0.1 ms~2 ms×20 تیز
DB کا سائز (1000 اشیاء)~28 KB~112 KB4 گنا چھوٹا

ObjectBox کب بہترین نہیں ہے

ObjectBox ان منظرناموں میں SQLite سے پیچھے رہ جاتا ہے جن میں پیچیدہ JOIN استفسارات، مجموعی فنکشنز (SUM, COUNT گروپنگ کے ساتھ)، یا موجودہ SQL اسکیما کے ساتھ انضمام کی ضرورت ہوتی ہے۔ اگر پروجیکٹ پہلے سے Room ORM کے ساتھ SQLite استعمال کرتا ہے، تو ObjectBox میں منتقلی کے لیے تمام ڈیٹا تک رسائی کی منطق کو دوبارہ لکھنا ہوگا۔ ObjectBox کسٹم SQL استفسارات کو بھی سپورٹ نہیں کرتا — صرف fluent API۔ تاہم، عام CRUD آپریشنز اور کیشنگ کے لیے، ObjectBox 100 گنا تک کارکردگی میں بہتری فراہم کرتا ہے، جیسا کہ مختلف OS ورژنز والے Android آلات پر سرکاری بینچ مارکس سے تصدیق شدہ ہے۔

ObjectBox کے ساتھ کوڈ کی مثالیں

ObjectBox ہستیوں کی وضاحت کے لیے نوٹیشنز استعمال کرتا ہے۔ کمپائلیشن کے بعد، put، get، remove اور query طریقوں والی Box کلاسز بنائی جاتی ہیں۔ ذیل میں ٹو ڈو لسٹ ایپ میں Task ماڈل کے لیے عام آپریشنز دیے گئے ہیں۔

ایک ہستی کی وضاحت

ہر ہستی کو @Entity سے نوٹ کیا جاتا ہے۔ @Id والا فیلڈ پرائمری کلید بن جاتا ہے اور @Index اس فیلڈ پر تلاش کو تیز کرتا ہے۔ ObjectBox قدر 0 ہونے پر خودکار ID جنریشن کو سپورٹ کرتا ہے۔

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

CRUD آپریشنز

Box ہستیوں کے ساتھ کام کرنے کے لیے اہم کلاس ہے۔ put() طریقہ کسی شے کو محفوظ یا اپ ڈیٹ کرتا ہے، get() ID سے پڑھتا ہے اور remove() حذف کرتا ہے۔ تمام بنیادی آپریشنز مطابقت پذیر ہیں اور کالنگ تھریڈ پر انجام پاتے ہیں۔

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

// Create
val task = Task(title = "Buy products", priority = 3)
val newId = taskBox.put(task)

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

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

// Delete
taskBox.remove(newId)

ری ایکٹیو استفسارات

ObjectBox .subscribe() کے ذریعے ری ایکٹیو استفسارات کو سپورٹ کرتا ہے۔ سبسکرائبر کو اطلاع ملتی ہے جب استفسار کی شرط سے مماثل ڈیٹا تبدیل ہوتا ہے۔ یہ UI کے لیے آسان ہے جو آئٹمز شامل یا ہٹائے جانے پر خود بخود فہرست کو اپ ڈیٹ کرتا ہے۔

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

query.subscribe { tasks ->
    // tasks — List, خودکار طور پر اپڈیٹ ہوتا ہے
    updateUi(tasks)
}

ObjectBox میں تعلقات اور استفسارات

ObjectBox ہستیوں کے درمیان تعلقات کو سپورٹ کرتا ہے — ایک سے ایک، ایک سے کئی اور کئی سے کئی۔ تعلقات @Relation نوٹیشن کے ذریعے وضع کیے جاتے ہیں۔ SQLite کے برعکس، ObjectBox بیرونی کنجیاں استعمال نہیں کرتا: تعلقات فلیٹ فائلوں میں ID کی فہرستوں کے ذریعے لاگو کیے جاتے ہیں، جو اشیاء کے گراف نیویگیشن کو تیز کرتا ہے۔

@Backlink کے ذریعے ایک سے کئی

@Backlink تعلق علیحدہ ریفرنس فیلڈ کے بغیر کسی چائلڈ ہستی سے اس کے پیرنٹ تک جانے کی اجازت دیتا ہے۔ ObjectBox خود بخود بیک لنک کو برقرار رکھتا ہے، ڈیٹا کی نقل اور دو ٹیبلوں کے درمیان مطابقت پذیری کو ختم کرتا ہے۔

Fluent استفسارات

ObjectBox Query Builder شرائط کی زنجیریں بنانے کی اجازت دیتا ہے: equal، notEqual، greater، less، in، contains، startsWith۔ تمام شرائط and/or کے ذریعے ملائی جا سکتی ہیں۔ نتیجہ کو ترتیب دیا، محدود کیا جا سکتا ہے اور List یا LazyList (بڑے ڈیٹا سیٹس کے لیے) کے طور پر حاصل کیا جا سکتا ہے۔

تیز تلاش کے لیے انڈیکس ترتیب دینا

ObjectBox خود بخود @Id فیلڈ کو انڈیکس کرتا ہے۔ کسٹم انڈیکس کے لیے، ان فیلڈز پر @Index نوٹیشن استعمال کریں جن پر کثرت سے استفسار کیا جاتا ہے۔ انڈیکس equal اور in استفسارات کو تیز کرتے ہیں لیکن انسرٹ کو سست کرتے ہیں — ان فیلڈز کو انڈیکس نہ کریں جن پر تلاش نہیں کی جاتی۔ ObjectBox بیک وقت متعدد فیلڈز کے ذریعے فلٹر کرنے کے لیے کمپوزٹ انڈیکس کو سپورٹ کرتا ہے۔ کمپوزٹ انڈیکس خاص طور پر لسٹ فلٹرز کے لیے مفید ہیں: مثال کے طور پر، isCompleted اور priority فیلڈز پر کمپوزٹ انڈیکس کے ساتھ اعلی ترجیح والے نامکمل کاموں کی تلاش دس گنا تیز ہوتی ہے۔

ObjectBox Sync — آلات کے درمیان مطابقت پذیری

ObjectBox Sync آلات کے درمیان ریئل ٹائم ڈیٹا سنکرونائزیشن کے لیے ایک ملکیتی ٹیکنالوجی ہے۔ یہ مؤخر الذکر لکھنے والے جیتتا ہے کے ذریعے تنازعات کے حل کے ساتھ WebSocket پر مبنی پروٹوکول استعمال کرتی ہے۔ Sync ان ایپس کے لیے موزوں ہے جنہیں آف لائن سنکرونائزیشن کی ضرورت ہے: نوٹس، ٹاسک لسٹس، متعدد سینسرز سے IoT ڈیٹا۔ تاہم، پروڈکشن کے لیے لائسنس کی خریداری ضروری ہے۔

kotlin
// Query with multiple conditions
val highPriorityIncomplete = taskBox.query()
    .greater(Task_.priority, 5)
    .equal(Task_.isCompleted, false)
    .build()
    .find()

// Substring search
val searchResults = taskBox.query()
    .contains(Task_.title, "product", StringOrder.CASE_INSENSITIVE)
    .build()
    .find()

اکثر پوچھے گئے سوالات

کیا ObjectBox تجارتی استعمال کے لیے مفت ہے؟

ObjectBox Apache 2.0 لائسنس کے تحت تقسیم کیا جاتا ہے، جو بغیر کسی پابندی کے تجارتی استعمال کی اجازت دیتا ہے۔ ObjectBox Sync فیچر (کراس پلیٹ فارم سنکرونائزیشن) ملکیتی ہے اور پروڈکشن کے لیے لائسنس کی خریداری کی ضرورت ہے۔

کیا ObjectBox ملٹی تھریڈنگ کو سپورٹ کرتا ہے؟

BoxStore تھریڈ سیف ہے: متعدد تھریڈز بیک وقت ڈیٹا پڑھ سکتے ہیں۔ تحریر Box کی سطح پر لاک ہوتی ہے۔ پیچیدہ لین دین کے لیے، boxStore.runInTx() استعمال کریں، جو آپریشنز کے ایک گروپ کی ایٹمیٹی کی ضمانت دیتا ہے۔

کیا ObjectBox Kotlin Multiplatform کے ساتھ استعمال کیا جا سکتا ہے؟

ہاں، ObjectBox ورژن 3.0 سے Kotlin Multiplatform (KMP) کو سپورٹ کرتا ہے۔ Android، iOS، JVM اور Native اہداف دستیاب ہیں۔ KMP کے لیے، expect/actual سپورٹ کے ساتھ ایک علیحدہ Gradle پلگ ان objectbox-kotlin استعمال کیا جاتا ہے۔

ObjectBox ڈیٹا بیس کا بیک اپ کیسے لیں؟

ObjectBox ایپ ڈائرکٹری میں .mdb فائلوں میں ڈیٹا ذخیرہ کرتا ہے۔ بیک اپ کے لیے، BoxStore.copy() کے ذریعے پوری ObjectBox ڈائرکٹری کاپی کریں یا boxStore.close() کو کال کرنے کے بعد دستی طور پر فائلیں کاپی کریں۔ لائیو فائلیں کاپی نہیں کی جا سکتیں — اس سے ڈیٹا خراب ہو جائے گا۔

ObjectBox Room سے کیسے مختلف ہے؟

Room SQLite کے اوپر ایک ORM ہے، جس کے لیے SQL استفسارات کی ضرورت ہوتی ہے اور اس میں آبجیکٹ میپنگ کا اوور ہیڈ ہوتا ہے۔ ObjectBox SQL کے بغیر ایک NoSQL ڈیٹا بیس ہے، جو ایک درجہ تیز ہے، لیکن پیچیدہ JOINs کو سپورٹ نہیں کرتا اور رلیشنل ڈیٹا بیس نہیں ہے۔ انتخاب کام پر منحصر ہے: رلیشنل ڈیٹا کے لیے — Room، تیز آبجیکٹ اسٹوریج کے لیے — ObjectBox۔

خلاصہ

  • ObjectBox — موبائل آلات پر SQLite سے 10–100 گنا بہتر کارکردگی والا NoSQL DB
  • فلیٹ فائلیں — SQL پرت اور ORM اوور ہیڈ کے بغیر ملکیتی SLOT فارمیٹ
  • نوٹیشنز — ڈیٹا ماڈل کی وضاحت کے لیے @Entity، @Id، @Index، @Relation
  • ردعمل — خودکار UI اپ ڈیٹ کے لیے بلٹ ان Observable اور Flow
  • کراس پلیٹ فارم — Android، iOS، Linux، macOS، Windows، WebAssembly
  • کیشنگ اور آف لائن — موبائل ایپس میں ObjectBox کا بنیادی استعمال
  • سفارش — ان کاموں کے لیے ObjectBox منتخب کریں جہاں ڈیٹا تک رسائی کی رفتار رلیشنل انٹیگریٹی سے زیادہ اہم ہے

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں