Mobil ishlab chiqishda ma'lumotlarni saqlash: bu nima, usullar va qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-03-08 O'qish vaqti: 9 daq

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

  • Room (Android) va Core Data (iOS) har bir platformada relyatsion ma'lumotlar bazalari bilan ishlash uchun rasmiy ORM
  • SharedPreferences (Android) DataStore bilan almashtirilmoqda — asinxron va tur xavfsiz kalit-qiymat ombori
  • Tokenlarni xavfsiz saqlash uchun apparat himoyasi bilan Keystore (Android) va Keychain (iOS) ishlatiladi
  • Firebase Firestore real vaqt sinxronizatsiyasi va oflayn rejimi bilan NoSQL ma'lumotlar bazasi
  • Serializatsiya — Gson, Moshi, kotlinx.serialization orqali obyektlarni JSON/Protobuf ga aylantirish

Lokal ma'lumotlar bazalari: SQLite, Room, Core Data, Realm

Entitylar o'rtasida munosabatlar bilan tuzilgan ma'lumotlarni saqlash uchun relyatsion ma'lumotlar bazalari ishlatiladi.

SQLite

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 (Android)

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.

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 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

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.

Kalit-qiymat ombori va sozlamalar

Kichik hajmdagi ma'lumotlarni (sozlamalar, tokenlar, kesh) saqlash uchun oddiy kalit-qiymat omborlari ishlatiladi.

SharedPreferences (Android)

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 (Jetpack Android)

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.

NSUserDefaults (iOS)

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.

Bulutli ma'lumotlar bazalari: Firebase Firestore va Realtime DB

Qurilmalar o'rtasida sinxronizatsiyani talab qiluvchi ilovalarda ma'lumotlarni saqlash uchun Firebase bulutli ma'lumotlar bazalari ishlatiladi.

Cloud Firestore

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

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.

XususiyatCloud FirestoreFirebase Realtime DB
Ma'lumot modeliTo'plamlar → HujjatlarJSON daraxti
So'rovlarMurakkab (filtrlash, saralash, chegaralar)Oddiy (kalit bo'yicha)
MasshtablashAvtomatikQo'lda sharding
Oflayn rejimHa (doimiy kesh)Ha
NarxO'qish/yozish operatsiyasi bo'yichaTrafik + saqlash bo'yicha

Xavfsiz saqlash: Keystore, Keychain va EncryptedSharedPreferences

Tokenlar, parollar va shifrlash kalitlarini saqlash maxsus himoyalangan omborlarni talab qiladi.

Android Keystore

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.

iOS Keychain

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 (Android)

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: Internal, External, Cache Directory

Fayl saqlash (rasmlar, videolar, hujjatlar) uchun mobil platformalar bir necha turdagi omborlarni taqdim etadi.

Android Storage

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 Storage

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.

Ma'lumotlarni serializatsiyasi: JSON, Protobuf va kutubxonalar

Serializatsiya obyektlarni uzatish yoki saqlash uchun formatga aylantiradi. Deserializatsiya teskari jarayon.

Formatlar

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.

Android kutubxonalari

  • Gson (Google) — oddiy, moslashuvchan, lekin sekin. Java/Kotlin obyektlari bilan avtomatik ishlaydi
  • Moshi (Square) — Gson-dan tezroq, yaxshiroq Kotlin qo'llab-quvvatlashi (null bo'lmagan xususiyatlar, default qiymatlar, sealed sinflar)
  • kotlinx.serialization — JetBrains-dan mahalliy Kotlin serializatsiyasi, kompilyatsiya vaqtida ishlaydi, JSON, Protobuf, CBOR ni qo'llab-quvvatlaydi

iOS kutubxonalari

JSONSerialization JSON bilan ishlash uchun o'rnatilgan API. Codable (Encodable/Decodable) JSON, Property List va boshqa formatlarga avtomatik serializatsiya uchun zamonaviy Swift protokoli.

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)

Platformalararo yechimlar: Hive, ObjectBox, Drift

Flutter va React Native uchun o'zining samarali saqlash kutubxonalari mavjud.

Hive (Flutter)

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

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 (sobiq Moor)

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

Lokal ma'lumotlarni saqlash uchun nima yaxshiroq: Room yoki Core Data?

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 va DataStore o'rtasidagi farq nima?

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.

Mobil ilovada tokenlar va parollarni qanday xavfsiz saqlash mumkin?

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.

Firebase Firestore nima va qachon foydalanish kerak?

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 va React Native uchun qanday ORM lar mavjud?

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

  • Room (Android) va Core Data (iOS) har bir platformada relyatsion ma'lumotlar bazalari uchun rasmiy yechimlar
  • DataStore sozlamalarni asinxron saqlash uchun SharedPreferences o'rnini bosadi
  • Keystore / Keychain token va kalitlarni xavfsiz saqlash uchun majburiy
  • Firebase Firestore qurilmalar o'rtasida real vaqt sinxronizatsiyasi uchun eng yaxshi tanlov
  • Kotlinx.serialization (Android) va Codable (iOS) zamonaviy serializatsiya yondashuvlari
  • Flutter uchun: Drift (SQLite), Hive (kalit-qiymat), ObjectBox (yuqori unumdorlik)
  • Realm reaktiv bildirishnomalar bilan SQLite-ga platformalararo alternativa

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.

Loyihani muhokama qilish