মোবাইল ডেভেলপমেন্টে ডেটা স্টোরেজ: এটি কী, পদ্ধতি এবং এটি কীভাবে কাজ করে

লেখক: IT Sectr প্রকাশিত: 2026-03-08 পড়ার সময়: 9 মিনিট

ডেটা স্টোরেজ একটি মোবাইল অ্যাপ্লিকেশনের মূল কাজগুলির মধ্যে একটি, যা কর্মক্ষমতা, নিরাপত্তা এবং ব্যবহারকারীর অভিজ্ঞতাকে প্রভাবিত করে। এই নিবন্ধে আমরা SQLite, Room, Core Data, Realm, Firebase Firestore, SharedPreferences, DataStore, Keystore এবং Keychain, সেইসাথে সিরিয়ালাইজেশন ফর্ম্যাট (JSON, Protobuf) এবং লাইব্রেরি (Gson, Moshi, kotlinx.serialization) নিয়ে আলোচনা করব। এই গাইডটি নতুন ডেভেলপারদের ডেটা স্টোরেজের সঠিক সমাধান নির্বাচনে সাহায্য করবে। আরও জানতে ডেটা স্টোরেজের অফিসিয়াল Android গাইড দেখুন।

মূল পয়েন্ট

  • Room (Android) এবং Core Data (iOS) প্রতিটি প্ল্যাটফর্মে রিলেশনাল ডেটাবেস নিয়ে কাজ করার জন্য অফিসিয়াল ORM
  • SharedPreferences (Android) DataStore দ্বারা প্রতিস্থাপিত হচ্ছে — একটি অ্যাসিঙ্ক্রোনাস এবং টাইপ-নিরাপদ কী-ভ্যালু স্টোরেজ
  • টোকেনের নিরাপদ স্টোরেজের জন্য হার্ডওয়্যার সুরক্ষা সহ Keystore (Android) এবং Keychain (iOS) ব্যবহার করা হয়
  • Firebase Firestore রিয়েল-টাইম সিঙ্ক্রোনাইজেশন এবং অফলাইন মোড সহ একটি NoSQL ডেটাবেস
  • সিরিয়ালাইজেশন — Gson, Moshi, kotlinx.serialization এর মাধ্যমে JSON/Protobuf-এ অবজেক্ট রূপান্তর

স্থানীয় ডেটাবেস: SQLite, Room, Core Data, Realm

এককের মধ্যে সম্পর্ক সহ কাঠামোবদ্ধ ডেটা সংরক্ষণের জন্য রিলেশনাল ডেটাবেস ব্যবহার করা হয়।

SQLite

SQLite একটি এমবেডেড রিলেশনাল ডেটাবেস যা যেকোনো মোবাইল প্ল্যাটফর্মে কাজ করে। এর আলাদা সার্ভারের প্রয়োজন হয় না, ডেটা একটি ফাইলে সংরক্ষিত হয়। SQLite হল Room (Android) এবং ঐচ্ছিকভাবে Core Data (iOS)-এর ভিত্তি। লাইব্রেরি: android.database.sqlite (Android), FMDB/Core Data (iOS), sqflite (Flutter)।

Room (Android)

Room SQLite নিয়ে কাজ করার জন্য অফিসিয়াল Android Architecture Components লাইব্রেরি। এটি একটি ORM স্তর প্রদান করে: Entity (টেবিল), DAO (কোয়েরি), Database (এন্ট্রি পয়েন্ট)। Room কম্পাইল টাইমে SQL কোয়েরি পরীক্ষা করে, করুটিন এবং Flow সমর্থন করে এবং স্বয়ংক্রিয়ভাবে স্কিমা মাইগ্রেট করে।

kotlin
@Entity
data class User(
    @PrimaryKey val id: Int,
    val name: String,
    val email: String
)

@Dao
interface UserDao {
    @Query("SELECT * FROM user WHERE id = :id")
    suspend fun getUser(id: Int): User?
}

Core Data (iOS)

