মোবাইল ডেভেলপমেন্টে ডেটা স্থায়িতা — এটি কী, পদ্ধতি ও কিভাবে কাজ করে

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

ডেটা পার্সিস্টেন্স মোবাইল অ্যাপ্লিকেশনের সেশনগুলির মধ্যে ব্যবহারকারীর তথ্য সংরক্ষণ নিশ্চিত করে। এই প্রযুক্তি ছাড়া, প্রতিটি লঞ্চ শুন্য থেকে শুরু হবে — সেটিংস, ইতিহাস এবং ডাউনলোড করা ফাইলগুলি বন্ধ হলে হারিয়ে যাবে। Google Developers, 2024 অনুযায়ী, 90% এর বেশি মোবাইল অ্যাপ্লিকেশন ব্যবহারকারীর ডেটা এবং ইন্টারফেস অবস্থা সংরক্ষণের জন্য অন্তত একটি পার্সিস্টেন্স প্রক্রিয়া ব্যবহার করে।

মূখ্য বিষয়সমূহ

  • Data Persistence — অ্যাপ্লিকেশন সেশনের মধ্যে ডেটা সংরক্ষণের প্রক্রিয়া
  • SharedPreferences — Android এ সহজ কী-ভ্যালু যুগল সংরক্ষণ
  • SQLite — মোবাইল ডিভাইসের জন্য এম্বেডেড রিলেশনাল ডেটাবেস
  • Room — Android এর জন্য Google এর SQLite এর উপর ORM আবরণ
  • Core Data — iOS এবং macOS এ অবজেক্ট ম্যানেজমেন্ট ফ্রেমওয়ার্ক

ডেটা স্থায়িতা কী

Data Persistence হল ডিভাইসের অস্থায়ী মেমরিতে ডেটা সংরক্ষণের একটি অ্যাপ্লিকেশনের ক্ষমতা। মোবাইল ডেভেলপমেন্টে, পার্সিস্টেন্স ডেটাবেস, ফাইল সিস্টম, সেটিংস এবং ক্যাচ অন্তর্ভুক্ত করে। প্রতিটি প্রক্রিয়ার কার্যদক্ষতা, নিরাপত্তা এবং সংরক্ষণ ক্ষমতার দিক থেকে নিজস্ব বৈশিষ্ট্য রয়েছে।

অস্থায়ী এবং স্থায়ী ডেটা

অস্থায়ী ডেটা শুধুমাত্র RAM এ বিদ্যমান থাকে এবং প্রক্রিয়া শেষ হলে হারিয়ে যায়। এর মধ্যে রয়েছে স্ক্রিন অবস্থা, অস্থায়ী গণনা এবং ইমেজ ক্যাচ। স্থায়ী ডেটা ফাইল সিস্টম বা ডেটাবেসে লেখা হয় এবং অ্যাপ্লিকেশন পুনরারম্ভের পরেও উপলব্ধ থাকে। এর মধ্যে রয়েছে ব্যবহারকারী সেটিংস, প্রাথমিকতা টোকন, কার্যকলাপের ইতিহাস এবং ডাউনলোড করা কন্টেন্ট।

সংরক্ষণ প্রক্রিয়া বাছার মানদণ্ড

সংরক্ষণ পদ্ধতি বাছার সময়, ডেভেলপাররা বেশ কিছু ফাক্টর মূল্যায়ন করেন। ডেটা ধরন সংরক্ষণ গঠন নির্ধারণ করে: সহজ সেটিংস — SharedPreferences বা DataStore, গঠনবদ্ধ রিকর্ড — SQLite বা Room, ফাইল — File Storage। ডেটা পরিমাণ কার্যদক্ষতাকে প্রভাবিত করে: ডেটাবেস হাজার রিকর্ডের জন্য অপ্টিমাইজড, যখন ফাইল বড় বাইনারি অবজেক্টের জন্য উপযুক্ত। নিরাপত্তার জন্য EncryptedSharedPreferences বা SQLCipher এর মাধ্যমে সংবেদনশীল তথ্য এনক্রিপ্ট করা প্রয়োজন।

kotlin
data class StorageOption(
    name: String,
    dataType: StorageType,
    capacity: Long,
    secure: Boolean
)

enum class StorageType {
    KEY_VALUE,
    RELATIONAL,
    FILE
}

SharedPreferences এবং DataStore

SharedPreferences হল Android এ কী-ভ্যালু যুগল সংরক্ষণের ক্লাসিক উপায়। এই API প্লেটফর্মের প্রাথমিক সংস্করণ থেকে উপলব্ধ এবং প্রাইমিটিভ ধরনগুলিকে সমর্থন করে: স্ট্রিং, সংখ্যা এবং বুলিয়ান মান। ডেটা অ্যাপ্লিকেশনের প্রাইভেট ডিরেক্টরিতে XML ফাইলে সংরক্ষিত হয় এবং শুধুমাত্র এর প্রক্রিয়ার জন্য উপলব্ধ।

