Les applications en temps réel à fort trafic sont largement utilisées dans l'environnement de l'entreprise. Dans les applications en temps réel, les informations sont mises à votre disposition au moment où elles sont produites et tout retard dans cette opération peut entraîner de graves pertes financières. Le principal défi auquel sont confrontées ces applications en temps réel à fort trafic est d'être informé de tout changement dans l'ensemble de données afin que les vues correspondantes puissent être mises à jour.
Mais, ces applications en temps réel à fort trafic ne peuvent pas s'appuyer sur la base de données traditionnelle car elles ne prennent en charge que les requêtes sur les données résidentes et pour obtenir l'ensemble de données mis à jour, vous devez à nouveau exécuter la requête après un intervalle spécifique qui n'est pas instantané. De plus, cette interrogation périodique entraîne également des problèmes de performances et d'évolutivité, car vous effectuez des déplacements coûteux dans la base de données, même lorsqu'il n'y a aucun changement dans l'ensemble de données.
Dépendance SQL est fourni par Microsoft dans SQL Server et Oracle sous Windows le prend également en charge. SqlDependency vous permet de spécifier une instruction SQL, et SQL Server surveille cet ensemble de données dans la base de données pour tout ajout, mise à jour ou suppression et vous avertit lorsque cela se produit. Mais le problème avec SqlDependency est qu'une fois qu'il est déclenché, il est désenregistré de la base de données. Par conséquent, toutes les modifications futures de votre ensemble de données sont manquées et vous ne recevez pas de notification.
De plus, SqlDependency ne fournit pas de détails sur l'enregistrement où le changement s'est produit. Ainsi, pour trouver le changement dans l'ensemble de données, vous devez extraire à nouveau l'ensemble de données complet au lieu d'extraire directement uniquement l'enregistrement spécifique, qui est ajouté, mis à jour ou supprimé de l'ensemble de données. Et, bien sûr, ce n'est pas efficace.
En plus des limitations de SqlDependency, votre base de données n'est pas non plus en mesure de faire face aux exigences transactionnelles de ces applications en temps réel à fort trafic où des dizaines de milliers de requêtes sont exécutées chaque seconde et la base de données devient rapidement un goulot d'étranglement d'évolutivité. En effet, même si vous pouvez faire évoluer de manière linéaire votre niveau d'application en ajoutant plus de serveurs d'applications, vous ne pouvez pas faire de même avec votre serveur de base de données.
C'est là un cache distribué comme NCache intervient car il vous permet de mettre en cache les données et de réduire les déplacements coûteux de la base de données qui provoquent un goulot d'étranglement de l'évolutivité.
NCache dispose d'une puissante fonctionnalité de requête continue qui vous permet d'enregistrer une requête de type SQL avec le cluster de cache. Cette requête continue reste active dans le cluster de cache et s'il y a un changement dans l'ensemble de données de cette requête, alors NCache notifie votre application en temps réel. Cette approche de requête continue vous évite d'exécuter périodiquement la même requête coûteuse sur la base de données à interroger.
Voici un exemple de code pour NCache Requête continue :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
public void Main(string[] args) { … NCache.InitializeCache("myPartitionReplicaCache"); String query = "SELECT NCacheQuerySample.Business.Product WHERE this.ProductID > 100"; Hashtable values = new Hashtable(); values.Add("ProductID", 100); … onItemAdded = new ContinuousQueryItemAddedCallback(OnQueryItemAdded); onItemUpdated = new ContinuousQueryItemUpdatedCallback(OnQueryItemUpdated); onItemRemoved = new ContinuousQueryItemRemovedCallback(OnQueryItemRemoved); ContinuousQuery query = new ContinuousQuery(queryString, values); query.RegisterAddNotification(onItemAdded); query.RegisterUpdateNotification(onItemUpdated); query.RegisterRemoveNotification(onItemRemoved); _cache.RegisterCQ(query); … } //data set item is removed void OnQueryItemRemoved(string key){ … Console.WriteLine("Removed key: {0}", key); … } //data set item is updated void OnQueryItemUpdated(string key){ … Console.WriteLine("Updated key: {0}", key); … } //data set item is removed void OnQueryItemAdded(string key){ … Console.WriteLine("Added key: {0}", key); … } |
Et, contrairement à SqlDependency, NCache La requête continue reste active et n'est pas désenregistrée à chaque notification de modification. Ainsi, vos applications en temps réel à fort trafic continuent d'être notifiées lors de multiples modifications.
NCache La requête continue vous offre également la possibilité d'être notifié séparément sur AJOUTER, METTRE À JOUR et SUPPRIMER. Et, vous pouvez spécifier ces événements au moment de l'exécution même après avoir créé une requête continue, ce que SqlDependency ne vous permet pas de faire. Cela réduit également le trafic d'événements du cluster de cache vers votre application en temps réel.
En résumé, les NCache vous offre un très puissant Requête continue pilotée par événement qu'aucune autre base de données n'a. Et, NCache est également évolutif de manière linéaire pour vos applications en temps réel à fort trafic.
Alors, téléchargez une version d'essai complète de 60 jours de NCache Enterprise et essayez-le par vous-même.