Core Data হল অবজেক্ট গ্রাফ পরিচালনার জন্য Apple-এর ফ্রেমওয়ার্ক। এটি বিশুদ্ধ ডেটাবেস নয় — এটি SQLite, XML বা বাইনারি স্টোরেজের উপরে একটি পারসিস্টেন্স লেয়ার। Core Data অবজেক্ট (NSManagedObject), সম্পর্ক, স্কিমা ভার্সনিং, আনডু/রিডু এবং NSManagedObjectContext-এর মাধ্যমে মাল্টিথ্রেডিং পরিচালনা করে।

Realm

Realm SQLite-এর একটি বিকল্প, যা উচ্চ-কর্মক্ষমতা সম্পন্ন মোবাইল ডেটাবেস হিসেবে ডিজাইন করা হয়েছে। Realm রিড এবং রাইটে SQLite-এর চেয়ে দ্রুততর, রিয়েক্টিভ নোটিফিকেশন (Live Objects), অন-দ্য-ফ্লাই এনক্রিপশন এবং ক্রস-প্ল্যাটফর্ম (Android, iOS, Flutter, React Native) সমর্থন করে। অসুবিধা: বর্ধিত APK/IPA আকার এবং বেশি মেমরি ব্যবহার।

কী-ভ্যালু স্টোরেজ এবং সেটিংস

অল্প পরিমাণ ডেটা (সেটিংস, টোকেন, ক্যাশ) সংরক্ষণের জন্য সহজ কী-ভ্যালু স্টোরেজ ব্যবহার করা হয়।

SharedPreferences (Android)

SharedPreferences Android-এ একটি লিগেসি কী-ভ্যালু স্টোরেজ। অসুবিধা: সিঙ্ক্রোনাস অ্যাক্সেস (পড়ার সময় UI ব্লক করে), টাইপিংয়ের অভাব, বড় ফাইল লোড করার সময় ANR ঝুঁকি। নতুন প্রোজেক্টের জন্য সুপারিশ করা হয় না।

DataStore (Jetpack Android)

DataStore Google-এর কাছ থেকে SharedPreferences-এর আধুনিক প্রতিস্থাপন। এটি Kotlin Coroutines এবং Flow-এর মাধ্যমে অ্যাসিঙ্ক্রোনাসভাবে কাজ করে, Preferences DataStore (কী-ভ্যালু) এবং Proto DataStore (Protobuf-এর মাধ্যমে টাইপড ডেটা) সমর্থন করে। DataStore UI থ্রেডের জন্য নিরাপদ এবং ট্রানজেকশন সমর্থন করে।

NSUserDefaults (iOS)

UserDefaults iOS-এ ছোট সেটিংসের জন্য স্ট্যান্ডার্ড স্টোরেজ। এটি প্রিমিটিভ টাইপ, স্ট্রিং, তারিখ, Data সমর্থন করে। UserDefaults সিঙ্ক্রোনাস, তাই বড় ডেটা ভলিউমের জন্য উপযুক্ত নয়। register(defaults:) এর মাধ্যমে ডিফল্ট মান সেট করা হয়।

ক্লাউড ডেটাবেস: Firebase Firestore এবং Realtime DB

যে অ্যাপ্লিকেশনগুলিতে ডিভাইসের মধ্যে সিঙ্ক্রোনাইজেশন প্রয়োজন, সেখানে ডেটা সংরক্ষণের জন্য Firebase ক্লাউড ডেটাবেস ব্যবহার করা হয়।

Cloud Firestore

Firebase Firestore একটি NoSQL ডকুমেন্ট ডেটাবেস যা রিয়েল-টাইম সাবস্ক্রিপশন, স্বয়ংক্রিয় স্কেলিং, শক্তিশালী কোয়েরি এবং বিল্ট-ইন অফলাইন মোড সহ আসে। ডেটা কালেকশন এবং ডকুমেন্টে (JSON-সদৃশ কাঠামো) সংগঠিত হয়। Firestore ট্রানজেকশন এবং ব্যাচ অপারেশন সমর্থন করে। চ্যাট, ফিড এবং সোশ্যাল অ্যাপের জন্য আদর্শ।

Firebase Realtime Database

Firebase Realtime Database একটি পুরোনো Firebase NoSQL ডেটাবেস যা একটি একক JSON ট্রি হিসেবে ডেটা সংরক্ষণ করে। Firestore-এর চেয়ে সহজ তবে কোয়েরি এবং স্কেলিংয়ে কম নমনীয়। সহজ রিয়েল-টাইম অ্যাপ্লিকেশন (অনলাইন স্ট্যাটাস, সাধারণ চ্যাট) এর জন্য সুপারিশ করা হয়।

বৈশিষ্ট্য Cloud Firestore Firebase Realtime DB
ডেটা মডেলকালেকশন → ডকুমেন্টJSON ট্রি
কোয়েরিজটিল (ফিল্টারিং, সর্টিং, সীমা)সহজ (কী দ্বারা)
স্কেলিংস্বয়ংক্রিয়ম্যানুয়াল শার্ডিং
অফলাইন মোডহ্যাঁ (পারসিস্টেন্ট ক্যাশ)হ্যাঁ
মূল্য নির্ধারণপ্রতি রিড/রাইট অপারেশনপ্রতি ট্রাফিক + স্টোরেজ

নিরাপদ স্টোরেজ: Keystore, Keychain এবং EncryptedSharedPreferences

টোকেন, পাসওয়ার্ড এবং এনক্রিপশন কী সংরক্ষণের জন্য বিশেষ সুরক্ষিত স্টোরেজ প্রয়োজন।

Android Keystore

Android Keystore ক্রিপ্টোগ্রাফিক কীগুলির জন্য সিস্টেম স্টোরেজ। কীগুলি হার্ডওয়্যার পরিবেশে (TEE — Trusted Execution Environment) সংরক্ষিত হয়, যা অ্যাপ এবং OS-এর জন্য দুর্গম। এটি কী জেনারেশন, এনক্রিপশন এবং সাইনিং সমর্থন করে। Android 9+ এ StrongBox Keymaster (ডেডিকেটেড চিপ) অন্তর্ভুক্ত।

iOS Keychain

Keychain Services পাসওয়ার্ড, কী এবং সার্টিফিকেটের জন্য একটি নিরাপদ iOS স্টোরেজ। ডেটা হার্ডওয়্যার Secure Enclave ব্যবহার করে এনক্রিপ্ট করা হয়। Keychain অ্যাক্সেসিবিলিটি স্তর সমর্থন করে: Always, WhenUnlocked, WhenUnlockedThisDeviceOnly, AfterFirstUnlock।

EncryptedSharedPreferences (Android)

EncryptedSharedPreferences AES256-GCM এবং HKDF-এর মাধ্যমে কী এবং মান এনক্রিপশন সহ SharedPreferences-এর উপরে একটি র্যাপার। AndroidX Security লাইব্রেরিতে বাস্তবায়িত। টোকেন এবং সংবেদনশীল সেটিংস সংরক্ষণের জন্য সুপারিশ করা হয়।

IT Sectr-এ আমরা রিফ্রেশ-টোকেন এবং বায়োমেট্রিক-ভিত্তিক কী সংরক্ষণের জন্য Android Keystore + EncryptedSharedPreferences ব্যবহার করি। iOS-এ আমরা সর্বোচ্চ নিরাপত্তার জন্য kSecAttrAccessibleWhenUnlockedThisDeviceOnly স্তরের সাথে Keychain ব্যবহার করি।

ফাইল স্টোরেজ: Internal, External, Cache Directory

ফাইল স্টোরেজ (ছবি, ভিডিও, ডকুমেন্ট) এর জন্য মোবাইল প্ল্যাটফর্মগুলি বিভিন্ন ধরনের স্টোরেজ প্রদান করে।

Android Storage

Android Internal Storage (/data/data/প্যাকেজ/ — প্রাইভেট স্টোরেজ) এবং External Storage (SD কার্ড বা ইমুলেটেড পার্টিশন) এর মধ্যে পার্থক্য করে। Cache Directory হল অস্থায়ী স্টোরেজ যা সিস্টেম পরিষ্কার করতে পারে। Scoped Storage (Android 10+) External Storage-এ অ্যাক্সেস সীমাবদ্ধ করে — অ্যাপগুলি শুধুমাত্র নিজস্ব ফাইল বা MediaStore/SAF-এর মাধ্যমে ফাইল দেখে।

iOS Storage

iOS Documents Directory (iCloud ব্যাকআপ, স্থায়ী ডেটা), Library/Caches (অস্থায়ী ফাইল, ব্যাকআপ নয়) এবং Tmp Directory (অস্থায়ী, পরিষ্কার করা যেতে পারে) প্রদান করে। ফাইল সিস্টেমের সাথে কাজ করতে NSFileManager ব্যবহার করুন। iOS 11+ ক্লাউড ফাইলের জন্য File Provider সমর্থন করে।

ডেটা সিরিয়ালাইজেশন: JSON, Protobuf এবং লাইব্রেরি

সিরিয়ালাইজেশন অবজেক্টকে ট্রান্সমিশন বা স্টোরেজের জন্য ফর্ম্যাটে রূপান্তর করে। ডিসিরিয়ালাইজেশন বিপরীত প্রক্রিয়া।

ফর্ম্যাট

JSON (JavaScript Object Notation) সবচেয়ে জনপ্রিয় ফর্ম্যাট: পঠনযোগ্য, নমনীয়, সব প্ল্যাটফর্ম দ্বারা সমর্থিত। XML আরও কঠোর, লিগেসি সিস্টেমে ব্যবহৃত হয়। Protobuf (Protocol Buffers) Google-এর বাইনারি ফর্ম্যাট: JSON-এর চেয়ে 3-10 গুণ বেশি কমপ্যাক্ট, দ্রুত পার্সিং, কঠোর স্কিমা। উচ্চ-লোড সিস্টেম এবং মাইক্রোসার্ভিসের জন্য ব্যবহৃত হয়।

Android লাইব্রেরি

  • Gson (Google) — সহজ, নমনীয়, কিন্তু ধীর। Java/Kotlin অবজেক্টের সাথে স্বয়ংক্রিয়ভাবে কাজ করে
  • Moshi (Square) — Gson-এর চেয়ে দ্রুত, ভাল Kotlin সমর্থন (নন-নাল প্রপার্টি, ডিফল্ট ভ্যালু, সিল্ড ক্লাস)
  • kotlinx.serialization — JetBrains-এর নেটিভ Kotlin সিরিয়ালাইজেশন, কম্পাইল টাইমে কাজ করে, JSON, Protobuf, CBOR সমর্থন করে

iOS লাইব্রেরি

JSONSerialization JSON নিয়ে কাজ করার জন্য বিল্ট-ইন API। Codable (Encodable/Decodable) JSON, Property List এবং অন্যান্য ফর্ম্যাটে স্বয়ংক্রিয় সিরিয়ালাইজেশনের জন্য আধুনিক Swift প্রোটোকল।

swift
struct User: Codable {
    let id: Int
    let name: String
    let email: String
}
let user = User(id: 1, name: "Alice", email: "alice@example.com")
let encoder = JSONEncoder()
let jsonData = try encoder.encode(user)

ক্রস-প্ল্যাটফর্ম সমাধান: Hive, ObjectBox, Drift

Flutter এবং React Native-এর জন্য নিজস্ব কার্যকরী স্টোরেজ লাইব্রেরি রয়েছে।

Hive (Flutter)

Hive Flutter-এর জন্য একটি হালকা, দ্রুত কী-ভ্যালু স্টোরেজ। এর নেটিভ কোডের প্রয়োজন নেই (বিশুদ্ধ Dart), TypeAdapter-এর মাধ্যমে টাইপিং সমর্থন করে এবং isolates-এ কাজ করে। ক্যাশ, সেটিংস এবং ছোট ডেটার জন্য আদর্শ।

ObjectBox

ObjectBox Flutter, Android এবং iOS-এর জন্য একটি উচ্চ-কর্মক্ষমতা সম্পন্ন এমবেডেড ডেটাবেস। এটি SQLite-এর চেয়ে 10+ গুণ দ্রুত, ন্যূনতম ওভারহেডের জন্য ফ্ল্যাট ফাইল স্ট্রাকচার ব্যবহার করে। সম্পর্ক, কোয়েরি এবং রিয়েক্টিভ সাবস্ক্রিপশন (ObjectBox Dart) সমর্থন করে।

Drift (পূর্বে Moor)

Drift Flutter এবং Dart-এর জন্য একটি রিয়েক্টিভ SQLite লাইব্রেরি। এটি টাইপ-নিরাপদ কোয়েরি, মাইগ্রেশন, DAO ফাংশন এবং Stream সাপোর্ট (রিয়েক্টিভ আপডেট) প্রদান করে। Drift হল Flutter প্রোজেক্টের জন্য প্রাথমিক পছন্দ যেখানে SQLite প্রয়োজন।

সচরাচর জিজ্ঞাসিত প্রশ্ন

স্থানীয় ডেটা স্টোরেজের জন্য কী ভাল: Room নাকি Core Data?

পছন্দ প্ল্যাটফর্মের উপর নির্ভর করে: Room (Android) কম্পাইল-টাইম কোয়েরি পরীক্ষা সহ SQLite-ভিত্তিক অফিসিয়াল লাইব্রেরি। Core Data (iOS) অবজেক্ট গ্রাফ সহ Apple-এর ফ্রেমওয়ার্ক। ক্রস-প্ল্যাটফর্ম প্রোজেক্টের জন্য Realm বা ORM-এর মাধ্যমে SQLite উপযুক্ত।

SharedPreferences এবং DataStore-এর মধ্যে পার্থক্য কী?

SharedPreferences সিঙ্ক্রোনাস অ্যাক্সেস এবং ANR ঝুঁকি সহ পুরানো বাস্তবায়ন। DataStore (Jetpack) Kotlin Coroutines এবং Flow-ভিত্তিক আধুনিক প্রতিস্থাপন, যা অ্যাসিঙ্ক্রোনিসিটি, টাইপিং এবং ত্রুটি সুরক্ষা সমর্থন করে।

মোবাইল অ্যাপে টোকেন এবং পাসওয়ার্ড কীভাবে নিরাপদে সংরক্ষণ করবেন?

Android: EncryptedSharedPreferences বা Android Keystore। iOS: WhenUnlockedThisDeviceOnly অ্যাক্সেসিবিলিটি সহ Keychain Services। গুরুত্বপূর্ণ ডেটার জন্য, বায়োমেট্রিক্স সহ Secure Enclave (iOS) এবং হার্ডওয়্যার Keystore (Android) ব্যবহার করুন।

Firebase Firestore কী এবং কখন এটি ব্যবহার করা উচিত?

Cloud Firestore রিয়েল-টাইম সিঙ্ক্রোনাইজেশন, অফলাইন মোড এবং স্বয়ংক্রিয় স্কেলিং সহ Firebase-এর একটি NoSQL ডেটাবেস। এটি চ্যাট, নিউজ ফিড এবং এমন প্রোজেক্টের জন্য উপযুক্ত যেখানে ডিভাইসের মধ্যে সিঙ্ক্রোনাইজেশন প্রয়োজন।

Flutter এবং React Native-এর জন্য কী কী ORM রয়েছে?

Flutter: Hive (দ্রুত কী-ভ্যালু), Floor (SQLite ORM), Drift (Moor, রিয়েক্টিভ SQLite), ObjectBox (উচ্চ-কর্মক্ষমতা এমবেডেড DB)। React Native: Realm, WatermelonDB (লেজি লোডিং) এবং AsyncStorage (SharedPreferences-এর অনুরূপ)।

সারাংশ

  • Room (Android) এবং Core Data (iOS) প্রতিটি প্ল্যাটফর্মে রিলেশনাল ডেটাবেসের জন্য অফিসিয়াল সমাধান
  • DataStore অ্যাসিঙ্ক্রোনাস সেটিংস স্টোরেজের জন্য SharedPreferences প্রতিস্থাপন করে
  • Keystore / Keychain টোকেন এবং কী-এর নিরাপদ স্টোরেজের জন্য বাধ্যতামূলক
  • Firebase Firestore ডিভাইসের মধ্যে রিয়েল-টাইম সিঙ্ক্রোনাইজেশনের জন্য সেরা পছন্দ
  • Kotlinx.serialization (Android) এবং Codable (iOS) আধুনিক সিরিয়ালাইজেশন পদ্ধতি
  • Flutter-এর জন্য: Drift (SQLite), Hive (কী-ভ্যালু), ObjectBox (উচ্চ কর্মক্ষমতা)
  • Realm রিয়েক্টিভ নোটিফিকেশন সহ SQLite-এর ক্রস-প্ল্যাটফর্ম বিকল্প

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

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