Merge Strategy — bu nədir, birləşmə növləri və iş prinsipi

Müəllif: IT Sectr Dərc olunub: 2026-06-14 Oxuma vaxtı: 8 dəq

Merge Strategy — məlumatların birləşdirilməsi strategiyası, burada müxtəlif versiyalardan olan ziddiyyətli dəyişikliklər bir versiyanı digəri ilə əvəz etmək əvəzinə vahid uzlaşdırılmış vəziyyətdə birləşdirilir. Last Write Wins-dən fərqli olaraq, birləşmə bütün budaqlardan dəyişiklikləri qorumağa çalışır, məlumat itkisini minimuma endirir. Apache CouchDB documentation, 2025 məlumatlarına görə, üçtərəfli birləşmə (three-way merge) sənəd yönümlü verilənlər bazalarında münaqişələrin həlli üçün standart mexanizmdir. Üçtərəfli birləşmə hər bir müştərinin hansı sahələri dəyişdiyini müəyyən etmək üçün ümumi əsas versiyadan istifadə edir.

Əsas məqamlar

  • Merge Strategy — ziddiyyətli dəyişikliklərin əvəz edilmək əvəzinə birləşdirildiyi yanaşma, bu da istifadəçi məlumatlarının itkisini minimuma endirir.
  • Üçtərəfli birləşmə — yerli, uzaq və əsas versiyaları təhlil edir, sahə səviyyəsində ziddiyyətli olmayan dəyişiklikləri avtomatik həll edir.
  • Tarixçənin saxlanması — Merge fərqliliyi müəyyən etmək üçün əvvəlki versiyaların saxlanmasını tələb edir, bu da saxlanılan məlumatların həcmini artırır.
  • Mürəkkəblik — Merge LWW-dən daha mürəkkəbdir, xüsusən daxili strukturların və massivlərin münaqişələrinin həlli üçün.
  • Tətbiq — profillər, sənədlər, formalar və hər bir sahənin müstəqil dəyərə malik olduğu digər strukturlaşdırılmış məlumatlar üçün optimaldır.

Merge Strategy mobil inkişafda nədir?

Merge Strategy — bir versiyanı seçmək əvəzinə ziddiyyətli məlumat versiyalarını birləşdirən alqoritmlər toplusudur. Mobil tətbiqlərdə Merge iki müştəri müstəqil olaraq bir obyektin müxtəlif sahələrini və ya xüsusiyyətlərini redaktə etdikdə istifadə olunur. Köhnə versiyanı tamamilə atmaq əvəzinə (LWW-də olduğu kimi), sistem ayrı-ayrı sahələr səviyyəsində fərqlilikləri təhlil edir və hər iki versiyadan dəyişiklikləri özündə birləşdirən nəticə obyekti formalaşdırır.

Əsas fərq Merge ilə LWW arasında — hər bir istifadəçinin dəyişikliklərinin, onlar bir-birinə zidd olmadıqda qorunmasıdır. Əgər istifadəçi A tapşırığın adını, istifadəçi B isə təsvirini dəyişibsə, Merge hər iki dəyişikliyi qoruyacaq. Əgər hər ikisi eyni sahəni dəyişibsə — həll tələb edən münaqişə qeydə alınır. Bu, Merge-i istifadəçilərin eyni məlumatlar üzərində birgə işlədiyi tətbiqlər üçün üstünlüklü edir.

Stripe Engineering Blog (2025) hesabatına görə, Merge Strategy-nin LWW əvəzinə tətbiqi onların layihə idarəetmə mobil tətbiqində məlumat itkisi ilə bağlı istifadəçi şikayətlərinin sayını 76% azaldıb. Bununla belə, münaqişələrin emal müddəti 15–30 ms artıb ki, bu da məlumatların qorunması üçün məqbul qiymət hesab olunur.

Üçtərəfli birləşmə: mexanizm necə işləyir

Üçtərəfli birləşmə (three-way merge) — Merge Strategy-nin ən geniş yayılmış tətbiqidir. Mexanizm üç məlumat versiyası ilə işləyir: əsas (base — fərqlilikdən əvvəlki vəziyyət), yerli (local — cari müştərinin versiyası) və uzaq (remote — serverdən olan versiya). Sistem yerli və uzaq versiyaların hər bir sahəsini əsas versiya ilə müqayisə edərək hansı tərəfin hansı sahələri dəyişdiyini müəyyən edir.

