Procedura consigliata per il rollback dei lotti

1

Contesto: Abbiamo 2 server (interni ed esterni) che devono contenere dati identici e rimanere sincronizzati per tutto il tempo. Il nostro sistema interno è come una cache locale e consentiamo la lettura / scrittura dei dati prima di salvare. Il salvataggio attiva un salvataggio locale e un salvataggio nel sistema esterno.

Le singole modifiche atomiche sono facili, ma dobbiamo iniziare a gestire i batch. I batch possono avere 100 cambiamenti e quindi il problema:

In caso di fallimento di un batch, qual è il modo migliore per gestire l'errore? Esistono best practice consolidate per mantenere sempre sincronizzati due server?

FYI: il nostro sistema locale è postgres il sistema esterno è sconosciuto ma hanno l'API RestFul.

    
posta RidingRails 26.08.2016 - 18:19
fonte

1 risposta

0

Non si desidera memorizzare dati non validi nel database. La migliore pratica è quella di trattare il database come un registro di controllo e come tale dovrebbe contenere solo dati validi e nient'altro (come farlo, se si utilizza l'event sourcing o il CRUD di base, dipende da voi).

Durante l'elaborazione di una serie di dati è necessario decidere se è possibile eseguire salvataggi parziali e considerare comunque i dati validi. Se la risposta è sì, fallo. Se la risposta è no, quello che stai probabilmente cercando è unità di lavoro .

Quando si utilizza l'unità di lavoro si considera un'operazione commerciale (che può essere qualcosa di semplice come l'aggiornamento di una password utente o una transazione finanziaria davvero complessa) una singola unità operativa. Si esegue il wrapping dell'intera transazione aziendale in una transazione di database e lo si elabora completamente o non lo si esegue affatto. Nel tuo caso un'intera transazione potrebbe elaborare l'intero batch di 100s di modifiche sui dati, ma potrebbe anche trattarne solo una parte. Devi solo decidere quale sia effettivamente l'unità di lavoro.

Non hai specificato una lingua. Se lavori in Java puoi dare un'occhiata a @Transactional di Java. . Sono un programmatore PHP e il linguaggio purtroppo non offre questa funzionalità. Quindi, se voglio trattare un'operazione di grandi dimensioni come una singola unità, sono costretto a tirar fuori la mia soluzione.

    
risposta data 26.08.2016 - 20:51
fonte

Leggi altre domande sui tag