Quali sono i casi d'uso ideali per sistemi debolmente coerenti?

2

Ho letto dei database distribuiti e simili fornendo garanzie di consistenza debole e strong, ma forse ho poca immaginazione - quando vorresti usare un sistema debolmente coerente?

La maggior parte degli esempi di casi d'uso reali - servizi che condividono lo stato su un sistema distribuito, o servizi di lettura-scrittura accessibili agli utenti - sembrano richiedere una strong coerenza di lettura-scrittura.

Che tipo di situazione è utile per un sistema debolmente coerente?

    
posta Akshat Mahajan 07.04.2017 - 18:22
fonte

2 risposte

2

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:

  1. Leggi un record
  2. Consenti a un utente di modificarlo
  3. Calcola un nuovo record in base al record originale + le modifiche dell'utente
  4. 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:

  1. Un'applicazione che esegue la scansione del Web e memorizza le informazioni sulla pagina man mano che vengono scoperte
  2. Un'applicazione che emette i log di debug
  3. 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.

    
risposta data 08.04.2017 - 01:44
fonte
2

L'unico caso d'uso che viene in mente è un sistema come Google che combina le corrispondenze sfocate, ha enormi requisiti di performance, è interessato all'analisi dei dati in forma aggregata, ma non è particolarmente preoccupato di perdere un piccolo numero di singoli punti di dati qua e là perché non hanno importanza.

In queste condizioni, la perdita di una piccola quantità di integrità dei dati è ampiamente superata dagli enormi benefici che si ottengono rinunciando alla durata assoluta dei dati.

    
risposta data 08.04.2017 - 00:42
fonte

Leggi altre domande sui tag