Qərar qəbuletmə məntiqi sadədir: əgər sahəni yalnız bir müştəri dəyişibsə (əsas versiyaya nisbətən), onun dəyişikliyi avtomatik qəbul edilir. Əgər hər iki müştəri eyni sahəni dəyişibsə — avtomatik (prioritetə görə) həll edilə bilən və ya istifadəçiyə ötürülən münaqişə qeydə alınır. Əgər heç bir müştəri sahəni dəyişməyibsə — əsas dəyər qalır. Bu yanaşma müstəqil dəyişikliklərin itirilməməsini və münaqişə yaratmamasını təmin edir.

Sahə lüğəti səviyyəsində üçtərəfli birləşmə alqoritmi:

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 -> // həqiqi münaqişə
                resolveConflict(key, localVal, remoteVal)
        }
    }
    return result
}

threeWayMerge funksiyası ardıcıl olaraq üç versiyadan bütün açarları emal edir. Əgər yerli dəyər əsas dəyərlə üst-üstə düşürsə — uzaq dəyişiklik qəbul edilir. Əgər uzaq dəyər əsasla üst-üstə düşürsə — yerli dəyişiklik qəbul edilir. Əgər hər ikisi əsasdan fərqlənir, lakin bir-birinə bərabərdirsə — hər hansı biri qəbul edilir. Həqiqi münaqişə yalnız hər iki tərəfdən fərqli dəyişikliklər olduqda qeydə alınır.

Münaqişələrin avtomatik və əl ilə həlli

Avtomatik həll dəyişikliklər kəsişmədikdə və ya sistem qaydalar əsasında düzgün dəyəri müəyyən edə bildikdə tətbiq olunur. Məsələn, rəqəm sahələri üçün maksimal dəyər, mətn sahələri üçün birləşdirmə və ya daha yeni versiya seçilə bilər. CouchDB JSON sənədinin sahələri üçün avtomatik birləşmədən, massivlər üçün isə dublikatların silinməsi ilə birləşdirmədən istifadə edir.

Əl ilə həll iki istifadəçi eyni sahəni fərqli şəkildə dəyişdikdə zəruridir. Bu halda tətbiq üç seçimli dialoq göstərir: “yerli versiyanı qəbul et”, “uzaq versiyanı qəbul et” və ya “əl ilə birləşdir”. CMU (Carnegie Mellon University, 2024) tədqiqatçıları qeyd edirlər ki, əl ilə həll istifadəçi məmnuniyyətini 40% azaldır, buna görə də avtomatik birləşmə maksimum dərəcədə artırılmalıdır.

Müxtəlif sahə növləri üçün həll strategiyaları:

Sahə növüAvtomatik strategiyaƏl ilə alternativ
Rəqəm (sayğac)Maksimalı götürHər iki dəyəri göstər
Mətn (sətir)Zamana görə seçVurğulayan redaktor
Məntiqi dəyərRollara görə prioritetÜç seçim variantı
Massiv (siyahı)Deduplikasiya ilə birləşdirməElement üzrə seçim
Daxili obyektRekursiv birləşməDiff göstər

Kotlin-də birləşmənin tətbiq nümunələri

Tətbiqi nəzərdən keçirək REST API vasitəsilə sinxronizasiya olunan mobil tətbiqdə istifadəçi profili üçün Merge Strategy. Profil ad, email, avatar və bildiriş parametrlərini ehtiva edir. Hər bir sahə istifadəçinin müxtəlif cihazlarında müstəqil şəkildə dəyişdirilə bilər.

Sahə səviyyəsində versiyalaşdırma ilə profil məlumat 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 funksiyası profil hər bir sahəsini müstəqil emal edərək, əsas versiyadan fərqlənən versiyanı seçir. Münaqişə zamanı (hər ikisi əsasdan fərqlənir) prioritet tətbiq qaydaları ilə müəyyən edilir. Nümunədə avatarUrl üçün uzaq versiyaya, qalan sahələr üçün isə yerli versiyaya üstünlük verilir.

Merge Strategy mobil tətbiqlərin verilənlər bazalarında

CouchDB və PouchDB — Merge Strategy-nin daxili dəstəyi ilə ən məşhur verilənlər bazalarıdır. Sənədlərin replikasiyası zamanı CouchDB sənəd səviyyəsində münaqişələrin aşkarlanması ilə çoxaxınlı replikasiyadan istifadə edir. Əsas versiya reviziya tarixçəsində saxlanılır və münaqişə zamanı sistem bütün ziddiyyətli budaqları qoruyur və tətbiqə birləşmə mexanizmi vasitəsilə onların həlli üçün API təqdim edir.

