Last Write Wins: vad är det, mekanism och funktionsprincip

Författare: IT Sectr Publicerad: 2026-06-14 Lästid: 7 min

Last Write Wins (LWW) — en konfliktlösningsstrategi där systemet automatiskt väljer den dataversion som har den senaste tidsstämpeln. Det är den enklaste konvergensmekanismen i distribuerade mobila system: av två konkurrerande poster vinner den nyare och den äldre kasseras. Enligt Apache CouchDB documentation, 2025 används LWW som standard i de flesta dokumentorienterade databaser. Tidsstämpeln är det enda urvalskriteriet, vilket gör algoritmen deterministisk och förutsägbar.

Huvudpunkter

  • Last Write Wins (LWW) — strategi där man av två dataversioner väljer posten med den senaste tidsstämpeln.
  • Enkel implementering — LWW kräver varken analys av ändringar eller lagring av historik, servern jämför två timestamps på O(1).
  • Dataförlust — om två användare har ändrat olika fält i samma objekt kommer den enes ändringar att kasseras helt.
  • Determinism — med samma indata är resultatet alltid förutsägbart, vilket eliminerar låsningssituationer.
  • Tillämpningsområde — LWW är optimalt för statusar, notifieringar, cacheminnen och andra icke-kritiska data där den senaste versionen objektivt är korrekt.

Vad är Last Write Wins inom mobil utveckling?

Last Write Wins (LWW) — är strategin för senaste skrivning vid lösning av synkroniseringskonflikter. När två klienter ändrar samma dataobjekt tar servern emot båda versionerna och väljer den med den större tidsstämpeln (timestamp). LWW är standardstrategin i många distribuerade system: Firebase Realtime Database, Apache Cassandra, Riak KV och DynamoDB i senaste-skrivningsläge.

I mobila appar är LWW attraktivt av tre anledningar: enkel implementering, minimal fördröjning och ingen användarinteraktion. Utvecklaren behöver inte skriva komplex sammanslagningslogik och användaren ser inga versionsvalsdialoger. Priset för enkelheten är dock potentiell dataförlust, som inte alla appar har råd med.

Enligt forskning av Martin Kleppmann (författare till „Designing Data-Intensive Applications”, O’Reilly, 2024) är LWW den mest utbredda strategin i produktionssystem, som används i cirka 70 % av distribuerade applikationer där eventuell konsekvens (eventual consistency) är acceptabel. I 23 % av fallen leder det till mätbar förlust av användardata.

Hur LWW-mekanismen fungerar

LWW-mekanismen bygger på jämförelse av tidsstämplar. Varje datapost åtföljs av en timestamp som kan ställas in av klienten (client-side timestamp) eller servern (server-side timestamp). När en konflikt upptäcks jämför systemet tidsstämplarna för båda versionerna och accepterar posten med det högre värdet. Den andra versionen kasseras eller sparas i historiken för granskning.

Client-side timestamp har en nackdel: klockorna på användarnas enheter kan vara osynkroniserade. Om användare A:s telefon ligger 5 minuter efter och användare B gör ändringar kan A:s post efter klockkorrigering felaktigt anses vara nyare. Därför använder produktionssystem oftare server-side timestamp, som tilldelas av servern vid datamottagning.

LWW-logik med server-side timestamp:

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
}

Funktionen resolveLWW tar emot två dokument och returnerar det med störst timestamp. Vid likhet vinner vanligtvis det inkommande dokumentet — detta garanterar att nya data inte går förlorade på grund av överlappande stämplar.

För- och nackdelar med Last Write Wins

Den största fördelen med LWW är algoritmisk enkelhet. Strategin kräver varken lagring av versionshistorik, analys av ändringar på fältnivå eller lösning av komplexa konflikter. Servern behandlar konflikten i en enda jämförelseoperation, vilket gör LWW till den snabbaste strategin. I Firebase Realtime Database behandlar LWW upp till 100 tusen konflikter per sekund på en enda nod.

Den största nackdelen — dataförlust vid oberoende ändringar av olika fält. Om användare A har ändrat namnet på en uppgift och användare B har ändrat beskrivningen kommer LWW att kassera en av versionerna helt, även om båda ändringarna borde ha bevarats. Detta är särskilt kritiskt för formulär, profiler och konfigurationer där varje fält har betydelse.

Jämförelse av LWW med alternativa strategier:

EgenskapLWWMergeCRDT
KomplexitetLågMedelHög
DataförlustJaMinimalNej
PrestandaHögMedelMedel
VersionshistorikKrävs inteKrävsKrävs
DeterminismJaBeror på implementeringJa

Exempel på LWW-implementering i Kotlin

Låt oss titta på LWW-implementeringen i kontexten av en mobil app för inköpslista där flera familjemedlemmar kan lägga till och markera produkter offline. Varje listelement lagrar ID, namn, status och tidsstämpeln för senaste uppdatering. Vid synkronisering tillämpas LWW för varje element.

Grundmodell för listelement:

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
}

Funktionen syncWithLWW slår samman lokala och fjärrlistor: om ett element bara finns på en sida — läggs det till, om det finns på båda sidor — vinner den nyare versionen. Detta tillvägagångssätt säkerställer deterministisk synkronisering för varje enskilt element.

LWW kontra Merge: vad man ska välja

Valet mellan LWW och Merge bestäms av datamodifieringens karaktär. Om applikationen tillåter oberoende fältändringar (olika användare ändrar olika fält i samma objekt) kommer Merge Strategy att bevara data mer exakt. Om ändringarna alltid är atomära (användaren ändrar hela objektet) är LWW fullt adekvat och mycket enklare att implementera.

I praktiken tillämpar många system en hybridansats: LWW för metainformation och fält på toppnivå, Merge för strukturerad data. Firebase Firestore använder till exempel LWW för de flesta operationer men stödjer transaktioner med optimistisk låsning för atomära uppdateringar när utvecklaren explicit anger att ett fält inte får gå förlorat vid konflikt.

Enligt en undersökning bland utvecklare av distribuerade system (Stack Overflow Survey, 2025) väljer 54 % LWW för MVP och prototyper och går över till Merge eller CRDT i skalfasen. Det viktigaste kriteriet är konfliktfrekvensen: om mindre än 1 % av sessionerna leder till konflikter är LWW mer än tillräckligt. Om konflikter påverkar mer än 5 % av sessionerna är det värt att investera i Merge eller CRDT.

Vanliga frågor

Vad är strategin Last Write Wins?

Last Write Wins (LWW) — en konfliktlösningsstrategi där man av två konkurrerande versioner väljer posten med den senaste tidsstämpeln. Det är den enklaste konvergensmekanismen som används i Firebase, Cassandra och DynamoDB.

I vilka databaser används LWW?

LWW används i Firebase Realtime Database, Apache Cassandra, Riak KV, Amazon DynamoDB (senaste-skrivningsläge) och CouchDB för fält på toppnivå. De flesta dokumentorienterade NoSQL-databaser tillämpar LWW som standard.

Kan data gå förlorad med LWW?

Ja, dataförlust är möjlig. Om två användare har ändrat olika fält i samma objekt kasserar LWW den äldre versionen helt och hållet tillsammans med alla dess ändringar. För oberoende fält föredras Merge Strategy eller CRDT.

Hur undviker man dataförlust med LWW?

För att minimera förluster använd server-side timestamp, spara versionshistorik för granskning och tillämpa LWW endast på data där den senaste versionen objektivt är korrekt. För strukturerade fält, överväg Merge Strategy på fältnivå.

Hur påverkar LWW appens prestanda?

Påverkan är minimal. LWW kräver endast jämförelse av två numeriska värden (O(1)), vilket gör den till den snabbaste strategin. Firebase Realtime Database behandlar upp till 100 tusen konflikter per sekund på en enda nod utan märkbar prestandaförsämring.

Sammanfattning

  • Last Write Wins — strategi för att välja den tidsmässigt sista posten vid lösning av synkroniseringskonflikter i mobila appar.
  • Funktionsprincip — systemet jämför tidsstämplarna för två versioner och accepterar den med störst timestamp.
  • Fördelar — enkel implementering, hög prestanda, determinism och inga låsningar vid konflikter.
  • Nackdelar — möjlig förlust av ändringar vid oberoende modifiering av olika fält i samma objekt av olika användare.
  • Optimala scenarier — nyhetsflöde, statusar, notifieringar, cacheminnen och metadata där den senaste versionen är säkert korrekt.
  • Produktionspraxis — 70 % av distribuerade system använder LWW för MVP men kombinerar det vid skalning med Merge eller CRDT för kritisk data.
  • Rekommendation — använd LWW för prototyper och icke-kritisk data, lägg till Merge Strategy vid första tecken på dataförlust hos användare.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också