Le migliori pratiche per affrontare i campi computazionali?

4

Mi chiedevo dove fare / mettere il calcolo dei campi da calcolare da altri dati. Sì, sto parlando di campo computazionale. Anche i dati calcolati devono essere salvati nel database. Così.. Meteo dovrebbe essere fatto al database o da qualche codice esterno come un servizio di Windows. ?

Consentitemi di inserire la mia esigenza / scenario:

  • Sto sviluppando un'applicazione web per diffondere i dati ricevuti da più strumenti / sensori distribuiti da qualche parte nel campo.
  • Un servizio Windows in C # viene sviluppato e implementato in Microsoft Windows SQL Sever 2008 R2 per ricevere, formattare e inserire dati in una tabella (diciamo tblSensorData) nel database SQL distribuito sullo stesso computer.
  • Un trigger Insert e Update è implementato su 'tblSensorData' e viene usato per chiamare una stored procedure che calcola altri 3 valori numerici dalla lettura del sensore ricevuto e inserisce una riga in un'altra tabella (diciamo 'tblComputedFields').
  • Pertanto, ogni nuovo dato non elaborato ricevuto ha una riga di campo calcolata generata nel database e quindi ho coerenza in questo modo.

Ho fatto qualche ricerca sulla buona o cattiva pratica di trattare con i campi computazionali e le persone sostengono di fare alle applicazioni e alcuni al database. Ma non è stato possibile trovare una risposta precisa a seconda del mio scenario attuale.

Una cosa è certa, se facciamo lo stesso compito di computazione a parte il database in qualsiasi codice esterno dovrebbe essere Insert Event / Trigger basato per sapere quando fare i calcoli e per la coerenza dei dati nel database.

Qualsiasi suggerimento sarebbe apprezzato riguardo a dove eseguire lo stesso compito al di fuori del database. ?

    
posta w_billa 11.10.2017 - 14:28
fonte

2 risposte

3

Se il calcolo si basa solo sul record di input e tenuto all'interno dello [stesso] record memorizzato e il calcolo è relativamente leggero, quindi crea una vista che si trova in cima al tavolo e calcolare i campi su richiesta. I calcoli complessi rallenteranno la visualizzazione verso una scansione inutilizzabile.

Se il calcolo è intenso, o time-sensitive (vale a dire, deve essere eseguito al momento della ricezione dei dati), quindi utilizzare i trigger per calcolare e memorizzare il risultato sarebbe migliore. Anche in questo caso, se il calcolo è intenso, considera di scrivere i dati non elaborati (più un timestamp "ricevuto" per quella sensibilità temporale) su una tabella ancillare e fai eseguire il sondaggio al servizio, esegui i calcoli e memorizza il risultato corretto.

    
risposta data 11.10.2017 - 15:28
fonte
4

Possono essere:

  • Nel database, utilizzando i trigger per applicare i calcoli.
  • Nel database, utilizzando le viste, si applicano naturalmente gli attributi di sola lettura. Inoltre ogni volta che il calcolo cambia, non è necessario aggiornare tutti i risultati memorizzati. Infine, molte persone cercano di evitare di avere troppi trigger in un database.
  • Nell'applicazione, se il modo di calcolare i dati potrebbe cambiare in base a determinati criteri, potrebbe essere più semplice gestirli a questo livello. Se lo fai ai livelli dell'applicazione devi assicurarti che il campo sia di sola lettura.

Come scegliere:

  • Se hai una sola applicazione in grado di scrivere questi dati calcolati, puoi andare per il modo di applicazione.
  • Se hai più applicazioni che potrebbero scrivere i dati calcolati, vai alla soluzione di database.
risposta data 11.10.2017 - 14:37
fonte

Leggi altre domande sui tag