বিকল্প হিসেবে DataStore

Jetpack DataStore হল Kotlin Coroutines এবং Flow এর উপর নির্মিত SharedPreferences এর একটি আধুনিক বিকল্প। DataStore দুটি বিকল্প অফার করে: সহজ মানের জন্য Preferences DataStore এবং টাইপকৃত অবজেক্টের জন্য Proto DataStore। SharedPreferences এর বিপরীতে, DataStore সমসাময়িক প্রবেশাধিকারে ডেটা সংগতিতা নিশ্চিত করে এবং মূল থ্রেড অবরুদ্ধ না করে অসিংক্রনাস কাজ সমর্থন করে।

kotlin
// SharedPreferences — প্রথাগত পদ্ধতি
val prefs = context
    .getSharedPreferences("settings", Context.MODE_PRIVATE)
with (prefs.edit()) {
    putString("username", "john_doe")
    putInt("score", 1500)
    apply()
}

// DataStore — অসিংক্রনাস পদ্ধতি
val settingsDataStore = context
    .createDataStore("settings.pb")

val usernameFlow: Flow<String> = settingsDataStore
    .data
    .map { it[USERNAME_KEY] ?: "" }

iOS এ, SharedPreferences এর সমতুল্য হল UserDefaults — Property List ফরম্যাটে সহজ মান সংরক্ষণের একটি ব্যবস্থা। UserDefaults সিংক্রনাস প্রবেশ ব্যবহার করে এবং অল্প পরিমাণ কানফিগরেশন ডেটার জন্য উপযুক্ত, কিন্তু সংবেদনশীল তথ্য সংরক্ষণের জন্য সুপারিশ করা হয় না।

মোবাইল অ্যাপসে SQLite

SQLite হল একটি এম্বেডেড রিলেশনাল ডেটাবেস যা আলাদা সার্ভার ছাড়াই অ্যাপ্লিকেশন প্রক্রিয়ার মধ্যে চালে। এটি মোবাইল ডেভেলপমেন্টে সবচেয়ে ব্যাপক DBMS: এটি উভয় প্লেটফর্মে ডিফল্ট হিসেবে ব্যবহৃত হয়। Android SDK এ SQLite অন্তর্ভুক্ত করে, এবং iOS এটি libsqlite3 লাইব্রেরিতে অন্তর্ভুক্ত করে। SQLite স্ট্যান্ডার্ড SQL, লেনদেন, ইনডেক্স এবং ট্রিগার সমর্থন করে।

টেবিল তৈরি এবং CRUD কাজ

SQLite এর সাথে কাজ ডেটাবেস স্কিমা সংজ্ঞায়িত করা দিয়ে শুরু হয়। ডেভেলপার টেবিল, তাদের ফিল্ড এবং ধরন সংজ্ঞায়িত করে, তারপর ইনসার্ট, রিড, আপডেট এবং ডিলিট কাজ সম্পাদন করে। Android এ SQLiteOpenHelper ডেটাবেস তৈরি এবং মাইগ্রেশন পরিচালনা করে, যখন iOS C ইন্টারফেস বা FMDB র্যাপার ব্যবহার করে।

kotlin
// Android এ SQLiteOpenHelper
class DBHelper(context: Context) :
    SQLiteOpenHelper(context, "app.db", null, 1) {

    override fun onCreate(db: SQLiteDatabase) {
        db.execSQL("""
            CREATE TABLE users (
                id INTEGER PRIMARY KEY,
                name TEXT NOT NULL,
                email TEXT UNIQUE
            )
        """)
    }

    fun insertUser(name: String, email: String) {
        val db = writableDatabase
        val values = ContentValues().apply {
            put("name", name)
            put("email", email)
        }
        db.insert("users", null, values)
    }
}
ডেটা ধরনSharedPreferencesSQLiteফাইল সিস্টম
ধরনকী-ভ্যালুরিলেশনাল DBবাইনারি ফাইল
পরিমাণশতাধিক রিকর্ডহাজার রিকর্ডউপলব্ধ স্থান
কার্যদক্ষতাউচ্চমধ্যমআয়তনের উপর নির্ভর
সাধারণ ব্যবহারসেটিংসগঠনবদ্ধ ডেটাছবি, ভিডিও

Room — Android এর জন্য ORM

