Realm mobil ilovalarda: bu nima va qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-03-12 O'qish vaqti: 11 daq

Realm — iOS va Android uchun SQLite va Core Data ga muqobil sifatida ishlab chiqilgan mobil ob'yektga yo'naltirilgan NoSQL ma'lumotlar bazasi. Ma'lumotlar xotiradagi ob'yektlarga to'g'ridan-to'g'ri kirish imkonini beruvchi o'z formatida saqlanadi, bu yuqori o'qish va yozish tezligini ta'minlaydi. Reaktiv bildirishnomalar, Realm Sync orqali avtomatik sinxronizatsiya va kross-platforma ma'lumotlar modeli tufayli Realm 1 milliarddan ortiq qurilmada qo'llaniladi (MongoDB ma'lumotlari, 2025).

Asosiy ma'lumotlar

  • Realm — mobil platformalar uchun operativ xotiraga to'g'ridan-to'g'ri ma'lumotlarga kirish imkoniyatiga ega NoSQL ob'yektli MB.
  • Live Objects — Realm ob'yektlari ma'lumotlar o'zgarganda qo'lda qayta yuklamasdan avtomatik yangilanadi.
  • Zero-copy — ma'lumotlar ilova qatlamlari o'rtasida ko'chirilmaydi, bu ORM qo'shimcha xarajatlarini bartaraf qiladi.
  • Realm Sync — MongoDB Atlas Device Sync orqali qurilmalar o'rtasida o'rnatilgan sinxronizatsiya.
  • Kross-platformalilik — ma'lumotlar modeli iOS, Android, Flutter va React Native uchun bir marta aniqlanadi.

Realm nima?

Realm — bu ayniqsa mobil ilovalar uchun yaratilgan ob'yektga yo'naltirilgan ma'lumotlar bazasi. SQLite dan farqli o'laroq, Realm SQL va relyatsion modeldan foydalanmaydi — ma'lumotlar jonli ob'yektlar (Live Objects) sifatida saqlanadi, ularga to'g'ridan-to'g'ri, oraliq ORM qatlamisiz kirish mumkin. Dasturchi tilning oddiy ob'yektlari (Swift, Kotlin, Dart) bilan ishlaydi, ular avtomatik ravishda MB da saqlanadi.

Realm 2014 yilda Realm Inc. startapi sifatida paydo bo'lgan va 2019 yilda MongoDB Inc. tomonidan sotib olingan. O'shandan beri Realm MongoDB Realm sifatida — mobil ma'lumotlarni sinxronizatsiya qilish uchun yagona Atlas Device Sync platformasining bir qismi sifatida rivojlanmoqda. Asosiy mahalliy Realm MB bepul va ochiq qoladi (Apache 2.0 litsenziyasi), Realm Sync (bulutli sinxronizatsiya) esa obuna asosida tarqatiladi.

MongoDB Developer Report (2025) ma'lumotlariga ko'ra, Realm mobil ilovalarning 15 foizida asosiy mahalliy ombor sifatida qo'llaniladi. Asosiy stsenariylar — oflayn rejimiga ega ilovalar, murakkab ob'yekt modellari va qurilmalar o'rtasida sinxronizatsiyaga ehtiyoj bor joylar, bunda Realm ishlab chiqish tezligi va ob'yektlar bilan ishlash qulayligi bo'yicha SQLite dan ustun turadi.

Realm tamoyillari

Live Objects — har bir Realm ob'yekti xotiraga xaritalash (memory-mapped file) orqali disk bilan bog'langan. Ob'yektni istalgan oqimda o'zgartirish boshqa barcha oqimlarda qo'lda xabardor qilmasdan darhol aks etadi. UI interfeysi Realm bildirishnomalari orqali ma'lumotlar o'zgarganda avtomatik qayta chiziladi. Zero-copy — Realm ma'lumotlarni MB dan ob'yektlarga ko'chirmaydi, ob'yektlarning o'zi xotiradagi ma'lumotlardir.

Realm tuzilishi: arxitektura va saqlash

Realm yadrosi C++ da yozilgan va ma'lumotlarni indekslash uchun B+ Tree dan foydalanadi. SQLite dan farqli o'laroq, har bir qator relyatsion jadvaldagi yozuv bo'lsa, Realm ob'yektlarni o'zaro to'g'ridan-to'g'ri havolalar (forward pointers) bilan grafik tuzilmadagi tugunlar sifatida saqlaydi. Ob'yektlar orasidagi munosabatlar foreign key emas, balki to'g'ridan-to'g'ri ko'rsatkichlar bo'lib, JOIN operatsiyalariga ehtiyojni yo'q qiladi.

Realm fayllari (.realm kengaytmasi) memory-mapped hisoblanadi — OT fayl sahifalarini xotiraga kirishga qarab yuklashni o'zi boshqaradi. Bu Realm ga mavjud operativ xotiradan kattaroq bazalar bilan ishlash imkonini beradi va RAM ga sig'adigan ma'lumotlar uchun tilning mahalliy ma'lumotlar tuzilmalari (Swift Array yoki Kotlin List) darajasida o'qish kechikishini ta'minlaydi.

Zero-copy va Live Objects

Memory-mapped fayllar — Realm ning asosiy texnologiyasi. Ma'lumotlarni MB faylidan til ob'yektlariga ko'chirish (SQLite sqlite3_step + sqlite3_column_* orqali qilganidek) o'rniga, Realm baza faylini to'g'ridan-to'g'ri jarayonning manzil maydoniga xaritalaydi. Til ob'yektlari — bu shunchaki xaritalangan xotiradagi ma'lumotlarga ko'rsatkichlar. Ob'yektni o'zgartirish alohida save chaqiruvisiz diskdagi bazani o'zgartiradi.

XususiyatRealm (zero-copy)SQLite (ko'chirish)
O'qishXotiraga to'g'ridan-to'g'ri kirish (nanosekundlar)Ob'yektga ko'chirish (mikrosekundlar)
YozishMemory-mapped faylga darhol yozishsave() SQL INSERT/UPDATE tranzaksiyasi bilan
MunosabatlarTo'g'ridan-to'g'ri ko'rsatkichlar (forward pointers)Foreign key + JOIN
Xotira iste'moliFayl + OT sahifa keshiOb'yektlar + SQLite sahifa keshi
Jonli ob'yektlarHa (avtomatik yangilanish)Yo'q (yangi fetch talab qilinadi)

Xotira iste'moli Realm faol o'qishda yuqoriroq (butun fayl yoki uning katta qismi xotiraga xaritalangan), lekin yozish operatsiyalarida pastroq, chunki ob'yektlar nusxalari uchun xotira ajratish talab qilinmaydi. Mobil qurilmalarda 1 GB gacha bo'lgan bazalar uchun memory-mapped yondashuv SQLite ning oraliq nusxa ko'chirishiga qaraganda yaxshiroq umumiy ishlashni ta'minlaydi.

Realm vs SQLite vs Core Data: taqqoslash

SQLite — SQL va ACID tranzaksiyalariga ega relyatsion MB boshqaruv tizimi. Realm — memory-mapped kirishga ega ob'yekt NoSQL MB. Core Data — SQLite ustidagi Apple ORM qatlami. Uch yondashuvning har biri o'z qo'llanish sohasi va kuchli tomonlariga ega. Realm ob'yektlarga to'g'ridan-to'g'ri kirish tezligi va reaktivlikda yutadi, SQLite — universallik va etuklikda, Core Data — Apple ekotizimi bilan integratsiyada.

Realm ning o'qish operatsiyalaridagi ishlashi zero-copy kirish tufayli SQLite dan 10-50% yuqori. Yozish operatsiyalarida Realm SQL sintaktik tahlili yo'qligi va memory-mapped sahifalarni to'g'ridan-to'g'ri o'zgartirish tufayli tezroq. Biroq, Realm katta bazalar (>500 MB) bilan ishlashda ko'proq operativ xotira iste'mol qilishi mumkin, chunki fayl to'liq manzil maydoniga xaritalanadi.

MezonRealmSQLiteCore Data
TurNoSQL ob'yekt MBRelyatsion MB (SQL)SQLite ustidagi ORM
O'qish tezligiYuqori (zero-copy)O'rtachaO'rtacha (ORM qo'shimcha xarajati)
ReaktivlikLive Objects (o'rnatilgan)Wrapper kerak (Room/GRDB)NSFetchedResultsController
SinxronizatsiyaRealm Sync (MongoDB Atlas)Maxsus implementatsiya talab qilinadiNSPersistentCloudKitContainer
PlatformalariOS, Android, Flutter, RN, Node.jsiOS, Android, Web, DesktopFaqat iOS/macOS
Kutubxona hajmi~4 MB~600 KBSDK ga o'rnatilgan

Realm va SQLite o'rtasidagi tanlov ko'pincha ustuvorliklarga bog'liq: ishlab chiqish tezligi va reaktivlik (Realm) nazorat va universallikka (SQLite) qarshi. Realm ayniqsa MVP va prototiplar uchun yaxshi, bunda ma'lumotlar modeli tez-tez o'zgaradi va UI ning jonli yangilanishlarini olish muhim. SQLite/Room katta hajmdagi ma'lumotlar va murakkab analitik so'rovlarga ega etuk mahsulotlar uchun afzal.

Android da Realm: Kotlin SDK

Realm Kotlin SDK — Android uchun Kotlin da yozilgan rasmiy kutubxona (Java SDK ustidagi wrapper emas). Ma'lumotlar modeli RealmObject dan meros oluvchi sinflar orqali, noyob identifikator uchun @PrimaryKey annotatsiyasi bilan aniqlanadi. Realm Kotlin Kotlin Coroutines, Flow va KSP (Kotlin Symbol Processing) ni kompilyatsiya vaqtida kod yaratish uchun qo'llab-quvvatlaydi.

RealmQuery SQL siz filtrlash uchun type-safe API taqdim etadi. So'rovlar metodlar zanjiri bilan tuziladi: queryfiltersortfind. Natija ro'yxat (xotiraga yuklash bilan) yoki Flow (reaktiv oqim, ma'lumotlar o'zgarganda yangilanadi) sifatida qaytarilishi mumkin. Realm Kotlin shuningdek ichki ob'yektlar va ro'yxatlarni (RealmList) qo'llab-quvvatlaydi.

Realm Kotlin SDK namunasi

Ma'lumotlar modeli Realm RealmObject interfeysini amalga oshiruvchi data class sifatida aniqlanadi. _id maydoni noyob identifikatsiya uchun @PrimaryKey bilan belgilangan. �Bir-ko'pga� munosabati RealmList — boshqa RealmObject lar ro'yxati orqali amalga oshiriladi. Barcha yozish operatsiyalari (create, update, delete) write tranzaksiya bloki ichida bajariladi.

kotlin
class Project : RealmObject {
    @PrimaryKey
    var _id: ObjectId = ObjectId().generate()
    var name: String = ""
    var tasks: RealmList<Task> = realmListOf()
}

class Task : RealmObject {
    @PrimaryKey
    var _id: ObjectId = ObjectId().generate()
    var title: String = ""
    var isComplete: Boolean = false
}

val config = Realm.Configuration.Builder(
    schema = setOf(Project::class, Task::class)
).build()

val realm = Realm.open(config)
realm.write { transactionRealm ->
    val project = copyToRealm(Project().apply {
        name = "Mobile App"
    })
    project.tasks.add(copyToRealm(Task().apply {
        title = "Design UI"
    }))
}

val projects: Flow<RealmResults<Project>> =
    realm.query<Project>()
        .sort(Project::name, Sort.ASCENDING)
        .asFlow()

Flow qaytaruvchi so'rov Realm dagi har qanday ma'lumotlar o'zgarishida avtomatik ravishda yangi natijalarni emit qiladi: Project yoki Task qo'shilishi, yangilanishi yoki o'chirilishi. Flow yondashuvi Compose bilan ideal tarzda mos keladi: ViewModel dagi collectAsState() ma'lumotlar o'zgarganda UI ni ro'yxat adapterlarini qo'lda yangilash yoki LiveData ishlatmasdan avtomatik qayta tuzadi.

iOS da Realm: Swift SDK

Realm Swift SDK async/await, Combine Publishers va Swift Concurrency ni qo'llab-quvvatlovchi mahalliy Swift API ni taqdim etadi. Ma'lumotlar modellari Object dan meros oluvchi sinflar sifatida, xususiyatlar uchun @Persisted yordamida aniqlanadi. Realm Swift o'zgarishlar bilan ob'yektlarni avtomatik yangilaydi va bildirishnomalar (NotificationToken) alohida ob'yektlar yoki to'plamlar o'zgarishlariga obuna bo'lish imkonini beradi.

@ObservedRealmObject va @ObservedResults — SwiftUI uchun Property Wrapperlar bo'lib, Realm ma'lumotlari o'zgarganda View ni avtomatik qayta chizadi. @ObservedResults so'rov natijalari bilan, @ObservedRealmObject esa ma'lum bir ob'yekt bilan ishlaydi. Ikkala xususiyat View deinitsializatsiyasida obunani bekor qiladi.

Realm Swift SDK namunasi

SwiftUI integratsiyasi Realm SDK ning kuchli tomonlaridan biridir. @ObservedResults Property Wrapperi Realm so'rovini SwiftUI da ko'rsatish bilan bog'laydi. Har qanday vazifa o'zgarganda, SwiftUI ro'yxatni avtomatik qayta tuzadi. realm.writeAsync tranzaksiyalarni UI ni bloklamasdan fon oqimida bajaradi.

swift
import RealmSwift

class TaskItem: Object, Identifiable {
    @Persisted(primaryKey: true) var _id: ObjectId
    @Persisted var title: String = ""
    @Persisted var isDone: Bool = false
    @Persisted var priority: Int = 0
}

struct TaskListView: View {
    @ObservedResults(TaskItem.self,
        sortDescriptor: SortDescriptor(["priority"]))
    var tasks

    var body: some View {
        List {
            ForEach(tasks) { task in
                TaskRow(task: task)
            }
        }
        Button("Vazifa qo'shish") {
            let realm = try! Realm()
            try! realm.write {
                realm.add(TaskItem(value: ["title": "New task"]))
            }
        }
    }
}

@ObservedResults Realm so'rovining hayotiy siklini avtomatik boshqaradi: View yaratilganda o'zgarishlarga obuna yaratiladi, yo'q qilinganda bekor qilinadi. Property Wrapper ixtiyoriy predikat (NSPredicate) va saralashni qabul qiladi. Bu qo'lda fetch-so'rovlar yozish, ViewModel yaratish va Realm bildirishnomalariga obuna bo'lish zaruratini yo'q qiladi.

Realm dan foydalanish stsenariylari

Oflayn ilovalar — Realm ma'lumotlar internet siz mavjud bo'lishi kerak bo'lgan stsenariylar uchun ideal. O'rnatilgan sinxronizatsiya (MongoDB Atlas bilan Realm Sync) tarmoqqa ulanganda avtomatik ravishda nizolarni hal qiladi. Ilova mahalliy ma'lumotlar bilan ishlashda davom etadi va fon sinxronizatsiyasi ulanish paydo bo'lganda ularni yangilaydi.

Reaktiv interfeyslar — Live Objects va Flow/Combine bildirishnomalari Realm ni tez-tez yangilanadigan ma'lumotlarga ega ilovalar uchun qulay tanlovga aylantiradi: chatlar, vazifalar lentalari, hamkorlikdagi hujjatlar. UI ma'lumotlar qo'shilganda, o'zgartirilganda yoki o'chirilganda qo'lda reloadData yoki invalidate chaqiruvlarisiz avtomatik yangilanadi.

Kross-platforma loyihalari — Realm Kotlin Multiplatform (KMP), Flutter, React Native va Xamarin ni qo'llab-quvvatlaydi. Ma'lumotlar modeli bir marta aniqlanadi va barcha platformalarda qo'llaniladi. Bu kod takrorlanishini kamaytiradi va umumiy biznes mantiqiga ega iOS va Android ilovalari o'rtasida ma'lumotlar sxemasi mosligini kafolatlaydi.

Realm Sync: MongoDB Atlas orqali sinxronizatsiya

Realm Sync — MongoDB Atlas ga o'rnatilgan bulutli xizmat. Ilova foydalanuvchi qurilmalari va server o'rtasida ma'lumotlarni avtomatik sinxronlashtiradi. Nizolar �oxirgi yozish g'olib� strategiyasi yoki serverdagi maxsus Conflict Resolution Functions orqali hal qilinadi. Realm Sync trafikni kamaytirish uchun qisman sinxronizatsiyani (subset of data) qo'llab-quvvatlaydi.

kotlin
class SyncRepository {
    private val app = App(
        AppConfiguration(
            appId = "my-realm-app-id"
        )
    )

    suspend fun syncData() {
        val user = app.login(Credentials.anonymous())
        val config = SyncConfiguration.Builder(
            user, setOf(Project::class)
        ).build()

        val syncedRealm = Realm.open(config)
        // Avtomatik sinxronizatsiya faol
    }
}

SyncConfiguration MongoDB Atlas ga ulanishni sozlaydi va sinxronlashtiriladigan modellar to'plamini belgilaydi. Foydalanuvchi autentifikatsiyasidan so'ng, Realm avtomatik ravishda bulutdan ma'lumotlarni yuklaydi va ularni mahalliy o'zgarishlar bilan birlashtiradi. Sinxronizatsiya fon oqimida ishlaydi va qo'lda chaqiruvni talab qilmaydi — SyncConfiguration bilan Realm namunasini yaratish kifoya.

Tez-tez so'raladigan savollar

Realm tijorat maqsadida foydalanish uchun bepulmi?

Ha, mahalliy Realm MB to'liq bepul (Apache 2.0 litsenziyasi). Realm Sync (bulutli sinxronizatsiya) MongoDB Atlas orqali — Atlas Device Sync obunasiga kiruvchi pullik xizmat. Atlas ning bepul darajasida dastlabki 500 MB ma'lumot va oyiga 1 million operatsiya mavjud.

SQLite dan Realm ga migratsiya qilish mumkinmi?

Ha, migratsiya ma'lumotlarni SQLite dan JSON ga eksport qilish va ilovaning birinchi yuklanishida Realm ga import qilish orqali mumkin. Katta hajmlar uchun oqimli migratsiyadan foydalaning: foydalanuvchilar ilovaning yangi versiyasiga o'tguncha ma'lumotlarni parallel ravishda ikkala MB ga yozing, so'ngra SQLite faylini o'chiring.

Realm sinxronizatsiya nizolarini qanday hal qiladi?

Realm Sync sukut bo'yicha �oxirgi yozish g'olib� strategiyasidan foydalanadi — oxirgi yozuv oldingisini qayta yozadi. Murakkab nizolar uchun MongoDB Atlas serverida maxsus Conflict Resolution Functions sozlang, ular turli qurilmalardagi o'zgarishlarni ilova biznes mantig'i bo'yicha birlashtiradi (masalan, qiymatlarni almashtirish o'rniga birlashtirish).

Realm agregatsiya so'rovlarini qo'llab-quvvatlaydimi?

Realm MB darajasida SQL agregatsiyalarini (SUM, AVG, GROUP BY) qo'llab-quvvatlamaydi. Analitik so'rovlar uchun ma'lumotlarni Realm Sync orqali MongoDB Atlas ga chiqarib, MongoDB Aggregation Pipeline orqali agregatsiyalarni bajarish tavsiya etiladi. Oddiy hisoblar uchun realm.query<T>().count() dan foydalaning.

Realm dagi ma'lumotlar xavfsizmi?

Realm ma'lumotlarni sukut bo'yicha shifrlamaydi. Shifrlash uchun konfiguratsiyada 64 baytli kalitni belgilang: Realm.Configuration(encryptionKey: key). Shifrlash AES-256 + SHA-2 HMAC dan foydalanadi va operatsiyalarga qo'shimcha xarajatni 10-20% ga oshiradi. Shifrlashsiz .realm fayli fayl tizimiga kirish imkoniga ega har qanday jarayon tomonidan o'qilishi mumkin.

Xulosa

  • Realm — mobil ilovalar uchun memory-mapped kirish, jonli ob'yektlar va kross-platforma ma'lumotlar modeliga ega ob'yektga yo'naltirilgan NoSQL ma'lumotlar bazasi.
  • Zero-copy arxitekturasi ma'lumotlarni til ob'yektlariga ko'chirmasdan memory-mapped fayldan to'g'ridan-to'g'ri o'qish imkonini beradi, bu Realm ni o'qishda SQLite dan 10-50% tezroq qiladi.
  • Live Objects va @ObservedResults (SwiftUI) / Flow (Kotlin) ma'lumotlar o'zgarganda MB ga qo'lda so'rovlarsiz UI ni avtomatik yangilashni ta'minlaydi.
  • Realm Sync MongoDB Atlas bilan o'rnatilgan bulutli sinxronizatsiyani �oxirgi yozish g'olib� strategiyasi bilan nizolarni hal qilishni ta'minlaydi.
  • Kross-platforma SDKlar Kotlin Multiplatform, Flutter, React Native ni qo'llab-quvvatlaydi — ma'lumotlar modeli barcha platformalar uchun bir marta aniqlanadi.
  • Analitik so'rovlar uchun Realm guruhli agregatsiyalarning yo'qligi sababli SQLite dan zaif — murakkab hisobotlar MongoDB Aggregation Pipeline orqali bajariladi.
  • Tavsiya — Realm dan tez-tez UI yangilanishlari va kross-platforma sinxronizatsiyasiga ehtiyoj bo'lgan oflayn ilovalar uchun foydalaning, SQLite/Room — analitika va barqaror ma'lumotlar to'plamiga ega loyihalar uchun.

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

Shuningdek o'qing