Il modo migliore per ottenere notifiche push al server dal database ms sql

2

Ho trovato parzialmente la soluzione alla mia domanda, ma non sono davvero soddisfatto del risultato.

La mia applicazione è composta da ASP.NET MVC + MS SQL Server.

Il caso è il seguente:

  1. L'app esterna salva periodicamente i dati nel database MS SQL. A intervalli di 0,1 secondi possono essere salvati 20-100 record.
  2. MS SQL deve essere sottoposto a polling da back-end o notifiche push dopo ogni salvataggio per aggiornare per esempio il contatore di elementi salvati.
  3. Il backend invierà le notifiche all'interfaccia utente (ciò avverrà utilizzando SignalR)

Ho seguito questo tutorial link per impostarlo up.

SqlDependency con il servizio broker viene utilizzato per ottenere notifiche push dall'evento OnChange di attivazione SQL. Il problema è che questa soluzione è molto lenta. Ho un record salvato ogni secondo su un piccolo database e l'evento è licenziato con ritardi piuttosto grandi.

Esiste un'altra tecnologia per ottenere modifiche ai dati da SQL? O forse la soluzione che sto usando richiede un qualche tipo di ottimizzazione?

    
posta Mateusz Migała 19.01.2016 - 09:51
fonte

2 risposte

2

Stai provando a risolvere un problema concettuale con uno tecnologico, nel senso che devi sapere quando il database è stato scritto per aggiornare il tuo programma, e sei dipendente da questa SqlDipendenza per ottenere ciò. Non fraintendetemi, SqlDependency è un eccellente adattamento in alcune circostanze, senza dubbio, ma quasi certamente in nessuna circostanza potrebbe funzionare bene quando vengono eseguiti gli inserimenti di massa sul server.

O la libreria ha una funzione che disabilita l'attivazione dell'evento dopo il primo (o anche meglio, dopo l'ultimo con qualche piccolo ritardo), o si avrà una soluzione che non scala bene.

Offro una soluzione alternativa: quando l'attività di backend inizia a scrivere, quando termina la scrittura e per ogni secondo durante la scrittura, aggiorna un record che indica che il database è stato scritto da tale attività.

L'applicazione esegue il polling del database per quel valore ogni tanto (ad esempio ogni 5 secondi) e se ha l'indicatore a cui è stato scritto, si esegue un aggiornamento e si ripristina il flag. Il prossimo controllo eseguito avviene solo un secondo dopo l'ultimo in questo caso, quindi nel caso di modifiche al database, verrà aggiornato più frequentemente.

Se devi essere più preciso con i tuoi assegni, puoi controllare più frequentemente come desiderato. Ciò che è importante è che il tuo programma esegue solo i controlli e gli aggiornamenti solo il tempo necessario e non per ogni singolo record aggiunto. Ciò significa che quando vengono aggiunti 100 record, non è necessario aggiornare i dati del programma 100 volte. Se effettivamente occorrono 0,1 secondi per 20-100 record, probabilmente aggiornerai 100 record al massimo 5 volte.

    
risposta data 19.01.2016 - 17:28
fonte
1

Dai un'occhiata al link . È possibile ricevere notifiche da SQL Server contenenti informazioni sui record cancellati o aggiornati inseriti.

    
risposta data 19.10.2016 - 20:04
fonte

Leggi altre domande sui tag