Ma'lumotlarni saqlash mobil ilovaning asosiy vazifalaridan biri bo'lib, ishlash, xavfsizlik va foydalanuvchi tajribasiga ta'sir qiladi. Ushbu maqolada SQLite, Room, Core Data, Realm, Firebase Firestore, SharedPreferences, DataStore, Keystore va Keychain, shuningdek, serializatsiya formatlari (JSON, Protobuf) va kutubxonalar (Gson, Moshi, kotlinx.serialization) ni ko'rib chiqamiz. Ushbu qo'llanma boshlang'ich dasturchilarga to'g'ri ma'lumotlarni saqlash yechimini tanlashda yordam beradi. Batafsil ma'lumot uchun Android ma'lumotlarni saqlash bo'yicha rasmiy qo'llanma ga qarang.
Asosiy fikrlar
Entitylar o'rtasida munosabatlar bilan tuzilgan ma'lumotlarni saqlash uchun relyatsion ma'lumotlar bazalari ishlatiladi.
SQLite har qanday mobil platformada ishlaydigan o'rnatilgan relyatsion ma'lumotlar bazasi. Alohida server talab qilmaydi, ma'lumotlar bitta faylda saqlanadi. SQLite Room (Android) va ixtiyoriy ravishda Core Data (iOS) uchun asosdir. Kutubxonalar: android.database.sqlite (Android), FMDB/Core Data (iOS), sqflite (Flutter).
Room SQLite bilan ishlash uchun rasmiy Android Architecture Components kutubxonasi. ORM qatlamini taqdim etadi: Entity (jadval), DAO (so'rovlar), Database (kirish nuqtasi). Room SQL so'rovlarini kompilyatsiya vaqtida tekshiradi, korutinlar va Flow-ni qo'llab-quvvatlaydi va sxemani avtomatik migratsiya qiladi.
@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 grafigini boshqarish uchun Apple freymvorki. Sof ma'lumotlar bazasi emas — bu SQLite, XML yoki ikkilik saqlash ustidagi persistensiya qatlami. Core Data obyektlarni (NSManagedObject), munosabatlarni, sxema versiyalashni, bekor qilish/takrorlashni va NSManagedObjectContext orqali ko'p tarmoqlilikni boshqaradi.
Realm SQLite-ga alternativa bo'lib, yuqori unumdorlikka ega mobil ma'lumotlar bazasi sifatida ishlab chiqilgan. Realm o'qish va yozishda SQLite-dan tezroq, reaktiv bildirishnomalarni (Live Objects), on-the-fly shifrlashni va platformalararo (Android, iOS, Flutter, React Native) qo'llab-quvvatlaydi. Kamchiliklari: kattalashgan APK/IPA hajmi va ko'proq xotira sarfi.
Kichik hajmdagi ma'lumotlarni (sozlamalar, tokenlar, kesh) saqlash uchun oddiy kalit-qiymat omborlari ishlatiladi.
SharedPreferences Android-da eski kalit-qiymat ombori. Kamchiliklari: sinxron kirish (o'qishda UI bloklanadi), tiplashtirishning yo'qligi, katta fayl yuklashda ANR xavfi. Yangi loyihalar uchun TAVSIYA ETILMAYDI.
DataStore Google-dan SharedPreferences-ga zamonaviy alternativa. Kotlin Coroutines va Flow orqali asinxron ishlaydi, Preferences DataStore (kalit-qiymat) va Proto DataStore (Protobuf orqali tiplangan ma'lumotlar) ni qo'llab-quvvatlaydi. DataStore UI thread uchun xavfsiz va tranzaksiyalarni qo'llab-quvvatlaydi.
UserDefaults iOS-da kichik sozlamalar uchun standart ombor. Primitiv turlarni, satrlarni, sanalarni, Data-ni qo'llab-quvvatlaydi. UserDefaults sinxron, shuning uchun katta ma'lumot hajmlari uchun mos emas. register(defaults:) orqali qiymatlarni ro'yxatdan o'tkazish default qiymatlarni belgilaydi.
Qurilmalar o'rtasida sinxronizatsiyani talab qiluvchi ilovalarda ma'lumotlarni saqlash uchun Firebase bulutli ma'lumotlar bazalari ishlatiladi.
Firebase Firestore real vaqt obunalari, avtomatik masshtablash, kuchli so'rovlar va o'rnatilgan oflayn rejimga ega NoSQL hujjat ma'lumotlar bazasi. Ma'lumotlar to'plamlar va hujjatlar (JSON-ga o'xshash tuzilmalar) shaklida tashkil etiladi. Firestore tranzaksiyalar va paketli operatsiyalarni qo'llab-quvvatlaydi. Chatlar, lentalar va ijtimoiy ilovalar uchun ideal.
Firebase Realtime Database ma'lumotlarni yagona JSON daraxti sifatida saqlaydigan eski Firebase NoSQL ma'lumotlar bazasi. Firestore-dan soddaroq, lekin so'rovlar va masshtablashda kamroq moslashuvchan. Oddiy real vaqt ilovalari (onlayn holat, oddiy chatlar) uchun tavsiya etiladi.
| Xususiyat | Cloud Firestore | Firebase Realtime DB |
|---|---|---|
| Ma'lumot modeli | To'plamlar → Hujjatlar | JSON daraxti |
| So'rovlar | Murakkab (filtrlash, saralash, chegaralar) | Oddiy (kalit bo'yicha) |
| Masshtablash | Avtomatik | Qo'lda sharding |
| Oflayn rejim | Ha (doimiy kesh) | Ha |
| Narx | O'qish/yozish operatsiyasi bo'yicha | Trafik + saqlash bo'yicha |
Tokenlar, parollar va shifrlash kalitlarini saqlash maxsus himoyalangan omborlarni talab qiladi.
Android Keystore kriptografik kalitlar uchun tizim ombori. Kalitlar apparat muhitida (TEE — Trusted Execution Environment) saqlanadi, ilovalar va OT uchun kirish mumkin emas. Kalit yaratish, shifrlash va imzolashni qo'llab-quvvatlaydi. Android 9+ StrongBox Keymaster (maxsus chip) ni o'z ichiga oladi.
Keychain Services parollar, kalitlar va sertifikatlar uchun xavfsiz iOS ombori. Ma'lumotlar apparat Secure Enclave yordamida shifrlanadi. Keychain kirish darajalarini qo'llab-quvvatlaydi: Always, WhenUnlocked, WhenUnlockedThisDeviceOnly, AfterFirstUnlock.
EncryptedSharedPreferences AES256-GCM va HKDF orqali kalit va qiymat shifrlashi bilan SharedPreferences ustidagi o'ram. AndroidX Security kutubxonasida amalga oshirilgan. Tokenlar va nozik sozlamalarni saqlash uchun tavsiya etiladi.
IT Sectr da biz yangilash tokenlari va biometrik kalitlarni saqlash uchun Android Keystore + EncryptedSharedPreferences dan foydalanamiz. iOS da maksimal xavfsizlik uchun kSecAttrAccessibleWhenUnlockedThisDeviceOnly darajasidagi Keychain dan foydalanamiz.
Fayl saqlash (rasmlar, videolar, hujjatlar) uchun mobil platformalar bir necha turdagi omborlarni taqdim etadi.
Android Internal Storage (/data/data/paket/ — shaxsiy ombor) va External Storage (SD karta yoki emulyatsiya qilingan bo'lim) o'rtasida farq qiladi. Cache Directory tizim tozalashi mumkin bo'lgan vaqtinchalik ombor. Scoped Storage (Android 10+) External Storage-ga kirishni cheklaydi — ilovalar faqat o'z fayllarini yoki MediaStore/SAF orqali fayllarni ko'radi.
iOS Documents Directory (iCloud zaxirasi, doimiy ma'lumotlar), Library/Caches (vaqtinchalik fayllar, zaxiralanmaydi) va Tmp Directory (vaqtinchalik, tozalanishi mumkin) ni taqdim etadi. Fayl tizimi bilan ishlash uchun NSFileManager dan foydalaning. iOS 11+ bulutli fayllar uchun File Provider ni qo'llab-quvvatlaydi.
Serializatsiya obyektlarni uzatish yoki saqlash uchun formatga aylantiradi. Deserializatsiya teskari jarayon.
JSON (JavaScript Object Notation) eng mashhur format: o'qiladigan, moslashuvchan, barcha platformalar tomonidan qo'llab-quvvatlanadi. XML qattiqroq, eski tizimlarda ishlatiladi. Protobuf (Protocol Buffers) Google-dan ikkilik format: JSON-dan 3-10 marta ixchamroq, tezroq tahlil qilinadi, qattiq sxemaga ega. Yuqori yuklangan tizimlar va mikroxizmatlar uchun ishlatiladi.
JSONSerialization JSON bilan ishlash uchun o'rnatilgan API. Codable (Encodable/Decodable) JSON, Property List va boshqa formatlarga avtomatik serializatsiya uchun zamonaviy Swift protokoli.
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 va React Native uchun o'zining samarali saqlash kutubxonalari mavjud.
Hive Flutter uchun yengil, tez kalit-qiymat ombori. Mahalliy kod talab qilmaydi (toza Dart), TypeAdapter orqali tiplashtirishni qo'llab-quvvatlaydi va izolyatlarda ishlaydi. Kesh, sozlamalar va kichik ma'lumot hajmlari uchun ideal.
ObjectBox Flutter, Android va iOS uchun yuqori unumdorlikka ega o'rnatilgan ma'lumotlar bazasi. SQLite-dan 10+ marta tezroq, minimal yuklama uchun tekis fayl tuzilmasidan foydalanadi. Munosabatlar, so'rovlar va reaktiv obunalarni (ObjectBox Dart) qo'llab-quvvatlaydi.
Drift Flutter va Dart uchun reaktiv SQLite kutubxonasi. Tur xavfsiz so'rovlar, migratsiyalar, DAO funksiyalari va Stream qo'llab-quvvatlash (reaktiv yangilanishlar) ni taqdim etadi. Drift SQLite talab qiladigan Flutter loyihalari uchun asosiy tanlovdir.
Tez-tez beriladigan savollar
Tanlov platformaga bog'liq: Room (Android) kompilyatsiya vaqtida so'rov tekshiruvi bilan SQLite asosidagi rasmiy kutubxona. Core Data (iOS) obyekt grafigi bilan Apple freymvorki. Platformalararo loyihalar uchun Realm yoki ORM orqali SQLite mos keladi.
SharedPreferences sinxron kirish va ANR xavfi bilan eski amalga oshirish. DataStore (Jetpack) Kotlin Coroutines va Flow asosidagi zamonaviy alternativa bo'lib, asinxronlik, tiplashtirish va xato himoyasini qo'llab-quvvatlaydi.
Android: EncryptedSharedPreferences yoki Android Keystore. iOS: WhenUnlockedThisDeviceOnly kirish darajasi bilan Keychain Services. Muhim ma'lumotlar uchun biometriya bilan Secure Enclave (iOS) va apparat Keystore (Android) dan foydalaning.
Cloud Firestore real vaqt sinxronizatsiyasi, oflayn rejimi va avtomatik masshtablashi bilan Firebase NoSQL ma'lumotlar bazasi. Chatlar, yangiliklar lentalari va qurilmalar o'rtasida sinxronizatsiya talab qiladigan loyihalar uchun mos.
Flutter: Hive (tez kalit-qiymat), Floor (SQLite ORM), Drift (Moor, reaktiv SQLite), ObjectBox (yuqori unumdorlikka ega o'rnatilgan MB). React Native: Realm, WatermelonDB (dangasa yuklash) va AsyncStorage (SharedPreferences ga o'xshash).
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.