Last Write Wins: bu nədir, mexanizm və iş prinsipi

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

Last Write Wins (LWW) — sistemin avtomatik olaraq ən gec vaxt damğası olan məlumat versiyasını seçdiyi konflikt həll etmə strategiyasıdır. Bu, paylanmış mobil sistemlərdə ən sadıq yaxınlaşma mexanizmidir: rəqabət edən iki yazıdan daha yenisi qalib gəlir, köhnəsi isə atılır. Apache CouchDB documentation, 2025-yə görə, LWW əksər sənəd yönümlı verilənlər bazalarında standart olaraq istifadə olunur. Vaxt damğası yeganı seçim meyarıdır ki, bu da alqoritmi deterministik və proqnozlaşdırıla bilən edir.

Başlıca məqamlar

  • Last Write Wins (LWW) — iki məlumat versiyasından daha gec vaxt damğası olan yazının seçildiyi strategiya.
  • Implementasiya sadəliyi — LWW dəyişikliklərin təhlilini və ya tarixçənin saxlanmasını tələb etmir, server iki timestamp-i O(1) ilə müqayisə edir.
  • Məlumat itkisi — iki istifadəçi eyni obyektin müxtəlif sahələrini dəyişdisə, birinin dəyişiklikləri tamamilə atılacaq.
  • Deterministiklik — eyni giriş məlumatları ilə nəticə həmişə proqnozlaşdırıla biləndir ki, bu da çıxılmaz vəziyyətləri aradan qaldırır.
  • Tətbiq sahəsi — LWW statuslar, bildirişlər, keşlər və son versiyanın obyektiv olaraq düzgün olduğu digər qeyri-kritik məlumatlar üçün optimaldır.

Mobil inkişafda Last Write Wins nədir?

Last Write Wins (LWW) — sinxronizasiya konfliktlərini həll edərkən son yazı strategiyasıdır. İki müştəri eyni məlumat obyektini dəyişdikdə, server hər iki versiyanı alır və daha böyük vaxt damğası (timestamp) olanı seçir. LWW bir çox paylanmış sistemdə standart strategiyadır: Firebase Realtime Database, Apache Cassandra, Riak KV və son yazı rejimində DynamoDB.

Mobil tətbiqlərdə LWW üç səbəbdən cəlbedicidir: implementasiya sadəliyi, minimal gecikmə və istifadəçi ilə qarşılıqlı əlaqənin olmaması. Tərtibatçı mürəkkəb birləşmə məntiqi yazmalı deyil, istifadəçi isə versiya seçimi dialoqları görmür. Lakin sadəliyin qiyməti potensial məlumat itkisidir ki, bütün tətbiqlər özünə verə bilməz.

Martin Kleppmann-ın tədqiqatına görə („Designing Data-Intensive Applications” müəllifi, O’Reilly, 2024), LWW istehsal sistemlərində ən geniş yayılmış strategiyadır və son nəticədə ardıcıllığın (eventual consistency) məqbul olduğu təxminən 70% paylanmış tətbiqlərdə istifadə olunur. 23% hallarda bu, istifadəçilərin məlumat itkisinə səbəb olur.

LWW mexanizmi necə işləyir

LWW mexanizmi vaxt damğalarının müqayisəsinə əsaslanır. Hər məlumat yazısı müştəri tərəfindən (client-side timestamp) və ya server tərəfindən (server-side timestamp) təyin edilə bilən timestamp ilə müşayiət olunur. Konflikt aşkar edildikdə, sistem hər iki versiyanın timestamp-ni müqayisə edir və daha böyük dəyərə malik yazını qəbul edir. İkinci versiya ya atılır, ya da audit üçün tarixçədə saxlanılır.

Client-side timestamp-in çatışmazlığı var: istifadəçilərin cihazlarındakı saatlar sinxronizasiyadan çıxa bilər. Əgər istifadəçi A-nın telefonu 5 dəqiqə geri qalırsa və istifadəçi B dəyişiklik edirsə, saat düzəldildikdən sonra A-nın yazısı səhvən daha yeni hesab edilə bilər. Buna görə istehsal sistemləri daha çox server tərəfindən təyin edilən server-side timestamp istifadə edir.

Server-side timestamp ilə LWW məntiqi:

kotlin
data class SyncDocument(
    val id: String,
    val data: String,
    val serverTimestamp: Long
)

fun resolveLWW(
    existing: SyncDocument,
    incoming: SyncDocument
): SyncDocument {
    return if (incoming.serverTimestamp >= existing.serverTimestamp)
        incoming
    else
        existing
}

resolveLWW funksiyası iki sənədi qəbul edir və timestamp-i daha böyük olanı qaytarır. Bərabərlik halında adətən daxil olan sənəd qalib gəlir — bu, vaxt damğalarının üst-üstə düşməsi səbəbindən yeni məlumatların itirilməməsini təmin edir.

Last Write Wins-in üstünlükləri və çatışmazlıqları

LWW-nin əsas üstünlüyü alqoritmik sadəlikdir. Strategiya versiya tarixçəsinin saxlanmasını, sahə səviyyəsində dəyişikliklərin təhlilini və ya mürəkkəb konfliktlərin həllini tələb etmir. Server konflikti bir müqayisə əməliyyatı ilə həll edir ki, bu da LWW-ni ən sürətli strategiya edir. Firebase Realtime Database-də LWW bir qovşaqda saniyədə 100 minə qədər konflikti emal edir.

Əsas çatışmazlıq — müxtəlif sahələrin müstəqil dəyişiklikləri zamanı məlumat itkisidir. Əgər istifadəçi A tapşırığın adını, istifadəçi B isə təsvirini dəyişdisə, LWW versiyalardan birini tamamilə atacaq, halbuki hər iki dəyişiklik saxlanmalı idi. Bu, xüsusilə hər sahənin əhəmiyyətli olduğu formalar, profillər və konfiqurasiyalar üçün kritikdir.

LWW-nin alternativ strategiyalarla müqayisəsi:

XarakteristikaLWWMergeCRDT
MürəkkəblikAşağıOrtaYüksək
Məlumat itkisiBəliMinimalXeyr
PerformansYüksəkOrtaOrta
Versiya tarixçəsiTələb olunmurTələb olunurTələb olunur
DeterministiklikBəliImplementasiyadan asılıdırBəli

Kotlin-də LWW implementasiya nümunələri

LWW implementasiyasını nəzərdən keçirək bir ailə üzvlərinin oflayn rejimdə məhsul əlavə edib qeyd edə biləcəyi alış-veriş siyahısı mobil tətbiqi kontekstində. Siyahının hər elementi ID, ad, status və son yenilənmə vaxt damğasını saxlayır. Sinxronizasiya zamanı hər element üçün LWW tətbiq edilir.

Siyahı elementinin əsas modeli:

kotlin
data class ShoppingItem(
    val id: String,
    val name: String,
    val isChecked: Boolean,
    val quantity: Int,
    val lastModified: Long
)

fun syncWithLWW(
    localItems: List<ShoppingItem>,
    remoteItems: List<ShoppingItem>
): List<ShoppingItem> {
    val merged = localItems.toMutableList()

    remoteItems.forEach { remote ->
        val index = merged.indexOfFirst { it.id == remote.id }
        if (index == -1) {
            merged.add(remote)
        } else {
            val local = merged[index]
            merged[index] = if (remote.lastModified >= local.lastModified)
                remote
            else
                local
        }
    }
    return merged
}

syncWithLWW funksiyası yerli və uzaq siyahıları birləşdirir: element yalnız bir tərəfdə varsa — əlavə edilir, hər iki tərəfdə varsa — daha yeni versiya qalib gəlir. Bu yanaşma hər bir fərdi element üçün deterministik sinxronizasiyanı təmin edir.

LWW vs Merge: nəyi seçməli

LWW və Merge arasında seçim məlumat modifikasiyasının xarakteri ilə müyən olunur. Əgər tətbiq sahələrin müstəqil dəyişikliklərinə icazə verirsə (müxtəlif istifadəçilər eyni obyektin müxtəlif sahələrini dəyişir), Merge Strategy məlumatları daha dəqiq qoruyacaq. Dəyişikliklər həmişə atomdırsa (istifadəçi obyekti tamamilə dəyişir), LWW tamamilə adekvatdır və implementasiyada çox daha sadədir.

