Məlumat saxlama mobil tətbiqin əsas vəzifələrindən biridir, performansa, təhlükəsizliyə və istifadəçi təcrübəsinə təsir göstərir. Bu məqalədə SQLite, Room, Core Data, Realm, Firebase Firestore, SharedPreferences, DataStore, Keystore və Keychain, həmçinin serializasiya formatları (JSON, Protobuf) və kitabxanaları (Gson, Moshi, kotlinx.serialization) əhatə edəcəyik. Bu bələdçi təcrübəsiz tərtibatçılara düzgün məlumat saxlama həllini seçməyə kömək edəcək. Ətraflı məlumat üçün rəsmi Android məlumat saxlama bələdçisinə baxın.
Əsas məqamlar
Varlıqlar arasında əlaqələri olan strukturlaşdırılmış məlumatları saxlamaq üçün relyasiyalı verilənlər bazaları istifadə olunur.
SQLite istənilən mobil platformada işləyən yerləşdirilmiş relyasiyalı verilənlər bazasıdır. Ayrıca server tələb etmir, məlumatlar bir faylda saxlanılır. SQLite Room (Android) və istəyə bağlı olaraq Core Data (iOS) üçün əsasdır. Kitabxanalar: android.database.sqlite (Android), FMDB/Core Data (iOS), sqflite (Flutter).
Room SQLite ilə işləmək üçün rəsmi Android Architecture Components kitabxanasıdır. ORM qatını təmin edir: Entity (cədvəl), DAO (sorğular), Database (giriş nöqtəsi). Room SQL sorğularını kompilyasiya vaxtında yoxlayır, korutinləri və Flow-u dəstəkləyir və sxemi avtomatik miqrasiya edir.
@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 obyekt qrafını idarə etmək üçün Apple freymvorkudur. Təmiz verilənlər bazası deyil — SQLite, XML və ya ikili anbar üzərində davamlılıq qatıdır. Core Data obyektləri (NSManagedObject), əlaqələri, sxem versiyalaşdırmasını, geri qaytarma/təkrar etmə və NSManagedObjectContext vasitəsilə çoxiplikliyi idarə edir.
Realm SQLite-a alternativ olaraq yüksək performanslı mobil verilənlər bazası kimi hazırlanmışdır. Realm oxuma və yazmada SQLite-dan daha sürətlidir, reaktiv bildirişləri (Live Objects), anında şifrələmə və platformalararası (Android, iOS, Flutter, React Native) dəstəkləyir. Çatışmazlıqlar: artan APK/IPA ölçüsü və daha çox yaddaş istifadəsi.
Kiçik həcmli məlumatları (parametrlər, tokenlər, keş) saxlamaq üçün sadə açar-dəyər anbarları istifadə olunur.
SharedPreferences Android-də köhnə açar-dəyər anbarıdır. Çatışmazlıqlar: sinxron giriş (oxuyarkən UI-ı bloklayır), tipləşdirmənin olmaması, böyük fayl yükləyərkən ANR riski. Yeni layihələr üçün TÖVSİYƏ EDİLMİR.
DataStore Google-dan SharedPreferences-ə müasir alternativdir. Kotlin Coroutines və Flow vasitəsilə asinxron işləyir, Preferences DataStore (açar-dəyər) və Proto DataStore (Protobuf vasitəsilə tipləşdirilmiş məlumat) dəstəkləyir. DataStore UI thread üçün təhlükəsizdir və əməliyyatları dəstəkləyir.
UserDefaults iOS-da kiçik parametrlər üçün standart anbardır. İbtidai tipləri, sətirləri, tarixləri, Data-nı dəstəkləyir. UserDefaults sinxrondur, buna görə böyük məlumat həcmləri üçün uyğun deyil. register(defaults:) vasitəsilə dəyərlərin qeydiyyatı default dəyərləri təyin edir.
Cihazlar arasında sinxronizasiya tələb edən tətbiqlərdə məlumat saxlamaq üçün Firebase bulud verilənlər bazaları istifadə olunur.
Firebase Firestore real vaxt abunəlikləri, avtomatik miqyaslama, güclü sorğular və quraşdırılmış oflayn rejimi olan NoSQL sənəd verilənlər bazasıdır. Məlumatlar kolleksiyalar və sənədlər (JSON bənzər strukturlar) şəklində təşkil olunur. Firestore əməliyyatları və toplu əməliyyatları dəstəkləyir. Söhbətlər, lentlər və sosial tətbiqlər üçün idealdır.
Firebase Realtime Database məlumatları tək JSON ağacı kimi saxlayan köhnə Firebase NoSQL verilənlər bazasıdır. Firestore-dan daha sadə, lakin sorğularda və miqyaslamada daha az çevikdir. Sadə real vaxt tətbiqləri (onlayn status, sadə söhbətlər) üçün tövsiyə olunur.
| Xüsusiyyət | Cloud Firestore | Firebase Realtime DB |
|---|---|---|
| Məlumat modeli | Kolleksiyalar → Sənədlər | JSON ağacı |
| Sorğular | Mürəkkəb (filtrləmə, sıralama, limitlər) | Sadə (açar üzrə) |
| Miqyaslama | Avtomatik | Əl ilə şardinq |
| Oflayn rejim | Bəli (davamlı keş) | Bəli |
| Qiymət | Oxuma/yazma əməliyyatı üzrə | Trafik + saxlama üzrə |
Tokenlərin, şifrələrin və şifrələmə açarlarının saxlanması xüsusi qorunan anbarlar tələb edir.
Android Keystore kriptoqrafik açarlar üçün sistem anbarıdır. Açarlar aparat mühitində (TEE — Trusted Execution Environment) saxlanılır, tətbiqlər və OS üçün əlçatmazdır. Açar yaradılması, şifrələmə və imzalama dəstəkləyir. Android 9+ StrongBox Keymaster (xüsusi çip) daxildir.
Keychain Services şifrələr, açarlar və sertifikatlar üçün təhlükəsiz iOS anbarıdır. Məlumatlar aparat Secure Enclave istifadə edərək şifrələnir. Keychain əlçatanlıq səviyyələrini dəstəkləyir: Always, WhenUnlocked, WhenUnlockedThisDeviceOnly, AfterFirstUnlock.
EncryptedSharedPreferences AES256-GCM və HKDF vasitəsilə açar və dəyər şifrələməsi ilə SharedPreferences üzərində sarğıdır. AndroidX Security kitabxanasında tətbiq edilmişdir. Tokenlərin və həssas parametrlərin saxlanması üçün tövsiyə olunur.
IT Sectr-də biz yeniləmə tokenləri və biometrik açarları saxlamaq üçün Android Keystore + EncryptedSharedPreferences istifadə edirik. iOS-da maksimum təhlükəsizlik üçün kSecAttrAccessibleWhenUnlockedThisDeviceOnly səviyyəsi ilə Keychain istifadə edirik.
Fayl saxlama (şəkillər, videolar, sənədlər) üçün mobil platformalar bir neçə anbar növü təmin edir.
Android Internal Storage (/data/data/paket/ — şəxsi anbar) və External Storage (SD kart və ya emulyasiya edilmiş bölmə) arasında fərqləndirir. Cache Directory sistemin təmizləyə biləcəyi müvəqqəti anbardır. Scoped Storage (Android 10+) External Storage-a girişi məhdudlaşdırır — tətbiqlər yalnız öz fayllarını və ya MediaStore/SAF vasitəsilə faylları görür.
iOS Documents Directory (iCloud ehtiyatı, davamlı məlumatlar), Library/Caches (müvəqqəti fayllar, ehtiyatı alınmır) və Tmp Directory (müvəqqəti, təmizlənə bilər) təmin edir. Fayl sistemi ilə işləmək üçün NSFileManager istifadə edin. iOS 11+ bulud faylları üçün File Provider dəstəkləyir.
Serializasiya obyektləri ötürmə və ya saxlama üçün formata çevirir. Deserializasiya tərs prosesdir.
JSON (JavaScript Object Notation) ən populyar formatdır: oxunaqlı, çevik, bütün platformalar tərəfindən dəstəklənir. XML daha sərtdir, köhnə sistemlərdə istifadə olunur. Protobuf (Protocol Buffers) Google-dan ikili formatdır: JSON-dan 3-10 dəfə daha yığcam, daha sürətli təhlil, sərt sxem. Yüksək yüklü sistemlər və mikroservislər üçün istifadə olunur.
JSONSerialization JSON ilə işləmək üçün quraşdırılmış API-dir. Codable (Encodable/Decodable) JSON, Property List və digər formatlara avtomatik serializasiya üçün müasir Swift protokoludur.
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 və React Native üçün öz səmərəli saxlama kitabxanaları mövcuddur.
Hive Flutter üçün yüngül, sürətli açar-dəyər anbarıdır. Yerli kod tələb etmir (təmiz Dart), TypeAdapter vasitəsilə tipləşdirməni dəstəkləyir və izolyatlarda işləyir. Keş, parametrlər və kiçik məlumat həcmləri üçün idealdır.
ObjectBox Flutter, Android və iOS üçün yüksək performanslı yerləşdirilmiş verilənlər bazasıdır. SQLite-dan 10+ dəfə sürətlidir, minimum əlavə yük üçün düz fayl strukturundan istifadə edir. Əlaqələri, sorğuları və reaktiv abunəlikləri (ObjectBox Dart) dəstəkləyir.
Drift Flutter və Dart üçün reaktiv SQLite kitabxanasıdır. Tip təhlükəsiz sorğular, miqrasiyalar, DAO funksiyaları və Stream dəstəyi (reaktiv yeniləmələr) təmin edir. Drift SQLite tələb edən Flutter layihələri üçün əsas seçimdir.
Tez-tez verilən suallar
Seçim platformadan asılıdır: Room (Android) kompilyasiya vaxtı sorğu yoxlaması ilə SQLite əsaslı rəsmi kitabxanadır. Core Data (iOS) obyekt qrafı ilə Apple freymvorkudur. Platformalararası layihələr üçün Realm və ya ORM vasitəsilə SQLite uyğundur.
SharedPreferences sinxron giriş və ANR riski olan köhnə tətbiqdir. DataStore (Jetpack) Kotlin Coroutines və Flow əsaslı müasir alternativdir, asinxronluq, tipləşdirmə və səhv qorunmasını dəstəkləyir.
Android: EncryptedSharedPreferences və ya Android Keystore. iOS: WhenUnlockedThisDeviceOnly əlçatanlığı ilə Keychain Services. Kritik məlumatlar üçün biometriya ilə Secure Enclave (iOS) və aparat Keystore (Android) istifadə edin.
Cloud Firestore real vaxt sinxronizasiyası, oflayn rejim və avtomatik miqyaslama ilə Firebase NoSQL verilənlər bazasıdır. Söhbətlər, xəbər lentləri və cihazlar arasında sinxronizasiya tələb edən layihələr üçün uyğundur.
Flutter: Hive (sürətli açar-dəyər), Floor (SQLite ORM), Drift (Moor, reaktiv SQLite), ObjectBox (yüksək performanslı yerləşdirilmiş DB). React Native: Realm, WatermelonDB (tənbəl yükləmə) və AsyncStorage (SharedPreferences analoqu).
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.