Concorrenza
Una coerenza debole sarebbe accettabile solo per le applicazioni in cui un inserto o un aggiornamento non si basano su una selezione precedente.
Ad esempio, considera questo flusso di lavoro comune:
- Leggi un record
- Consenti a un utente di modificarlo
- Calcola un nuovo record in base al record originale + le modifiche dell'utente
- Salva il record
Questo tipo di flusso di lavoro non funzionerebbe così bene con una debole coerenza, perché il record letto al punto # potrebbe non essere aggiornato e il salvataggio del record potrebbe calpestare un altro cambiamento già in volo. Se cambi FIRST_NAME e qualcun altro cambia LAST_NAME, uno di voi potrebbe perdere le modifiche.
D'altra parte, se stai inserendo record in cui il 100% dei dati proviene da una fonte esterna, la consistenza debole potrebbe essere OK. Alcuni esempi:
- Un'applicazione che esegue la scansione del Web e memorizza le informazioni sulla pagina man mano che vengono scoperte
- Un'applicazione che emette i log di debug
- Un meccanismo di registrazione di controllo ignoto
R / I
Una consistenza debole potrebbe non funzionare così bene se hai un sacco di R / I. Ad esempio, se stai inserendo un record che contiene chiavi esterne, non puoi essere certo che i record con quelle chiavi esterne esisteranno ancora al momento della propagazione degli aggiornamenti.
Questo non sarebbe un problema se il tuo database non consente le eliminazioni. Ad esempio, se è necessario inserire un record di sessione con una chiave esterna di ID utente e gli utenti non possono essere eliminati fisicamente, solo disabilitati.
Identità e collisioni
Qualsiasi chiave surrogata in un database debolmente coerente dovrebbe essere globalmente unica; un GUID o una chiave composta che contiene la chiave di partizionamento. Altrimenti, diversi nodi potrebbero finire per inserire lo stesso valore di identità e si verificherà una collisione quando i dati si propagheranno.