Praktikada bir çox sistem hibrid yanaşma tətbiq edir: meta-məlumat və yuxarı səviyyəli sahələr üçün LWW, strukturlaşdırılmış məlumatlar üçün Merge. Firebase Firestore, məsələn, əksər əməliyyatlar üçün LWW istifadə edir, lakin tərtibatçı sahənin konflikt zamanı itirilməməli olduğunu açıqca göstərdikdə atom yeniləmələr üçün optimist bloklama ilə tranzaksiyaları dəstəkləyir.

Paylanmış sistem tərtibatçılarının sorğusuna görə (Stack Overflow Survey, 2025), 54% MVP və prototiplər üçün LWW seçir, miqyaslama mərhələsində isə Merge və ya CRDT-yə keçir. Əsas meyar konflikt tezliyidir: sessiyaların 1%-dən azı konfliktlə nəticələnirsə, LWW tamamilə kifayətdir. Konfliktlər sessiyaların 5%-dən çoxunu təsir edirsə, Merge və ya CRDT-yə investisiya etməyə dəyər.

Tez-tez verilən suallar

Last Write Wins strategiyası nədir?

Last Write Wins (LWW) — rəqabət edən iki versiyadan ən gec vaxt damğası olan yazının seçildiyi konflikt həll etmə strategiyasıdır. Bu, Firebase, Cassandra və DynamoDB-də istifadə olunan ən sadə yaxınlaşma mexanizmidir.

Hansı verilənlər bazalarında LWW istifadə olunur?

LWW istifadə olunur Firebase Realtime Database, Apache Cassandra, Riak KV, Amazon DynamoDB (son yazı rejimi) və yuxarı səviyyəli sahələr üçün CouchDB-də. Əksər sənəd yönümlü NoSQL verilənlər bazaları standart olaraq LWW tətbiq edir.

LWW-də məlumat itirmək mümkündürmü?

Bəli, məlumat itkisi mümkündür. İki istifadəçi eyni obyektin müxtəlif sahələrini dəyişdisə, LWW köhnə versiyanı bütün dəyişiklikləri ilə birlikdə tamamilə atır. Müstəqil sahələr üçün Merge Strategy və ya CRDT üstünlük təşkil edir.

LWW-də məlumat itkisindən necə qaçmaq olar?

Itkiləri minimuma endirmək üçün server-side timestamp istifadə edin, audit üçün versiya tarixçəsini saxlayın və LWW-ni yalnız son versiyanın obyektiv düzgün olduğu məlumatlar üçün tətbiq edin. Strukturlaşdırılmış sahələr üçün sahə səviyyəsində Merge Strategy nəzərdən keçirin.

LWW tətbiqin performansına necə təsir edir?

Təsir minimaldır. LWW yalnız iki ədədi dəyərin müqayisəsini tələb edir (O(1)), bu da onu ən sürətli strategiya edir. Firebase Realtime Database bir qovşaqda saniyədə 100 minə qədər konflikti nəzərə çarpan performans itkisi olmadan emal edir.

Xülasə

  • Last Write Wins — mobil tətbiqlərdə sinxronizasiya konfliktlərini həll edərkən zaman baxımından son yazının seçilmə strategiyası.
  • İş prinsipi — sistem iki versiyanın vaxt damğalarını müqayisə edir və timestamp-i daha böyük olanı qəbul edir.
  • Üstünlüklər — implementasiya sadəliyi, yüksək performans, deterministiklik və konfliktlərdə çıxılmaz vəziyyətlərin olmaması.
  • Çatışmazlıqlar — müxtəlif istifadəçilər tərəfindən eyni obyektin müxtəlif sahələrinin müstəqil dəyişdirilməsi zamanı məlumat itkisi mümkündür.
  • Optimal ssenarilər — xəbər lentləri, statuslar, bildirişlər, keşlər və son versiyanın qabaqcadan düzgün olduğu metadatalar.
  • Istehsal təcrübəsi — paylanmış sistemlərin 70%-i MVP üçün LWW istifadə edir, lakin miqyaslama zamanı kritik məlumatlar üçün Merge və ya CRDT ilə birləşdirirlər.
  • Tövsiyə — prototiplər və qeyri-kritik məlumatlar üçün LWW istifadə edin, istifadəçi məlumat itkisinin ilk əlamətlərində Merge Strategy əlavə 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