Nous avons une application .NET (C#) qui exécute environ 10 à 30 instructions d'insertion dans une base de données SQL Server toutes les secondes. Lorsque l'application a été conçue, la ou les applications exécutant les insertions étaient sur le site avec la base de données Sql Server, de sorte que la latence du réseau n'était pas vraiment prise en compte. Bien au moins la latence du réseau comme vous obtenez sur un WAN ou sur Internet n'a pas été comptabilisée.Comment gérer efficacement les opérations de base de données séquentielles sur un réseau étendu
L'application exécute ces insertions de manière séquentielle. Ainsi, si les 10 à 30 inserts prennent plus d'une seconde, l'application commence à se mettre en retard. Le système de mise en mémoire tampon que nous avons mis en place ne gère que le «hiccup» occasionnel dans la latence du réseau, en supposant que la latence du réseau finira par disparaître et l'application aura une chance de rattraper son retard.
Dans le cas où la latence du réseau est constamment suffisamment élevée pour que les 10 à 30 insertions prennent toujours plus d'une seconde, l'application devient bien sûr inutilisable. Par souci de cette question, supposons simplement qu'il n'y a rien que nous puissions faire pour réduire la latence du réseau, ou augmenter les performances du serveur SQL, ou quoi que ce soit de ce genre et que les commandes d'insertion 10-30 vont toujours prendre plus d'une seconde et faire en sorte que l'application arrive à un point de défaillance.
Existe-t-il un bon moyen, en .NET ou sur le serveur Sql lui-même, d'exécuter ces commandes en parallèle afin d'utiliser la bande passante pour compenser la latence? Je me rends compte que nous pourrions écrire notre propre système pour gérer tout cela, mais il semble que ce serait un problème commun avec les serveurs de base de données cloud déjà. J'ai lu sur le traitement par lots et l'utilisation des transactions pour envoyer plus de commandes à la fois sur le tuyau, mais même en faisant cela, il semble que cela finirait par frapper un mur si la latence du réseau était suffisamment élevée.
Nous souhaitons que l'application tolère une latence de plus en plus élevée, mais ne soit pas trop loin derrière les insertions.
Existe-t-il de toute façon que vous pouvez exécuter SQLExpress localement et utiliser la réplication SQL pour gérer la synchronisation pour vous? –
Malheureusement non, nous avons d'abord pensé à le faire au début. Nous avons une contrainte de sécurité que les données ne peuvent pas résider localement sur le disque et doivent être transférées directement de la mémoire. – Mike