Room হল Jetpack এর একটি লাইব্রেরি যা SQLite এর উপর ORM স্তর প্রদান করে। Room SQL ক্যোরি এবং ContentValues লেখার পুনরাবৃত্তিমূলক কাজ দূর করে, সেগুলিকে অ্যানোটেশন এবং Kotlin ফাংশন দিয়ে প্রতিস্থাপন করে। Room কম্পাইলার বিল্ড টাইমে DAO (Data Access Object) বাস্তবায়ন জেনারেট করে, যা SQL সিনট্যাক্স ত্রুটিগুলি দূর করে।

প্রজেক্টে Room সেটআপ করা

Room সংযুক্ত করতে, আপনাকে kapt ডিপেন্ডেন্সি যোগ করতে হবে এবং এন্টিটি ক্লাস, DAO ইন্টারফেস এবং ডেটাবেস ক্লাস অ্যানোটেট করতে হবে। RoomDatabase প্রবেশ বিন্দু হিসেবে কাজ করে: এর মাধ্যমে DAO প্রাপ্ত করা হয় এবং ডেটাবেস কাজ সম্পাদন করা হয়। Room রিএক্টিভ ক্যোরির জন্য Flow, স্কিমা মাইগ্রেশন এবং কম্পাইল-টাইম ক্যোরি যাচাই সমর্থন করে।

kotlin
@Entity(tableName = "users")
data class User(
    @PrimaryKey val id: Int,
    @ColumnInfo(name = "full_name") val name: String,
    @ColumnInfo val email: String
)

@Dao
interface UserDao {
    @Query("SELECT * FROM users")
    fun getAll(): Flow<List<User>>

    @Insert
    suspend fun insert(user: User)

    @Delete
    suspend fun delete(user: User)
}

@Database(
    entities = [User::class],
    version = 1
)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}

Core Data — iOS ফ্রেমওয়ার্ক

Core Data হল অবজেক্ট গ্রাফ পরিচালনা এবং ডিস্কে সংরক্ষণের জন্য Apple ফ্রেমওয়ার্ক। Room এর বিপরীতে, Core Data টেবিল না বরং পরিচালিত অবজেক্ট (NSManagedObject) নিয়ে কাজ করে যা সম্পর্কের একটি সড়ি গঠন করে। Core Data অলস লোডিং, পরিবর্তন পূর্বকারী অবস্থায় ফিরে যাওয়া এবং NSFetchRequest এর মাধ্যমে জটিল ক্যোরি সমর্থন করে।

Core Data স্ট্যাক

Core Data এর মূল তিনটি উপাদান নিয়ে গঠিত: একটি পরিচালিত অবজেক্ট কন্টেক্সট (NSManagedObjectContext), একটি পার্সিস্টেন্ট স্টোর কোর্ডিনেটর (NSPersistentStoreCoordinator) এবং একটি ডেটা মডেল (NSManagedObjectModel)। NSPersistentContainer সব উপাদানকে একটি একক প্রবেশ বিন্দুতে সংযুক্ত করে, আধুনিক Swift অ্যাপ্লিকেশনের জন্য সেটআপ সহজ করে।

swift
import CoreData

class PersistenceController {
    static let shared = PersistenceController()
    let container: NSPersistentContainer

    init() {
        container = NSPersistentContainer(name: "AppModel")
        container.loadPersistentStores { _, error in
            if let error = error {
                fatalError("Failed: \(error)")
            }
        }
    }

    func saveUser(name: String, email: String) {
        let context = container.viewContext
        let user = User(context: context)
        user.name = name
        user.email = email

        do {
            try context.save()
        } catch let error {
            print("Save error: \(error)")
        }
    }
}

ফাইল স্টোরেজ (File Storage) ছবি, ভিডিও এবং ডকুমেন্ট সংরক্ষণের জন্য ব্যবহৃত হয়। Android অন্তরিক স্টোরেজ (context.filesDir) — অ্যাপ্লিকেশনের জন্য প্রাইভেট, এবং বাহ্যিক স্টোরেজ (Environment.getExternalStorageDirectory) — অন্য অ্যাপ্লিকেশনের জন্য উপলব্ধ প্রদান করে। iOS এ, ফাইলগুলি Documents এবং Library ডিরেক্টরিতে সংরক্ষিত হয়, যেখানে Library/Caches সেই ক্যাচের জন্য যা iCloud এ ব্যাকआপ হয় না। ফাইল কাজের জন্য, উভয় প্লেটফর্ম File API এবং স্ট্রিমিং রিড/রাইট কাজ প্রদান করে। Coil এবং SDWebImage এর মতো আধুনিক লাইব্রেরিগুলি সর্বোত্তম কার্যদক্ষতার জন্য ফাইল স্টোরেজকে RAM এর সাথে সংযুক্ত করে একটি ক্যাচিং স্তর যোগ করে।

