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 প্রয়োজন নেই: কোডে ফ্লুয়েন্ট 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 মি.সে.~180 মি.সে.×36 গুণ দ্রুত
পড়া (1000 রেকর্ড)~3 মি.সে.~70 মি.সে.×23 গুণ দ্রুত
আপডেট (1000 রেকর্ড)~6 মি.সে.~150 মি.সে.×25 গুণ দ্রুত
ইনডেক্স অনুসন্ধান~0.1 মি.সে.~2 মি.সে.×20 গুণ দ্রুত
DB আকার (1000 অবজেক্ট)~28 KB~112 KB4 গুণ ছোট

কখন ObjectBox সর্বোত্তম নয়

ObjectBox জটিল JOIN কোয়েরি, সমষ্টিগত ফাংশন (SUM, COUNT গ্রুপিং সহ), বা বিদ্যমান SQL স্কিমার সাথে ইন্টিগ্রেশন প্রয়োজন এমন পরিস্থিতিতে SQLite-এর থেকে পিছিয়ে থাকে। যদি প্রজেক্টটি ইতিমধ্যেই Room ORM-এর সাথে SQLite ব্যবহার করে, তাহলে ObjectBox-এ মাইগ্রেট করতে সমস্ত ডেটা অ্যাক্সেস লজিক পুনরায় লিখতে হবে। ObjectBox কাস্টম SQL কোয়েরিও সমর্থন করে না — শুধুমাত্র ফ্লুয়েন্ট 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 এনটিটির মধ্যে সম্পর্ক সমর্থন করে — To-One, To-Many এবং Many-to-Many। সম্পর্ক @Relation অ্যানোটেশনের মাধ্যমে সংজ্ঞায়িত করা হয়। SQLite-এর বিপরীতে, ObjectBox ফরেন কী ব্যবহার করে না: সম্পর্ক ফ্ল্যাট ফাইলে ID তালিকার মাধ্যমে বাস্তবায়িত হয়, যা অবজেক্টের গ্রাফ নেভিগেশন দ্রুত করে।

@Backlink-এর মাধ্যমে One-to-Many

@Backlink সম্পর্ক একটি পৃথক রেফারেন্স ফিল্ড ছাড়া চাইল্ড এনটিটি থেকে তার প্যারেন্টে যাওয়ার অনুমতি দেয়। ObjectBox স্বয়ংক্রিয়ভাবে ব্যাকলিংক বজায় রাখে, ডেটা ডুপ্লিকেশন এবং দুটি টেবিলের মধ্যে সিঙ্ক্রোনাইজেশন দূর করে।

ফ্লুয়েন্ট কোয়েরি

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 একটি NoSQL ডাটাবেস SQL ছাড়া, একটি অর্ডার অফ ম্যাগনিচিউড দ্রুত, কিন্তু জটিল JOIN সমর্থন করে না এবং রিলেশনাল ডাটাবেস নয়। পছন্দ কাজের উপর নির্ভর করে: রিলেশনাল ডেটার জন্য — 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন