ডেটা স্টোরেজ একটি মোবাইল অ্যাপ্লিকেশনের মূল কাজগুলির মধ্যে একটি, যা কর্মক্ষমতা, নিরাপত্তা এবং ব্যবহারকারীর অভিজ্ঞতাকে প্রভাবিত করে। এই নিবন্ধে আমরা SQLite, Room, Core Data, Realm, Firebase Firestore, SharedPreferences, DataStore, Keystore এবং Keychain, সেইসাথে সিরিয়ালাইজেশন ফর্ম্যাট (JSON, Protobuf) এবং লাইব্রেরি (Gson, Moshi, kotlinx.serialization) নিয়ে আলোচনা করব। এই গাইডটি নতুন ডেভেলপারদের ডেটা স্টোরেজের সঠিক সমাধান নির্বাচনে সাহায্য করবে। আরও জানতে ডেটা স্টোরেজের অফিসিয়াল Android গাইড দেখুন।
মূল পয়েন্ট
এককের মধ্যে সম্পর্ক সহ কাঠামোবদ্ধ ডেটা সংরক্ষণের জন্য রিলেশনাল ডেটাবেস ব্যবহার করা হয়।
SQLite একটি এমবেডেড রিলেশনাল ডেটাবেস যা যেকোনো মোবাইল প্ল্যাটফর্মে কাজ করে। এর আলাদা সার্ভারের প্রয়োজন হয় না, ডেটা একটি ফাইলে সংরক্ষিত হয়। SQLite হল Room (Android) এবং ঐচ্ছিকভাবে Core Data (iOS)-এর ভিত্তি। লাইব্রেরি: android.database.sqlite (Android), FMDB/Core Data (iOS), sqflite (Flutter)।
Room SQLite নিয়ে কাজ করার জন্য অফিসিয়াল Android Architecture Components লাইব্রেরি। এটি একটি ORM স্তর প্রদান করে: Entity (টেবিল), DAO (কোয়েরি), Database (এন্ট্রি পয়েন্ট)। Room কম্পাইল টাইমে SQL কোয়েরি পরীক্ষা করে, করুটিন এবং Flow সমর্থন করে এবং স্বয়ংক্রিয়ভাবে স্কিমা মাইগ্রেট করে।
@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 হল অবজেক্ট গ্রাফ পরিচালনার জন্য Apple-এর ফ্রেমওয়ার্ক। এটি বিশুদ্ধ ডেটাবেস নয় — এটি SQLite, XML বা বাইনারি স্টোরেজের উপরে একটি পারসিস্টেন্স লেয়ার। Core Data অবজেক্ট (NSManagedObject), সম্পর্ক, স্কিমা ভার্সনিং, আনডু/রিডু এবং NSManagedObjectContext-এর মাধ্যমে মাল্টিথ্রেডিং পরিচালনা করে।
Realm SQLite-এর একটি বিকল্প, যা উচ্চ-কর্মক্ষমতা সম্পন্ন মোবাইল ডেটাবেস হিসেবে ডিজাইন করা হয়েছে। Realm রিড এবং রাইটে SQLite-এর চেয়ে দ্রুততর, রিয়েক্টিভ নোটিফিকেশন (Live Objects), অন-দ্য-ফ্লাই এনক্রিপশন এবং ক্রস-প্ল্যাটফর্ম (Android, iOS, Flutter, React Native) সমর্থন করে। অসুবিধা: বর্ধিত APK/IPA আকার এবং বেশি মেমরি ব্যবহার।
অল্প পরিমাণ ডেটা (সেটিংস, টোকেন, ক্যাশ) সংরক্ষণের জন্য সহজ কী-ভ্যালু স্টোরেজ ব্যবহার করা হয়।
SharedPreferences Android-এ একটি লিগেসি কী-ভ্যালু স্টোরেজ। অসুবিধা: সিঙ্ক্রোনাস অ্যাক্সেস (পড়ার সময় UI ব্লক করে), টাইপিংয়ের অভাব, বড় ফাইল লোড করার সময় ANR ঝুঁকি। নতুন প্রোজেক্টের জন্য সুপারিশ করা হয় না।
DataStore Google-এর কাছ থেকে SharedPreferences-এর আধুনিক প্রতিস্থাপন। এটি Kotlin Coroutines এবং Flow-এর মাধ্যমে অ্যাসিঙ্ক্রোনাসভাবে কাজ করে, Preferences DataStore (কী-ভ্যালু) এবং Proto DataStore (Protobuf-এর মাধ্যমে টাইপড ডেটা) সমর্থন করে। DataStore UI থ্রেডের জন্য নিরাপদ এবং ট্রানজেকশন সমর্থন করে।
UserDefaults iOS-এ ছোট সেটিংসের জন্য স্ট্যান্ডার্ড স্টোরেজ। এটি প্রিমিটিভ টাইপ, স্ট্রিং, তারিখ, Data সমর্থন করে। UserDefaults সিঙ্ক্রোনাস, তাই বড় ডেটা ভলিউমের জন্য উপযুক্ত নয়। register(defaults:) এর মাধ্যমে ডিফল্ট মান সেট করা হয়।
যে অ্যাপ্লিকেশনগুলিতে ডিভাইসের মধ্যে সিঙ্ক্রোনাইজেশন প্রয়োজন, সেখানে ডেটা সংরক্ষণের জন্য Firebase ক্লাউড ডেটাবেস ব্যবহার করা হয়।
Firebase Firestore একটি NoSQL ডকুমেন্ট ডেটাবেস যা রিয়েল-টাইম সাবস্ক্রিপশন, স্বয়ংক্রিয় স্কেলিং, শক্তিশালী কোয়েরি এবং বিল্ট-ইন অফলাইন মোড সহ আসে। ডেটা কালেকশন এবং ডকুমেন্টে (JSON-সদৃশ কাঠামো) সংগঠিত হয়। Firestore ট্রানজেকশন এবং ব্যাচ অপারেশন সমর্থন করে। চ্যাট, ফিড এবং সোশ্যাল অ্যাপের জন্য আদর্শ।
Firebase Realtime Database একটি পুরোনো Firebase NoSQL ডেটাবেস যা একটি একক JSON ট্রি হিসেবে ডেটা সংরক্ষণ করে। Firestore-এর চেয়ে সহজ তবে কোয়েরি এবং স্কেলিংয়ে কম নমনীয়। সহজ রিয়েল-টাইম অ্যাপ্লিকেশন (অনলাইন স্ট্যাটাস, সাধারণ চ্যাট) এর জন্য সুপারিশ করা হয়।
| বৈশিষ্ট্য | Cloud Firestore | Firebase Realtime DB |
|---|---|---|
| ডেটা মডেল | কালেকশন → ডকুমেন্ট | JSON ট্রি |
| কোয়েরি | জটিল (ফিল্টারিং, সর্টিং, সীমা) | সহজ (কী দ্বারা) |
| স্কেলিং | স্বয়ংক্রিয় | ম্যানুয়াল শার্ডিং |
| অফলাইন মোড | হ্যাঁ (পারসিস্টেন্ট ক্যাশ) | হ্যাঁ |
| মূল্য নির্ধারণ | প্রতি রিড/রাইট অপারেশন | প্রতি ট্রাফিক + স্টোরেজ |
টোকেন, পাসওয়ার্ড এবং এনক্রিপশন কী সংরক্ষণের জন্য বিশেষ সুরক্ষিত স্টোরেজ প্রয়োজন।
Android Keystore ক্রিপ্টোগ্রাফিক কীগুলির জন্য সিস্টেম স্টোরেজ। কীগুলি হার্ডওয়্যার পরিবেশে (TEE — Trusted Execution Environment) সংরক্ষিত হয়, যা অ্যাপ এবং OS-এর জন্য দুর্গম। এটি কী জেনারেশন, এনক্রিপশন এবং সাইনিং সমর্থন করে। Android 9+ এ StrongBox Keymaster (ডেডিকেটেড চিপ) অন্তর্ভুক্ত।
Keychain Services পাসওয়ার্ড, কী এবং সার্টিফিকেটের জন্য একটি নিরাপদ iOS স্টোরেজ। ডেটা হার্ডওয়্যার Secure Enclave ব্যবহার করে এনক্রিপ্ট করা হয়। Keychain অ্যাক্সেসিবিলিটি স্তর সমর্থন করে: Always, WhenUnlocked, WhenUnlockedThisDeviceOnly, AfterFirstUnlock।
EncryptedSharedPreferences AES256-GCM এবং HKDF-এর মাধ্যমে কী এবং মান এনক্রিপশন সহ SharedPreferences-এর উপরে একটি র্যাপার। AndroidX Security লাইব্রেরিতে বাস্তবায়িত। টোকেন এবং সংবেদনশীল সেটিংস সংরক্ষণের জন্য সুপারিশ করা হয়।
IT Sectr-এ আমরা রিফ্রেশ-টোকেন এবং বায়োমেট্রিক-ভিত্তিক কী সংরক্ষণের জন্য Android Keystore + EncryptedSharedPreferences ব্যবহার করি। iOS-এ আমরা সর্বোচ্চ নিরাপত্তার জন্য kSecAttrAccessibleWhenUnlockedThisDeviceOnly স্তরের সাথে Keychain ব্যবহার করি।
ফাইল স্টোরেজ (ছবি, ভিডিও, ডকুমেন্ট) এর জন্য মোবাইল প্ল্যাটফর্মগুলি বিভিন্ন ধরনের স্টোরেজ প্রদান করে।
Android Internal Storage (/data/data/প্যাকেজ/ — প্রাইভেট স্টোরেজ) এবং External Storage (SD কার্ড বা ইমুলেটেড পার্টিশন) এর মধ্যে পার্থক্য করে। Cache Directory হল অস্থায়ী স্টোরেজ যা সিস্টেম পরিষ্কার করতে পারে। Scoped Storage (Android 10+) External Storage-এ অ্যাক্সেস সীমাবদ্ধ করে — অ্যাপগুলি শুধুমাত্র নিজস্ব ফাইল বা MediaStore/SAF-এর মাধ্যমে ফাইল দেখে।
iOS Documents Directory (iCloud ব্যাকআপ, স্থায়ী ডেটা), Library/Caches (অস্থায়ী ফাইল, ব্যাকআপ নয়) এবং Tmp Directory (অস্থায়ী, পরিষ্কার করা যেতে পারে) প্রদান করে। ফাইল সিস্টেমের সাথে কাজ করতে NSFileManager ব্যবহার করুন। iOS 11+ ক্লাউড ফাইলের জন্য File Provider সমর্থন করে।
সিরিয়ালাইজেশন অবজেক্টকে ট্রান্সমিশন বা স্টোরেজের জন্য ফর্ম্যাটে রূপান্তর করে। ডিসিরিয়ালাইজেশন বিপরীত প্রক্রিয়া।
JSON (JavaScript Object Notation) সবচেয়ে জনপ্রিয় ফর্ম্যাট: পঠনযোগ্য, নমনীয়, সব প্ল্যাটফর্ম দ্বারা সমর্থিত। XML আরও কঠোর, লিগেসি সিস্টেমে ব্যবহৃত হয়। Protobuf (Protocol Buffers) Google-এর বাইনারি ফর্ম্যাট: JSON-এর চেয়ে 3-10 গুণ বেশি কমপ্যাক্ট, দ্রুত পার্সিং, কঠোর স্কিমা। উচ্চ-লোড সিস্টেম এবং মাইক্রোসার্ভিসের জন্য ব্যবহৃত হয়।
JSONSerialization JSON নিয়ে কাজ করার জন্য বিল্ট-ইন API। Codable (Encodable/Decodable) JSON, Property List এবং অন্যান্য ফর্ম্যাটে স্বয়ংক্রিয় সিরিয়ালাইজেশনের জন্য আধুনিক 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)
Flutter এবং React Native-এর জন্য নিজস্ব কার্যকরী স্টোরেজ লাইব্রেরি রয়েছে।
Hive Flutter-এর জন্য একটি হালকা, দ্রুত কী-ভ্যালু স্টোরেজ। এর নেটিভ কোডের প্রয়োজন নেই (বিশুদ্ধ Dart), TypeAdapter-এর মাধ্যমে টাইপিং সমর্থন করে এবং isolates-এ কাজ করে। ক্যাশ, সেটিংস এবং ছোট ডেটার জন্য আদর্শ।
ObjectBox Flutter, Android এবং iOS-এর জন্য একটি উচ্চ-কর্মক্ষমতা সম্পন্ন এমবেডেড ডেটাবেস। এটি SQLite-এর চেয়ে 10+ গুণ দ্রুত, ন্যূনতম ওভারহেডের জন্য ফ্ল্যাট ফাইল স্ট্রাকচার ব্যবহার করে। সম্পর্ক, কোয়েরি এবং রিয়েক্টিভ সাবস্ক্রিপশন (ObjectBox Dart) সমর্থন করে।
Drift Flutter এবং Dart-এর জন্য একটি রিয়েক্টিভ SQLite লাইব্রেরি। এটি টাইপ-নিরাপদ কোয়েরি, মাইগ্রেশন, DAO ফাংশন এবং Stream সাপোর্ট (রিয়েক্টিভ আপডেট) প্রদান করে। Drift হল Flutter প্রোজেক্টের জন্য প্রাথমিক পছন্দ যেখানে SQLite প্রয়োজন।
সচরাচর জিজ্ঞাসিত প্রশ্ন
পছন্দ প্ল্যাটফর্মের উপর নির্ভর করে: Room (Android) কম্পাইল-টাইম কোয়েরি পরীক্ষা সহ SQLite-ভিত্তিক অফিসিয়াল লাইব্রেরি। Core Data (iOS) অবজেক্ট গ্রাফ সহ Apple-এর ফ্রেমওয়ার্ক। ক্রস-প্ল্যাটফর্ম প্রোজেক্টের জন্য Realm বা ORM-এর মাধ্যমে SQLite উপযুক্ত।
SharedPreferences সিঙ্ক্রোনাস অ্যাক্সেস এবং ANR ঝুঁকি সহ পুরানো বাস্তবায়ন। DataStore (Jetpack) Kotlin Coroutines এবং Flow-ভিত্তিক আধুনিক প্রতিস্থাপন, যা অ্যাসিঙ্ক্রোনিসিটি, টাইপিং এবং ত্রুটি সুরক্ষা সমর্থন করে।
Android: EncryptedSharedPreferences বা Android Keystore। iOS: WhenUnlockedThisDeviceOnly অ্যাক্সেসিবিলিটি সহ Keychain Services। গুরুত্বপূর্ণ ডেটার জন্য, বায়োমেট্রিক্স সহ Secure Enclave (iOS) এবং হার্ডওয়্যার Keystore (Android) ব্যবহার করুন।
Cloud Firestore রিয়েল-টাইম সিঙ্ক্রোনাইজেশন, অফলাইন মোড এবং স্বয়ংক্রিয় স্কেলিং সহ Firebase-এর একটি NoSQL ডেটাবেস। এটি চ্যাট, নিউজ ফিড এবং এমন প্রোজেক্টের জন্য উপযুক্ত যেখানে ডিভাইসের মধ্যে সিঙ্ক্রোনাইজেশন প্রয়োজন।
Flutter: Hive (দ্রুত কী-ভ্যালু), Floor (SQLite ORM), Drift (Moor, রিয়েক্টিভ SQLite), ObjectBox (উচ্চ-কর্মক্ষমতা এমবেডেড DB)। React Native: Realm, WatermelonDB (লেজি লোডিং) এবং AsyncStorage (SharedPreferences-এর অনুরূপ)।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।