ذخیره‌سازی داده در توسعه موبایل — چیست، روش‌ها و نحوه کار

نویسنده: IT Sectr منتشر شده: 2026-03-14 زمان مطالعه: 8 دقیقه

ذخیره‌سازی دائمی داده، حفظ اطلاعات کاربر بین جلسات کاری برنامه موبایل را تضمین می‌کند. بدون این فناوری، هر بار اجرای برنامه از صفر شروع می‌شد — تنظیمات، تاریخچه و فایل‌های بارگیری شده هنگام بسته شدن از بین می‌رفتند. طبق داده‌های Google Developers, 2024، بیش از 90٪ از برنامه‌های موبایل از حداقل یک مکانیزم ذخیره‌سازی دائمی برای حفظ داده‌های کاربر و وضعیت رابط استفاده می‌کنند.

نکات اصلی

  • Data Persistence — مکانیزم‌های ذخیره داده بین جلسات برنامه
  • SharedPreferences — ذخیره جفت‌های کلید-مقدار ساده در Android
  • SQLite — پایگاه داده رابطه‌ای داخلی برای دستگاه‌های موبایل
  • Room — لایه ORM روی SQLite از Google برای Android
  • 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 — جایگزین مدرن SharedPreferences، ساخته شده بر پایه Kotlin Coroutines و Flow. 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 SQLite را در SDK و iOS آن را در کتابخانه libsqlite3 قرار می‌دهد. SQLite از SQL استاندارد، تراکنش‌ها، ایندکس‌ها و تریگرها پشتیبانی می‌کند.

ایجاد جدول و عملیات CRUD

کار با SQLite با ایجاد طرح پایگاه داده آغاز می‌شود. توسعه‌دهنده جداول، فیلدها و انواع آنها را تعریف می‌کند، سپس عملیات درج، خواندن، به‌روزرسانی و حذف را انجام می‌دهد. SQLiteOpenHelper در Android ایجاد و مهاجرت پایگاه داده را مدیریت می‌کند و در iOS از رابط C یا wrapper FMDB استفاده می‌شود.

kotlin
// SQLiteOpenHelper در Android
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سیستم فایل
نوعکلید-مقدارپایگاه داده رابطه‌ایفایل‌های باینری
حجمصدها رکوردهزاران رکوردفضای موجود
عملکردبالامتوسطبستگی به اندازه دارد
کاربرد معمولتنظیماتداده‌های ساختاریافتهتصاویر، ویدئو

Room — ORM برای Android

Room — کتابخانه از مجموعه Jetpack که لایه ORM روی SQLite ارائه می‌دهد. 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("خطای ذخیره: \(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 است و از اشیاء زنده پشتیبانی می‌کند که رابط کاربری را هنگام تغییر داده به‌طور خودکار به‌روز می‌کنند.

سوالات متداول

Data Persistence در توسعه موبایل چیست؟

Data Persistence — مکانیزم‌های ذخیره داده در حافظه غیرفرار دستگاه است که دسترسی به آنها را پس از راه‌اندازی مجدد برنامه تضمین می‌کند. این شامل پایگاه‌های داده، ذخیره‌سازی فایل و سیستم‌های تنظیمات می‌شود.

تفاوت Room با استفاده مستقیم از SQLite چیست؟

Room یک لایه ORM روی SQLite است که نوشتن دستی کوئری‌های SQL و ContentValues را حذف می‌کند. Room کوئری‌های SQL را در مرحله کامپایل بررسی می‌کند، از Kotlin Coroutines و Flow پشتیبانی می‌کند و به طور خودکار کد دسترسی به داده را تولید می‌کند.

چه زمانی باید از SharedPreferences استفاده کرد؟

SharedPreferences برای ذخیره حجم کمی از داده‌های ساده مناسب است: تنظیمات برنامه، پرچم‌ها، شناسه‌ها و اولویت‌های کاربر. برای داده‌های پیچیده یا ساختاریافته بهتر است از Room یا DataStore استفاده کنید.

Core Data در iOS چیست؟

Core Data — چارچوب Apple برای مدیریت گراف اشیاء. این چارچوب کار با اشیاء مدیریت‌شده، ردیابی تغییرات، بارگذاری تنبل و ذخیره خودکار در حافظه دائمی (SQLite، XML یا فرمت باینری) را فراهم می‌کند.

برای یک پروژه جدید کدام روش ذخیره‌سازی داده را انتخاب کنیم؟

انتخاب به پیچیدگی داده بستگی دارد: برای تنظیمات — DataStore یا UserDefaults، برای رکوردهای ساختاریافته — Room (Android) یا Core Data (iOS)، برای فایل‌ها — File Storage. معیارها شامل حجم داده، نیازهای عملکرد و نیاز به رمزگذاری هستند. ترکیب چندین مکانیزم در یک برنامه یک روش استاندارد است که امکان استفاده بهینه از نقاط قوت هر رویکرد را فراهم می‌کند.

خلاصه

  • Data Persistence — اساس هر برنامه موبایل، تضمین‌کننده حفظ داده‌های کاربر بین جلسات
  • SharedPreferences و UserDefaults — سیستم‌های ساده برای ذخیره جفت‌های کلید-مقدار با دسترسی همزمان
  • SQLite — پایگاه داده رابطه‌ای داخلی، قابل دسترسی در هر دو پلتفرم بدون وابستگی‌های اضافی
  • Room — راه‌حل ORM از Google، تضمین‌کننده ایمنی نوع و کوئری‌های واکنشی از طریق Flow
  • Core Data — چارچوب قدرتمند Apple برای مدیریت گراف‌های پیچیده اشیاء با ردیابی خودکار تغییرات
  • DataStore — جایگزین مدرن SharedPreferences با API ناهمگام مبتنی بر Coroutines و Flow

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید