تخزين البيانات في تطوير التطبيقات المحمولة: ما هو، الطرق وكيف يعمل

المؤلف: 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 مع مزامنة في الوقت الفعلي ووضع عدم الاتصال
  • التسلسل — تحويل الكائنات إلى JSON/Protobuf باستخدام Gson وMoshi وkotlinx.serialization

قواعد البيانات المحلية: 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 هي المكتبة الرسمية لمكونات Android Architecture Components للعمل مع SQLite. توفر طبقة ORM: Entity (جدول)، DAO (استعلامات)، Database (نقطة دخول). يتحقق Room من استعلامات SQL في وقت الترجمة، ويدعم coroutines و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. السلبيات: وصول متزامن (يُعطل واجهة المستخدم عند القراءة)، وعدم وجود كتابة، وخطر ANR عند تحميل ملف كبير. غير موصى به للمشاريع الجديدة.

DataStore (Jetpack Android)

DataStore هو البديل الحديث لـ SharedPreferences من Google. يعمل بشكل غير متزامن عبر Kotlin Coroutines وFlow، ويدعم Preferences DataStore (مفتاح-قيمة) وProto DataStore (بيانات بنمط محدد عبر Protobuf). DataStore آمن لخيط واجهة المستخدم ويدعم المعاملات.

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 هي قاعدة بيانات NoSQL أقدم من Firebase تخزن البيانات كشجرة JSON واحدة. أبسط من Firestore ولكنها أقل مرونة في الاستعلامات والتوسع. موصى بها للتطبيقات البسيطة في الوقت الفعلي (الحالة عبر الإنترنت والدردشات البسيطة).

الميزة Cloud Firestore Firebase Realtime DB
نموذج البياناتمجموعات → مستنداتشجرة JSON
الاستعلاماتمعقدة (تصفية وترتيب وحدود)بسيطة (حسب المفتاح)
التوسعتلقائيتقسيم يدوي
وضع عدم الاتصالنعم (ذاكرة تخزين مؤقت مستمرة)نعم
السعرحسب عمليات القراءة/الكتابةحسب حركة المرور + التخزين

التخزين الآمن: Keystore وKeychain وEncryptedSharedPreferences

يتطلب تخزين الرموز وكلمات المرور ومفاتيح التشفير مخازن محمية خاصة.

Android Keystore

Android Keystore هو مخزن نظام للمفاتيح التشفيرية. يتم تخزين المفاتيح في بيئة أجهزة (TEE — Trusted Execution Environment) غير قابلة للوصول للتطبيقات ونظام التشغيل. يدعم إنشاء المفاتيح والتشفير والتوقيع. مع Android 9+ يتضمن StrongBox Keymaster (شريحة مخصصة).

iOS Keychain

Keychain Services هو مخزن آمن في iOS لكلمات المرور والمفاتيح والشهادات. يتم تشفير البيانات باستخدام Secure Enclave للأجهزة. يدعم Keychain مستويات الوصول: Always وWhenUnlocked وWhenUnlockedThisDeviceOnly وAfterFirstUnlock.

EncryptedSharedPreferences (Android)

EncryptedSharedPreferences هو غلاف حول SharedPreferences مع تشفير المفاتيح والقيم باستخدام AES256-GCM وHKDF. تم تنفيذه في مكتبة AndroidX Security. موصى به لتخزين الرموز والإعدادات الحساسة.

في IT Sectr نستخدم Android Keystore + EncryptedSharedPreferences لتخزين رموز التحديث والمفاتيح البيومترية. على iOS نستخدم Keychain بمستوى kSecAttrAccessibleWhenUnlockedThisDeviceOnly لأقصى درجات الأمان.

تخزين الملفات: Internal وExternal وCache Directory

لتخزين الملفات (الصور والفيديو والمستندات)، توفر المنصات المحمولة عدة أنواع من التخزين.

Android Storage

يميز Android بين Internal Storage (/data/data/package/ — تخزين خاص) و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 — تسلسل Kotlin الأصلي من JetBrains، يعمل في وقت الترجمة، ويدعم JSON وProtobuf وCBOR

مكتبات iOS

JSONSerialization هي API مضمنة للعمل مع JSON. Codable (Encodable/Decodable) هو بروتوكول Swift حديث للتسلسل التلقائي إلى 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)

الحلول عبر المنصات: 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 هي مكتبة SQLite تفاعلية لـ Flutter وDart. توفر استعلامات آمنة من حيث النوع وهجرات ووظائف DAO ودعم Stream (تحديثات تفاعلية). Drift هو الخيار الأساسي لمشاريع Flutter التي تتطلب SQLite.

الأسئلة الشائعة

ما هو الأفضل للتخزين المحلي للبيانات: Room أم Core Data؟

الاختيار يعتمد على المنصة: Room (Android) هي المكتبة الرسمية القائمة على SQLite مع التحقق من الاستعلامات في وقت الترجمة. Core Data (iOS) هو إطار عمل Apple مع رسم بياني للكائنات. للمشاريع عبر المنصات، فإن Realm أو SQLite عبر ORM مناسب.

ما الفرق بين SharedPreferences وDataStore؟

SharedPreferences هو تطبيق قديم مع وصول متزامن وخطر ANR. DataStore (Jetpack) هو بديل حديث يعتمد على Kotlin Coroutines وFlow، ويدعم عدم التزامن والكتابة والحماية من الأخطاء.

كيف نخزن الرموز وكلمات المرور بشكل آمن في تطبيق محمول؟

Android: EncryptedSharedPreferences أو Android Keystore. iOS: Keychain Services بمستوى وصول WhenUnlockedThisDeviceOnly. للبيانات الحرجة، استخدم Secure Enclave (iOS) وKeystore الأجهزة (Android) مع القياسات الحيوية.

ما هو Firebase Firestore ومتى يجب استخدامه؟

Cloud Firestore هي قاعدة بيانات NoSQL من Firebase مع مزامنة في الوقت الفعلي ووضع عدم الاتصال وتوسع تلقائي. مناسبة للدردشات وخلاصات الأخبار والمشاريع التي تحتاج إلى مزامنة بين الأجهزة.

ما هي ORM الموجودة لـ Flutter وReact Native؟

Flutter: Hive (مفتاح-قيمة سريع)، Floor (ORM SQLite)، Drift (Moor، SQLite تفاعلي)، ObjectBox (قاعدة بيانات مضمنة عالية الأداء). 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 تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع