Merge Strategy — bu nima, birlashtirish turlari va ishlash prinsipi

Muallif: IT Sectr Nashr etilgan: 2026-06-14 O'qish vaqti: 8 daq

Merge Strategy — ma'lumotlarni birlashtirish strategiyasi bo'lib, unda turli versiyalardagi ziddiyatli o'zgarishlar bir versiyani boshqasiga almashtirish o'rniga yagona kelishilgan holatda birlashtiriladi. Last Write Winsdan farqli o'laroq, birlashtirish barcha tarmoqlardagi o'zgarishlarni saqlab qolishga harakat qiladi, ma'lumot yo'qotilishini minimallashtiradi. Apache CouchDB documentation, 2025 ma'lumotlariga ko'ra, uch tomonlama birlashtirish (three-way merge) hujjatga yo'naltirilgan ma'lumotlar bazalarida ziddiyatlarni hal qilishning standart mexanizmidir. Uch tomonlama birlashtirish har bir mijoz qaysi maydonlarni o'zgartirganini aniqlash uchun umumiy asosiy versiyadan foydalanadi.

Asosiy

  • Merge Strategy — ziddiyatli o'zgarishlar almashtirilish o'rniga birlashtiriladigan yondashuv, bu foydalanuvchi ma'lumotlarining yo'qotilishini minimallashtiradi.
  • Uch tomonlama birlashtirish — mahalliy, uzoq va asosiy versiyalarni tahlil qiladi, maydon darajasida ziddiyatli bo'lmagan o'zgarishlarni avtomatik hal qiladi.
  • Tarixni saqlash — Merge farqlarni aniqlash uchun oldingi versiyalarni saqlashni talab qiladi, bu saqlanadigan ma'lumotlar hajmini oshiradi.
  • Murakkablik — Merge LWWga qaraganda murakkabroq, ayniqsa ichki tuzilmalar va massivlar ziddiyatlarini hal qilishda.
  • Qo'llanilish — profillar, hujjatlar, shakllar va har bir maydon mustaqil qiymatga ega bo'lgan boshqa tuzilgan ma'lumotlar uchun optimal.

Merge Strategy mobil ishlanmada nima?

Merge Strategy — bir versiyani tanlash o'rniga ziddiyatli ma'lumot versiyalarini birlashtiruvchi algoritmlar to'plami. Mobil ilovalarda Merge ikki mijoz mustaqil ravishda bir ob'ektning turli maydonlari yoki xususiyatlarini tahrir qilganda qo'llaniladi. Eskiroq versiyani butunlay tashlab yuborish o'rniga (LWWdagi kabi), tizim alohida maydonlar darajasida farqlarni tahlil qiladi va ikkala versiyadan o'zgarishlarni o'z ichiga olgan natijaviy ob'ektni shakllantiradi.

Asosiy farq Merge bilan LWW o'rtasida — har bir foydalanuvchining o'zgarishlari, agar ular bir-biriga zid bo'lmasa, saqlanadi. Agar foydalanuvchi A topshiriq nomini, foydalanuvchi B esa tavsifini o'zgartirgan bo'lsa, Merge ikkala o'zgarishni saqlaydi. Agar ikkalasi bir maydonni o'zgartirgan bo'lsa — hal qilishni talab qiladigan ziddiyat qayd etiladi. Bu Merge ni foydalanuvchilar bir xil ma'lumotlar ustida birgalikda ishlaydigan ilovalar uchun afzal qiladi.

Stripe Engineering Blog (2025) hisobotiga ko'ra, Merge Strategyni LWW o'rniga joriy etish ularning mobil loyiha boshqaruvi ilovasida ma'lumot yo'qotish haqidagi foydalanuvchi shikoyatlari sonini 76% ga kamaytirdi. Biroq, ziddiyatlarni qayta ishlash vaqti 15–30 ms ga oshdi, bu ma'lumotni saqlash uchun maqbul narx deb hisoblanadi.

Uch tomonlama birlashtirish: mexanizm qanday ishlaydi

Uch tomonlama birlashtirish (three-way merge) — Merge Strategynining eng keng tarqalgan qo'llanilishi. Mexanizm uchta ma'lumot versiyasi bilan ishlaydi: asosiy (base — farqlanishdan oldingi holat), mahalliy (local — joriy mijoz versiyasi) va uzoq (remote — serverdagi versiya). Tizim mahalliy va uzoq versiyalarning har bir maydonini asosiy bilan taqqoslab, qaysi tomon qaysi maydonlarni o'zgartirganini aniqlaydi.

Qaror qabul qilish mantig'i sodda: agar maydonni faqat bitta mijoz o'zgartirgan bo'lsa (asosiyga nisbatan), uning o'zgarishi avtomatik qabul qilinadi. Agar ikkala mijoz bir maydonni o'zgartirgan bo'lsa — avtomatik (ustuvorlik bo'yicha) hal qilinishi yoki foydalanuvchiga topshirilishi mumkin bo'lgan ziddiyat qayd etiladi. Agar hech bir mijoz maydonni o'zgartirmagan bo'lsa — asosiy qiymat qoladi. Bu yondashuv mustaqil o'zgarishlarning yo'qolmasligini va ziddiyat yaratmasligini kafolatlaydi.

Maydon lug'ati darajasida uch tomonlama birlashtirish algoritmi:

kotlin
fun threeWayMerge(
    base: Map<String, Any?>,
    local: Map<String, Any?>,
    remote: Map<String, Any?>
): Map<String, Any?> {
    val result = base.toMutableMap()
    val allKeys = base.keys + local.keys + remote.keys

    allKeys.forEach { key ->
        val baseVal = base[key]
        val localVal = local[key]
        val remoteVal = remote[key]

        result[key] = when {
            localVal == baseVal -> remoteVal
            remoteVal == baseVal -> localVal
            localVal == remoteVal -> localVal
            else -> // haqiqiy ziddiyat
                resolveConflict(key, localVal, remoteVal)
        }
    }
    return result
}

threeWayMerge funksiyasi ketma-ket uchta versiyadagi barcha kalitlarni qayta ishlaydi. Agar mahalliy qiymat asosiy bilan mos kelsa — uzoq o'zgarish qabul qilinadi. Agar uzoq qiymat asosiy bilan mos kelsa — mahalliy o'zgarish qabul qilinadi. Agar ikkalasi asosiydan farq qilsa, lekin o'zaro teng bo'lsa — istalgani. Haqiqiy ziddiyat faqat ikkala tomondan turli o'zgarishlar bo'lganda qayd etiladi.

Ziddiyatlarni avtomatik va qo'lda hal qilish

Avtomatik hal qilish o'zgarishlar kesishmaganda yoki tizim qoidalar asosida to'g'ri qiymatni aniqlay olganda qo'llaniladi. Masalan, raqamli maydonlar uchun maksimal qiymat, matnli maydonlar uchun birlashtirish yoki yangiroq versiya tanlanishi mumkin. CouchDB JSON hujjat maydonlari uchun avtomatik birlashtirishdan, massivlar uchun esa dublikatlarni olib tashlash bilan birlashtirishdan foydalanadi.

Qo'lda hal qilish ikki foydalanuvchi bir maydonni turlicha o'zgartirganda zarur. Bu holda ilova uch variantli dialog ko'rsatadi: „mahalliy versiyani qabul qil“, „uzoq versiyani qabul qil“ yoki „qo'lda birlashtir“. CMU (Carnegie Mellon University, 2024) tadqiqotchilari qo'lda hal qilish foydalanuvchi qoniqishini 40% ga kamaytirishini ta'kidlaydilar, shuning uchun avtomatik birlashtirish maksimal darajada oshirilishi kerak.

Turli maydon turlari uchun hal qilish strategiyalari:

Maydon turiAvtomatik strategiyaQo'lda muqobil
Raqam (hisoblagich)Maksimalni olishIkkala qiymatni ko'rsatish
Matn (qator)Vaqt bo'yicha tanlashAjratib ko'rsatuvchi muharrir
Mantiqiy qiymatRollar bo'yicha ustuvorlikUch tanlov varianti
Massiv (ro'yxat)Deduplikatsiya bilan birlashtirishElement bo'yicha tanlash
Ichki ob'ektRekursiv birlashtirishDiff ko'rsatish

Kotlin da birlashtirishni qo'llash misollari

Qo'llashni ko'rib chiqamiz REST API orqali sinxronlashtiriladigan mobil ilovada foydalanuvchi profili uchun Merge Strategy. Profil ism, email, avatar va bildirishnoma sozlamalarini o'z ichiga oladi. Har bir maydon foydalanuvchining turli qurilmalarida mustaqil o'zgartirilishi mumkin.

Maydon darajasida versiyalash bilan profil ma'lumot sinfi:

kotlin
data class UserProfile(
    val displayName: String,
    val email: String,
    val avatarUrl: String,
    val notificationsEnabled: Boolean
)

data class ProfileSnapshot(
    val profile: UserProfile,
    val version: Int
)

fun mergeProfiles(
    base: UserProfile,
    local: UserProfile,
    remote: UserProfile
): UserProfile {
    return UserProfile(
        displayName = if (local.displayName != base.displayName)
            local.displayName else remote.displayName,
        email = if (local.email != base.email)
            local.email else remote.email,
        avatarUrl = if (remote.avatarUrl != base.avatarUrl)
            remote.avatarUrl else local.avatarUrl,
        notificationsEnabled = if (local.notificationsEnabled != base.notificationsEnabled)
            local.notificationsEnabled
        else remote.notificationsEnabled
    )
}

mergeProfiles funksiyasi profilning har bir maydonini mustaqil qayta ishlaydi, asosiy versiyadan farq qiladigan versiyani tanlaydi. Ziddiyatda (ikkalasi asosiydan farq qiladi) ustuvorlik ilova qoidalari bilan belgilanadi. Misolda avatarUrl uchun uzoq versiyaga, qolgan maydonlar uchun esa mahalliy versiyaga ustunlik beriladi.

Merge Strategy mobil ilovalar ma'lumotlar bazalarida

CouchDB va PouchDB — Merge Strategyni o'rnatilgan qo'llab-quvvatlashga ega eng mashhur ma'lumotlar bazalari. Hujjatlarni replikatsiya qilishda CouchDB hujjat darajasida ziddiyatlarni aniqlash bilan ko'p oqimli replikatsiyadan foydalanadi. Asosiy versiya versiyalar tarixida saqlanadi va ziddiyatda tizim barcha ziddiyatli tarmoqlarni saqlab, ilovaga ularni birlashtirish mexanizmi orqali hal qilish uchun API taqdim etadi.

Firebase Firestore da Merge optimistik bloklash bilan tranzaksiyalar orqali amalga oshiriladi. Dasturchi ma'lum maydonlar atomik tarzda yangilanishi kerakligini belgilashi mumkin, FieldValue.serverTimestamp() va FieldValue.arrayUnion() yordamida. Biroq, Firestore to'liq uch tomonlama birlashtirishni qo'llab-quvvatlamaydi — ziddiyatda tranzaksiya yangi ma'lumotlar bilan takrorlanadi, bu haqiqiy birlashtirish emas, balki qayta urinishdir.

Kotlin Multiplatform va React Native dagi mobil ilovalar uchun Merge Strategy mijoz tomonida amalga oshiriladi. Mahalliy ma'lumotlar bazasi (SQLite, Realm) har bir hujjatning versiyasini saqlaydi va sinxronlashda mijoz serverdan versiyani yuklab, natijani yuborishdan oldin mahalliy birlashtirishni amalga oshiradi. Bu yondashuv, ko'proq ziddiyatlar to'planadigan uzoq muddatli oflayn ish paytida ham ma'lumotlarning saqlanishini ta'minlaydi.

Tez-tez beriladigan savollar

Ma'lumot sinxronlashda Merge Strategy nima?

Merge Strategy — turli versiyalardagi o'zgarishlar yagona holatda birlashtiriladigan ziddiyatlarni hal qilish yondashuvi. LWWdan farqli o'laroq, Merge maydon darajasida bir-biriga zid bo'lmasa, ikkala tarmoqdagi o'zgarishlarni saqlaydi.

Uch tomonlama birlashtirishning ikki tomonlamadan farqi nimada?

Uch tomonlama birlashtirish har bir mijoz qaysi maydonlarni o'zgartirganini aniqlash uchun asosiy versiyadan (farqlanishdan oldingi holat) foydalanadi. Ikki tomonlama birlashtirish faqat ikki versiyani taqqoslaydi, boshlang'ich holatni bilmaydi, bu ko'pincha soxta ziddiyatlarga olib keladi.

Qaysi ma'lumotlar bazalari Merge-ni qutidan chiqqanda qo'llab-quvvatlaydi?

CouchDB va PouchDB uch tomonlama birlashtirish uchun o'rnatilgan qo'llab-quvvatlashga ega. Firebase Firestore tranzaksiya darajasida qo'llashni talab qiladi. MongoDB va Realm optimistik bloklash mexanizmlarini taklif qiladi, lekin to'liq avtomatik birlashtirishni emas.

Qachon Merge Strategy mos kelmaydi?

Merge mos kelmaydi qayta ishlash tezligi muhim bo'lgan ma'lumotlar (sekundiga 1000 dan ortiq ziddiyat), oqimli ma'lumotlar (loglar, hodisalar) va o'zgarishlar printsipial mos kelmaydigan hollar (ma'lumotlar sxemasining turli versiyalari) uchun. Bunday hollarda LWW yoki CRDT samaraliroq bo'ladi.

Mobil ilovada Merge Strategyni qanday qo'llash kerak?

Qo'llash uch bosqichdan iborat: serverdan ma'lumot yuklashda asosiy versiyani saqlash, saqlashda maydon darajasida o'zgarishlarni aniqlash va sinxronlashda birlashtirish algoritmini chaqirish. Soddalashtirish uchun JSON Patch yoki CRDT kutubxonalaridan foydalaning.

Xulosa

  • Merge Strategy — bir versiyani boshqasiga almashtirish o'rniga, turli ma'lumot versiyalaridan o'zgarishlarni birlashtiruvchi ziddiyatlarni hal qilish strategiyasi.
  • Uch tomonlama birlashtirish — o'zgartirilgan maydonlarni aniqlash uchun asosiy, mahalliy va uzoq versiyalardan foydalanadigan eng mashhur qo'llanilish.
  • Avtomatik hal qilish — ziddiyatli bo'lmagan o'zgarishlar uchun qo'llaniladi (turli maydonlar, mijozlardan biri ma'lumotni o'zgartirmagan).
  • Qo'lda hal qilish — bir maydon ikki mijoz tomonidan o'zgartirilganda zarur, lekin foydalanuvchi qoniqishini 40% ga kamaytiradi.
  • Afzallik — hujjatlar ustida birgalikda ishlashda minimal ma'lumot yo'qotilishi va yaxshiroq foydalanuvchi tajribasi.
  • Kamchilik — qo'llashning murakkabligi va mahalliy ma'lumotlar bazasida versiyalar tarixini qo'shimcha saqlash.
  • Tavsiya — profillar, hujjatlar va konfiguratsiyalar uchun Merge-ni qo'llang. Metadata va loglar uchun soddaroq muqobil sifatida LWW dan foydalaning.

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