Mobil ishlab chiqishda ma'lumotlar bilan ishlash, keshlash va sinxronizatsiya ilovaning samaradorligi va ishonchliligini belgilaydigan uchta asosiy jihatdir. Google Android Architecture Guide ma'lumotlariga ko'ra, ma'lumotlarni qayta ishlashning to'g'ri arxitekturasi javob tezligi va foydalanuvchi tajribasiga bevosita ta'sir qiladi. Repository namunasi barcha ma'lumot manbalariga yagona kirish nuqtasini ta'minlaydi.
Asosiy Fikrlar
Repository namunasi — bitta depo sinfi barcha ma'lumot operatsiyalarini boshqaradigan, uzoq REST API va mahalliy saqlash Room yoki SwiftData-ni abstraktlashtiradigan arxitektura yondashuvidir. Ma'lumotlar bilan ishlashning bu usuli ilovaga avval Memory Cache yoki Disk Cache-dan, so'ngra tarmoqdan ma'lumot olish imkonini beradi, javob vaqtini qisqartiradi. Mobil ishlab chiqishda Repository Google va Apple tavsiyalari tufayli de-fakto standartga aylandi.
Remote Data Source HTTP so'rovlari orqali serverdan dolzarb ma'lumotni ta'minlaydi. Local Data Source — Android-da Room yoki iOS-da SwiftData orqali amalga oshirilgan qurilmadagi mahalliy saqlashdir. Depo ikkala manbani birlashtiradi: avval mahalliy keshlarni tekshiradi, ma'lumot bo'lmaganda esa uzoq API-dan so'raydi. Ma'lumotlarni boshqarishning bu tashkil etilishi ilovaga oflayn rejimda ishlash imkonini beradi va server yukini kamaytiradi.
class UserRepository(
private val remoteDataSource: UserRemoteDataSource,
private val localDataSource: UserLocalDataSource
) {
suspend fun getUsers(): List<User> {
localDataSource.getCachedUsers()?.let { return it }
val users = remoteDataSource.fetchUsers()
localDataSource.cacheUsers(users)
return users
}
}
class UserRepository {
private let remote: UserRemoteDataSource
private let local: UserLocalDataSource
func getUsers() async throws -> [User] {
if let cached = await local.getCached() { return cached }
let users = try await remote.fetch()
await local.save(users)
return users
}
}
LRU Cache (Least Recently Used) — chegaraga yetganda eng uzoq vaqt davomida kirilmagan element o'chiriladigan keshlash algoritmi. Mobil ilovalarda LRU Cache tasvirlar, API javoblari va seriyalashtirilgan ob'ektlar uchun ishlatiladi. To'g'ri ma'lumot keshlash tarmoq so'rovlari sonini kamaytiradi va kontent yuklashni tezlashtiradi. Mobil ilovalarda kesh yuqori samaradorlik uchun muhim komponentdir.
Memory Cache ma'lumotlarni RAM-da saqlaydi — kirish juda tez, ammo sig'im ilovaning yig'in hajmi bilan cheklangan. Disk Cache ma'lumotlarni fayl tizimida saqlaydi — sekinroq, lekin ko'proq sig'adi va seanslar orasida saqlanadi. Mobil ishlab chiqishda optimal strategiya ikki darajali kesh: issiq ma'lumotlar uchun Memory Cache va sovuq ma'lumotlar uchun Disk Cache. Ma'lumotlar bilan ishlashda avval xotiradagi birinchi darajali kesh, so'ngra diskdagi ikkinchi darajali kesh tekshiriladi.
class MemoryCache<K, V>(
private val maxSize: Int = 100
) {
private val cache = LinkedHashMap<K, V>(0, 0.75f, true)
fun get(key: K): V? = cache[key]
fun put(key: K, value: V) {
if (cache.size >= maxSize) {
cache.remove(cache.keys.first())
}
cache[key] = value
}
}
TTL kesh (Time To Live) belgilangan vaqt oralig'idan keyin avtomatik ravishda yozuvni o'chiradi — API ma'lumotlari uchun mos. Voqealarga asoslangan bekor qilish o'zgarishlar haqida push bildirishnomasi olinganda keshni tozalaydi. Mobil ilovalarda keshlash strategiyasini tanlash ma'lumot turiga bog'liq: tasvirlar uzoq vaqt keshlanadi, yangiliklar lentasi esa tez-tez bekor qilishni talab qiladi. Android-da Coil va iOS-da Kingfisher allaqachon tasvirlar bilan ishlash uchun LRU Cache-ni o'rnatgan.
Offline Queue — qurilma oflayn bo'lganda foydalanuvchi operatsiyalarini (yaratish, yangilash, o'chirish) mahalliy ma'lumotlar bazasida saqlaydigan ma'lumot tuzilmasidir. Ulanish tiklanganda, Sync Manager bu operatsiyalarni ketma-ket serverga qo'llaydi. Ma'lumot sinxronizatsiyasining bu turi vaqtinchalik tarmoq yo'qolishi paytida hech qanday o'zgarish yo'qolmasligini kafolatlaydi. Mobil ishlab chiqishda Offline Queue beqaror ulanishli ilovalar uchun muhim komponentdir.
Navbat Room yoki SwiftData-da jadvalda quriladi va maydonlari: operatsiya turi, JSON so'rov tanasi, vaqt tamg'asi va holat. Sync Manager — kutilayotgan operatsiyalarni qayta ishlaydigan, serverga yuboradigan, holatni yangilaydigan va muvaffaqiyatli yozuvlarni o'chiradigan fon xizmatidir. Android-da WorkManager yoki iOS-da BGTaskScheduler orqali ma'lumot sinxronizatsiyasi qurilma qayta ishga tushirilgandan keyin ham davom etadi. To'g'ri ma'lumotlarni boshqarish bilan Offline Queue dan foydalanish uzluksiz foydalanuvchi tajribasini ta'minlaydi.
@Entity
data class SyncOperation(
@PrimaryKey val id: Long,
val endpoint: String,
val method: String,
val body: String,
val createdAt: Long
)
class SyncManager(
private val dao: SyncOperationDao,
private val api: ApiService
) {
suspend fun syncPending() {
dao.getPendingOperations().forEach { op ->
try {
api.execute(op.endpoint, op.method, op.body)
dao.delete(op.id)
} catch (e: Exception) {
// retry on next cycle
}
}
}
}
Qayta urinishlar orasidagi eksponensial kechikish (1s, 2s, 4s, 8s) serverni haddan tashqari yuklanishdan himoya qiladi va cheksiz qayta urinishlarning oldini oladi. 5 urinish chegarasi navbatning to'lib ketishini oldini oladi. Server tomonidagi idempotentlik qo'llab-quvvatlashi bilan mobil ilovalarda ma'lumot sinxronizatsiyasi takrorlanmaslikni ta'minlab, xavfsiz qayta urinishlarga imkon beradi. Bu, ayniqsa, moliyaviy tranzaksiyalar va buyurtmalar uchun muhimdir.
Conflict Resolution — bir xil ma'lumotlar turli qurilmalarda bir vaqtda o'zgartiriladigan holatlar uchun strategiyalar to'plamidir. Asosiy ma'lumot sinxronizatsiyasi yondashuvni tanlashni talab qiladi: Last-Write-Wins (oxirgi yozuv g'alaba qozonadi), versiyalash (yuqori versiya g'alaba qozonadi) yoki qo'lda hal qilish. Murakkab stsenariylarda ma'lumotlarning matematik yaqinlashuvini kafolatlaydigan CRDT (Conflict-Free Replicated Data Types) qo'llaniladi.
Last-Write-Wins amalga oshirish uchun eng sodda, ammo foydalanuvchi o'zgarishlarini yo'qotishi mumkin. Version Vector — har bir yozuv versiya raqami va qurilma identifikatorini saqlaydi; versiyalar mos kelmasa, nizo yuzaga keladi. CRDT eng ishonchli, ammo murakkab strategiyadir: ma'lumotlar markazlashtirilgan koordinatorisiz matematik jihatdan yagona holatga yaqinlashadi. CRDT ga asoslangan mobil ilovalarda ma'lumot sinxronizatsiyasi Google Docs-da hamkorlikda tahrirlash va Notion eslatma sinxronizatsiyasida qo'llaniladi.
Ilova yangilanganda, mahalliy ma'lumotlar bazasi tuzilishi o'zgaradi: ustunlar, jadvallar, indekslar qo'shiladi. Schema Migration — ma'lumot yo'qotmasdan mavjud ma'lumotlar bazasini yangi sxemaga o'zgartirish jarayonidir. Room eski va yangi versiya bilan Migration sinfi orqali migratsiyalarni qo'llab-quvvatlaydi. SwiftData o'zgarishlarni tavsiflash uchun VersionedSchema dan foydalanadi. Ilova versiyalari o'rtasida to'g'ri ma'lumot sinxronizatsiyasi migratsiyalarni idempotent tarzda sinovdan o'tkazishni talab qiladi.
val migration1to2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE users ADD COLUMN avatar_url TEXT")
}
}
@Database(
entities = [User::class],
version = 2
)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
enum ConflictStrategy {
case lastWriteWins
case versionVector
case crdt
}
struct VersionedDocument {
let id: String
let version: Int
let data: Data
let editedBy: String
func resolve(with remote: VersionedDocument) -> VersionedDocument {
return version >= remote.version ? self : remote
}
}
Room — Android-da mahalliy saqlash uchun Google kutubxonasi, SQLite ustiga qurilgan va deklarativ so'rov tavsiflari uchun annotatsiyalarni ta'minlaydi. SwiftData — iOS, macOS, watchOS va visionOS uchun Apple freymvorki, qisqa Swift Macro sintaksisi bilan Core Data ning vorisi. Ikkala vosita qurilmada ma'lumotlar bilan ishlash vazifasini hal qiladi, ammo kod tashkil qilish uchun turli yondashuvlar bilan. Mobil ilovalarda kesh ko'pincha aynan shu texnologiyalar ustida quriladi.
Room jadvallar uchun @Entity annotatsiyalaridan va so'rovlar uchun @Dao-dan foydalanadi. DAO kompilyatsiya vaqtida tekshirish bilan barcha SQL operatsiyalarini inkapsulatsiya qiladi — SQL sintaksis xatolari ishga tushirishdan oldin aniqlanadi. Type Converter murakkab turlarni (Date, List) SQLite primitivlariga o'zgartiradi. Android ilovalarida zamonaviy ma'lumotlarni boshqarish Room + Flow atrofida quriladi, kesh yoki mahalliy ma'lumotlar bazasi o'zgarganda reaktiv UI yangilanishlarini ta'minlaydi.
SwiftData ob'ektlarni aniqlash uchun makro @Model-dan va ma'lumotlarni kuzatish uchun @Query-dan foydalanadi. Freymvork avtomatik ravishda bog'liqliklarni kuzatadi va o'zgarishlarda interfeysni yangilaydi. Sxema migratsiyasi barcha versiyalarni tavsiflovchi VersionedSchema-dan foydalanadi. SwiftData va server o'rtasidagi ma'lumot sinxronizatsiyasi @Query orqali yangilanishlarga obuna bo'ladigan maxsus Sync Manager orqali amalga oshiriladi.
@Model
final class UserModel {
var id: String
var name: String
var email: String
var updatedAt: Date
init(id: String, name: String, email: String) {
self.id = id
self.name = name
self.email = email
self.updatedAt = Date()
}
}
| Mezon | Room | SwiftData |
|---|---|---|
| Platforma | Android | Apple (iOS, macOS, visionOS) |
| Asos | SQLite | SQLite (Core Data steki) |
| Sintaksis | Kotlin annotatsiyalari | Swift Macro |
| Migratsiyalar | Migration sinfi | VersionedSchema |
| Reaktivlik | Flow / LiveData | @Query property wrapper |
| Platformalararo | Faqat Android | Faqat Apple |
Tez-tez beriladigan savollar
LRU Cache — chegaraga yetganda eng kam ishlatilgan elementni o'chiradigan keshlash algoritmi. Mobil ilovalarda tasvirlar va API ma'lumotlari uchun ishlatiladi.
Offline Queue tarmoq bo'lmaganda foydalanuvchi operatsiyalarini mahalliy ma'lumotlar bazasida saqlaydi. Sync Manager ulanish tiklanganda ularni bajaradi, o'zgarishlarning serverga yetkazilishini kafolatlaydi.
Conflict Resolution — ma'lumot sinxronizatsiyasi paytida nizolarni hal qilish strategiyasi. Asosiy yondashuvlar: taqsimlangan tizimlar uchun Last-Write-Wins, Version Vector va CRDT.
Android uchun Room-ni tanlang — kompilyatsiya vaqti SQL tekshiruvi bilan yetuk kutubxona. iOS uchun — deklarativ sintaksis bilan SwiftData. Platformalararo loyihalar uchun SQLDelight yoki Realm mos keladi.
Optimal ma'lumot sinxronizatsiyasi muhim operatsiyalar uchun har bir o'zgarishda va qolganlari uchun har 15–30 daqiqada fonda amalga oshiriladi. Tezkor yetkazib berish uchun push bildirishnomalaridan foydalaning.
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.