Android এ, জটিলতা এবং কার্যকারিতায় Core Data এর বিকল্প হল Realm, একটি অবজেক্ট ডেটাবেস যা SQL স্তর ছাড়াই সরাসরি মডেল নিয়ে কাজ করে। Realm পড়ার কাজে SQLite এর চেয়ে দ্রুত এবং লাইভ অবজেক্ট সমর্থন করে যা ডেটা পরিবর্তনের সময় স্বচালিতভাবে UI আপডেট করে।

সাধারণ প্রশ্নাবলী

মোবাইল ডেভেলপমেন্টে Data Persistence কী?

Data Persistence ডিভাইসের অস্থায়ী মেমরিতে ডেটা সংরক্ষণের প্রক্রিয়াকে বোঝায়, যা অ্যাপ্লিকেশন পুনরারম্ভের পরেও তাদের প্রাপ্যতা নিশ্চিত করে। এর মধ্যে রয়েছে ডেটাবেস, ফাইল স্টোরেজ এবং সেটিংস ব্যবস্থা।

Room সরাসরি SQLite ব্যবহার করা থেকে কীভাবে আলাদা?

Room হল SQLite এর উপর একটি ORM আবরণ যা ম্যানুয়াল SQL ক্যোরি লেখা এবং ContentValues দূর করে। Room কম্পাইল টাইমে SQL ক্যোরি যাচাই করে, Kotlin Coroutines এবং Flow সমর্থন করে, এবং স্বচালিতভাবে ডেটা অ্যাক্সেস কোড জেনারেট করে।

কত দিলে আমার SharedPreferences ব্যবহার করা উচিত?

SharedPreferences অল্প পরিমাণের সহজ ডেটা সংরক্ষণের জন্য উপযুক্ত: অ্যাপ্লিকেশন সেটিংস, ফ্ল্যাগ, আইডেন্টিফায়ার এবং ব্যবহারকারী পছন্দ। জটিল বা গঠনবদ্ধ ডেটার জন্য, Room বা DataStore ব্যবহার করা ভালো।

iOS এ Core Data কী?

Core Data হল অবজেক্ট গ্রাফ পরিচালনার Apple ফ্রেমওয়ার্ক। এটি পরিচালিত অবজেক্ট, পরিবর্তন ট্রেকিং, অলস লোডিং এবং একটি স্টোরে (SQLite, XML বা বাইনারি ফরম্যাট) এ স্বচালিত পার্সিস্টেন্স প্রদান করে।

একটি নতুন প্রজেক্টের জন্য কোন সংরক্ষণ পদ্ধতি বাছা উচিত?

পছন্দ ডেটার জটিলতার উপর নির্ভর করে: সেটিংসের জন্য — DataStore বা UserDefaults, গঠনবদ্ধ রিকর্ডের জন্য — Room (Android) বা Core Data (iOS), ফাইলের জন্য — File Storage। মানদণ্ডের মধ্যে রয়েছে ডেটা পরিমাণ, কার্যদক্ষতার প্রয়োজনীয়তা এবং এনক্রিপশনের প্রয়োজন। একটি অ্যাপ্লিকেশনে একাধিক প্রক্রিয়া সংযুক্ত করা একটি স্ট্যান্ডার্ড অভ্যাস, যা প্রতিটি পদ্ধতির শক্তি সর্বোত্তমভাবে ব্যবহার করতে দেয়।

সারাংশ

  • Data Persistence — যে কোনো মোবাইল অ্যাপ্লিকেশনের ভিত্তি, সেশনের মধ্যে ব্যবহারকারীর ডেটা সংরক্ষণ নিশ্চিত করে
  • SharedPreferences এবং UserDefaults — সিংক্রনাস প্রবেশের সাথে কী-ভ্যালু যুগল সংরক্ষণের সহজ ব্যবস্থা
  • SQLite — অতিরিক্ত ডিপেন্ডেন্সি ছাড়াই উভয় প্লেটফর্মে উপলব্ধ এম্বেডেড রিলেশনাল ডেটাবেস
  • Room — Google এর ORM সমাধান যা Flow এর মাধ্যমে টাইপ নিরাপত্তা এবং রিএক্টিভ ক্যোরি প্রদান করে
  • Core Data — স্বচালিত পরিবর্তন ট্রেকিং সহ জটিল অবজেক্ট গ্রাফ পরিচালনার Apple ফ্রেমওয়ার্ক
  • DataStore — Coroutines এবং Flow এর উপর ভিত্তিক অসিংক্রনাস API সহ SharedPreferences এর একটি আধুনিক বিকল্প

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

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

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

আরও পড়ুন