Come gestire la manipolazione dei dati dopo che un record db è stato scritto al di fuori del mio programma

5

Ho scritto un'app Web per la gestione del magazzino. L'applicazione gestisce il prelievo in batch, il routing del magazzino, l'imballaggio e il pezzo finale viene gestito dal mondo UPS per "spedire" i pacchi. Worldship scriverà un record per il mio postgres db dopo ogni spedizione o annullamento. Ho bisogno di un modo per vedere chiaramente che il record è stato scritto / cancellato e poi "fare cose".

La semplice risposta è di avere un programma per monitorare il database e quando vede un record scritto per fare la sua cosa, ma qualcosa mi tormenta che probabilmente c'è un modo migliore per fare questo che non ha un programma sondare la tabella e confrontarla con ciò che è stato lì per ultimo.

EDIT: Come stavo per affrontare questo ... La tabella è impostata con un campo di stato. Il mio programma verrebbe a intervalli di tempo per leggere la tabella per tutti i record che hanno uno stato nullo, se i record sono trovati "fare cose" quindi contrassegnare lo stato come completo.

TIA

    
posta Ominus 26.10.2011 - 15:36
fonte

2 risposte

6

Esistono almeno altri due mezzi efficaci per gestire questo tipo di problema.

A. Usa i trigger. Impostali per attivare le operazioni appropriate.

B. Esporre un servizio. Il programma client passa attraverso il servizio invece di collegarsi direttamente al database. Questo ti dà il pieno controllo su quali tabelle possono essere aggiornate. Il livello extra ti dà la possibilità di gestire le operazioni anche in un linguaggio imperativo. In altre parole, C # / Java è in genere una scelta migliore per la manipolazione degli elementi, ad esempio l'iterazione di singole righe anziché di SQL, che è più adatto per le operazioni di impostazione.

    
risposta data 26.10.2011 - 16:26
fonte
4

I trigger del database ti permetteranno di farlo nel modo più efficiente. Crea un trigger sulle operazioni di inserimento / cancellazione nella tabella pertinente in modo da catturare l'evento di cui parli. Usa il grilletto per inserire una riga in una tabella solo perché l'applicazione contrassegni quando un record è stato modificato.

I trigger sono stati progettati per fare questo e sono molto veloci, ma fai attenzione quando li scrivi; se l'istruzione del trigger fallisce (ad es. violi un vincolo UNIQUE ) l'intera operazione può fallire, non solo l'azione innescata.

    
risposta data 26.10.2011 - 16:44
fonte

Leggi altre domande sui tag