Come aggiornare più informazioni in diverse posizioni (tabella) in caso di modifica di un record?

StackOverflow https://stackoverflow.com/questions/1442399

Domanda

Questa non è una domanda SO Meta. Sto usando SO solo come esempio.

In StackoverFlow ogni risposta, ogni commento, ogni domanda, ogni voto ha un effetto che produce un badge in un determinato momento. Voglio dire dopo ogni azione viene testato un elenco di query.

es. Se il signor A. vota il signor B. Rispondi. Quindi dobbiamo controllare se questa risposta di Mr.B è stata votata 100 volte, quindi dai un badge a Mr.B, ha Mr.A votato 100 volte, quindi dagli un badge.

Significa che devo eseguire almeno 100 query / IfElse per ogni azione.

Ora il mio esempio di vita reale è che ho un'applicazione in cui ricevo dati online da una macchina delle presenze. Quando un utente mostra la sua carta alla macchina. Lo ricevo e lo memorizzo come un record. Ora, sulla base di questo record, ho più calcoli, ovvero è in ritardo. È in ritardo per continua 3 giorni. È nel turno giusto (Day shift / Night Shift). È oggi vacanza. È un lavoro straordinario. È in anticipo ....... ecc., Ecc., Ecc.

Qual è la migliore strategia per questo tipo di requisiti.

Aggiornamento: Il team SO può guidarci su questo?

È stato utile?

Soluzione

Si utilizzano code e flussi di lavoro. In questo modo si disaccoppia il momento dell'aggiornamento dalle notifiche effettive, consentendo al sistema di ridimensionarsi. Soluzioni strettamente accoppiate, basate su trigger o simili non possono essere ridimensionate, poiché ogni aggiornamento deve attendere che tutte le parti interessate reagiscano alla notifica. La progettazione del motore di elaborazione che utilizza i flussi di lavoro consente di aggiungere facilmente passaggi e notifiche ai consumatori modificando i dati, senza modificare lo schema.

Ad esempio, vedi come MSDN utilizza le code per gestire problemi simili con il contenuto MSDN: Creazione del sistema di aggregazione MSDN .

Altri suggerimenti

Non potresti semplicemente usare " flags " (altre tabelle, altre colonne, qualunque cosa) per indicare quando si verificano questi casi speciali? In questo modo dovresti fare solo una ricerca (per caso speciale) di una tonnellata di ricerche e / o join. È possibile registrare le modifiche (terzo giorno di ritardo, ecc.) Su insert.

Inoltre, cosa controllare dipende da una soglia.

es. Una persona è assente dagli ultimi 3 giorni? Tale controllo è richiesto solo quando la persona è assente per 2 giorni.

Voglio dire, non è necessario controllare tutto, ogni volta.
Inoltre, quante informazioni devono essere aggiornate immediatamente? SO non aggiorna le cose in tempo reale.

Potrebbe essere necessario utilizzare due database con replica online tra loro - uno per ottenere dati in tempo reale e nient'altro, in secondo luogo è possibile utilizzare calcoli concreti (ad esempio calcolare tutti i latings ogni 10 minuti o per requst). Individua questi database su server diversi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top