Stavo sviluppando questa applicazione su VB.net 2010
e SQL 2008
.
Desidero che i client vengano notificati per gli aggiornamenti sul db e l'applicazione utilizzata per controllare il db per le modifiche nel minuto specificato utilizzando un timer, che in realtà non è efficiente. Ho letto su query notification
, sqldependency
, service broker
, ma poi ho letto qualcosa che diceva che potrebbero non essere efficienti se ho 100 client e sto usando le notifiche di query per inviare notifiche alla mia applicazione.
Qualcuno potrebbe aiutare su cosa dovrei fare, e come posso farlo (sarebbe molto utile se gli esempi sono disponibili). Grazie in anticipo!Voglio il mio database (SQL) per notificare o inviare aggiornamenti all'applicazione client
risposta
La notifica di query invia a un servizio di Service Broker, non direttamente all'applicazione. Vedi The Mysterious Notification per capire come funziona. La tua applicazione è in attesa di notifiche pubblicando una dichiarazione . Il che implica che ciascuno dei 100 client occupa un thread di lavoro di SQL Server (che sono limitati, vedere l'opzione max worker threads
). Ho visto questo funzionare in produzione con +1000 client (dopo aver sollevato l'opzione max worker threads) ma vorrei consigliare contro it.
La mia raccomandazione sarebbe quella di avere il monitoraggio del servizio uno per la modifica, utilizzando SqlDependency/QueryNotifications. Questo servizio quindi invierà notifiche, utilizzando WCF, ad esempio, a tutte le app in esecuzione. Sottoscrivere modifiche generiche (the table Foo was changed
), non specifiche (the row x in table Foo was inserted
).
Come regola generale, SqlDependency/Query Notifications può solo informare l'utente che i dati sono stati modificati, ma non spinge i nuovi dati . L'applicazione deve aggiornare i propri set di dati locali eseguendo nuovamente le query, una volta notificate.
Prestare attenzione all'utilizzo della classe SqlDependency - ha il problems con perdite di memoria. Hovewer, puoi utilizzare una realizzazione open source della classe SqlDependency - SqlDependencyEx. Utilizza un trigger del database e una notifica nativa di Service Broker per ricevere eventi relativi alle modifiche della tabella. Questo è un esempio di utilizzo:
int changesReceived = 0;
using (SqlDependencyEx sqlDependency = new SqlDependencyEx(
TEST_CONNECTION_STRING, TEST_DATABASE_NAME, TEST_TABLE_NAME))
{
sqlDependency.TableChanged += (o, e) => changesReceived++;
sqlDependency.Start();
// Make table changes.
MakeTableInsertDeleteChanges(changesCount);
// Wait a little bit to receive all changes.
Thread.Sleep(1000);
}
Assert.AreEqual(changesCount, changesReceived);
Con SqlDependecyEx voi sono in grado di monitorare solo UPDATE, DELETE e INSERT evitando. Spero che questo ti aiuti.
- 1. Socket.io per il controllo degli aggiornamenti dal database
- 2. Applicazione database client-server: come notificare ai clienti che i dati sono stati modificati?
- 3. Non voglio l'animazione negli aggiornamenti iniziali, il blocco degli aggiornamenti finali per uitableview?
- 4. Come abilitare gli aggiornamenti di heap sul mio client Android
- 5. Rest Server o API per testare il mio client Restful?
- 6. database di polling SignalR per gli aggiornamenti
- 7. Notifica il servizio WCF quando il database viene aggiornato
- 8. Forzare il socket client SSL per inviare il certificato
- 9. SQL Profiler non mostra inserimenti/eliminazioni/aggiornamenti
- 10. Database leggero (SQL o NoSQL)
- 11. Come forzare il client WCF a inviare un certificato client?
- 12. Come posso salvare il mio oggetto nel mio database in LINQ a SQL?
- 13. Come posso inviare aggiornamenti dei pacchetti?
- 14. Come gestire gli aggiornamenti simultanei nei database?
- 15. Il modo migliore per esportare il database SQL Server in sqlite (o SQL Server Compact)
- 16. Voglio collegare database di OpenShift mongodb dai miei strumenti client locali
- 17. kibana per database sql
- 18. MVC in Android: applicazione o servizio per aggiornamenti asincroni?
- 19. INSERT SQL veloce senza AGGIORNAMENTI
- 20. Voglio inviare una notifica dal mio iPhone a un altro iPhone
- 21. Si consiglia di utilizzare il Database SQL Web per l'archiviazione sul lato client
- 22. Il client (app per desktop) recupera dati ... ma voglio che il server (app Web) invii i dati
- 23. Gestione errori SQL Server: eccezioni e contratto client-database
- 24. Come inviare il ping utilizzando il client Eclipse Paho MQTT?
- 25. Perché il mio SubmitChanges() non funziona su LINQ-to-SQL?
- 26. notificare l'ascoltatore all'interno o all'esterno della sincronizzazione interna
- 27. Devo installare SQL Server su ciascun client se il mio software lo usa?
- 28. Utilizzo di WebDeploy per distribuire gli aggiornamenti del database
- 29. database/sql Tx - rilevamento Commit o rollback
- 30. SQL: come posso ottenere il numero di query eseguite per database o ora o ...?