Firebase Firestore-da Merge optimistik bloklama ilə transaksiyalar vasitəsilə həyata keçirilir. Tərtibatçı müəyyən sahələrin atomik şəkildə yenilənməli olduğunu göstərə bilər, FieldValue.serverTimestamp()FieldValue.arrayUnion() istifadə edərək. Lakin Firestore tam üçtərəfli birləşməni dəstəkləmir — münaqişə zamanı transaksiya yeni məlumatlarla təkrarlanır, bu da həqiqi birləşmə deyil, təkrar cəhddir.

Kotlin MultiplatformReact Native üzərində mobil tətbiqlər üçün Merge Strategy müştəri tərəfində həyata keçirilir. Yerli verilənlər bazası (SQLite, Realm) hər bir sənədin versiyasını saxlayır və sinxronizasiya zamanı müştəri serverdən versiyanı yükləyir və nəticəni göndərməzdən əvvəl yerli olaraq birləşməni həyata keçirir. Bu yanaşma, daha çox münaqişənin yığıldığı uzunmüddətli oflayn iş zamanı belə məlumatların qorunmasını təmin edir.

Tez-tez verilən suallar

Məlumat sinxronizasiyasında Merge Strategy nədir?

Merge Strategy — müxtəlif versiyalardan dəyişikliklərin vahid vəziyyətdə birləşdirildiyi münaqişələrin həlli yanaşmasıdır. LWW-dən fərqli olaraq, Merge sahə səviyyəsində bir-birinə zidd olmadıqda hər iki budaqdan dəyişiklikləri qoruyur.

Üçtərəfli birləşmənin ikitərəflidən fərqi nədir?

Üçtərəfli birləşmə hər bir müştərinin hansı sahələri dəyişdiyini müəyyən etmək üçün əsas versiyadan (fərqlilikdən əvvəlki vəziyyət) istifadə edir. İkitərəfli birləşmə yalnız iki versiyanı müqayisə edir, ilkin vəziyyəti bilmir, bu da daha tez-tez yalançı münaqişələrə səbəb olur.

Hansı verilənlər bazaları Merge-i qutudan çıxan kimi dəstəkləyir?

CouchDB və PouchDB üçtərəfli birləşmə üçün daxili dəstəyə malikdir. Firebase Firestore transaksiya səviyyəsində tətbiq tələb edir. MongoDBRealm optimistik bloklama mexanizmləri təklif edir, lakin tam avtomatik birləşməni deyil.

Merge Strategy nə vaxt uyğun deyil?

Merge uyğun deyil emal sürətinin vacib olduğu məlumatlar (saniyədə 1000-dən çox münaqişə), axın məlumatları (loglar, hadisələr) və dəyişikliklərin prinsipcə uyğunsuz olduğu hallar (məlumat sxeminin müxtəlif versiyaları) üçün. Bu hallarda LWW və ya CRDT daha effektivdir.

Mobil tətbiqdə Merge Strategy-ni necə tətbiq etməli?

Tətbiq üç mərhələdən ibarətdir: serverdən məlumat yüklənərkən əsas versiyanın saxlanması, yadda saxlanarkən sahə səviyyəsində dəyişikliklərin aşkarlanması və sinxronizasiya zamanı birləşmə alqoritminin çağırılması. Sadələşdirmək üçün JSON Patch və ya CRDT kitabxanalarından istifadə edin.

Nəticə

  • Merge Strategy — bir versiyanı digəri ilə əvəz etmək əvəzinə, müxtəlif məlumat versiyalarından dəyişiklikləri birləşdirən münaqişələrin həlli strategiyası.
  • Üçtərəfli birləşmə — dəyişdirilmiş sahələri müəyyən etmək üçün əsas, yerli və uzaq versiyalardan istifadə edən ən populyar tətbiq.
  • Avtomatik həll — ziddiyyətli olmayan dəyişikliklər üçün tətbiq olunur (müxtəlif sahələr, müştərilərdən biri məlumatları dəyişməyib).
  • Əl ilə həll — bir sahənin iki müştəri tərəfindən dəyişdirilməsi zamanı zəruridir, lakin istifadəçi məmnuniyyətini 40% azaldır.
  • Üstünlük — sənədlər üzərində birgə iş zamanı minimal məlumat itkisi və daha yaxşı istifadəçi təcrübəsi.
  • Çatışmazlıq — tətbiqin artan mürəkkəbliyi və yerli verilənlər bazasında versiya tarixçəsinin əlavə saxlanılması.
  • Tövsiyə — profillər, sənədlər və konfiqurasiyalar üçün Merge tətbiq edin. Metadata və loglar üçün daha sadə alternativ olaraq LWW-dən istifadə edin.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun