ڈیٹا اسٹوریج موبائل ایپلی کیشن کے اہم کاموں میں سے ایک ہے، جو کارکردگی، سیکیورٹی اور صارف کے تجربے کو متاثر کرتا ہے۔ اس مضمون میں ہم 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