Überblick über kontinuierliche Abfragen
NCache Bietet Continuous Query für die Laufzeitüberwachung und den Austausch von Daten im Zusammenhang mit beobachtbaren Datensätzen. Dadurch können Anwendungen über alle Änderungen benachrichtigt werden, die innerhalb der abgefragten Ergebnismenge im Cache auftreten.
Beispielsweise interessieren sich viele Kunden für eine Börsen-Webanwendung für die Aktienwerte der Unternehmen, an denen sie Anteile halten. Eine solche Anwendung muss die sehr häufige Änderung ihrer Sichtweise widerspiegeln, da sich die Aktienwerte für jedes Unternehmen schnell ändern. Hier erweisen sich kontinuierliche Abfragen als nützlich, denn statt die Aktienwerte aller Unternehmen anzuzeigen, können Sie den Cache nur nach den spezifischen Unternehmen abfragen, an denen die Kunden interessiert sind. Daher wird der Kunde über jede Änderung des Ergebnissatzes benachrichtigt Es und die Kundenansicht werden mit den neuesten Bestandswerten aktualisiert.
Ereignistypen
Änderungen im Ergebnissatz einer Abfrage können durch die folgenden Vorgänge ausgelöst werden:
Speichern: Durch das Hinzufügen eines Elements zum Cache oder das Aktualisieren eines vorhandenen Elements kann das Element zu jeder Abfrage hinzugefügt werden.
Aktualisierung: Alle vorhandenen Cache-Elemente werden aktualisiert, sie verbleiben jedoch im Abfrageergebnissatz.
Entfernen: Entfernen eines Elements aus dem Cache oder Aktualisieren eines vorhandenen zwischengespeicherten Elements, sodass das Element aus dem Abfrageergebnissatz entfernt wird. Elemente können auch aufgrund von Ablauf, Räumung, Abhängigkeitsänderung oder expliziter API-Entfernung entfernt werden.
Nehmen wir an, der Cache verfügt über eine Ergebnismenge für die Abfrage "SELECT * FROM FQN.Product WHERE Category = 'Beverages'"
.
„Key1“ ist im Cache zum Verfolgen vorhanden Produkt Klassenobjekt:
var product = new Product
{
ProductID = 1001,
ProductName = "Coffee",
UnitsAvailable = 55,
Category = "Food Items"
};
Dieses Element ist im Cache vorhanden, aber noch nicht im Ergebnissatz, da es nicht den Kriterien entspricht. Daher wird das Objekt jetzt aktualisiert und Kategorie wird geändert in "Getränke". Dies bedeutet, dass es die Kriterien erfüllt und nun zum Ergebnissatz hinzugefügt wird. Dadurch wird das ausgelöst
ItemAdded
Ereignistyp.
Das Objekt wird nun aktualisiert, um das zu ändern Produktname Wert "Kaffee" zu "Eiskaffee". Dies bedeutet, dass das Objekt so geändert wurde, dass die Kriterien davon nicht betroffen sind. Daher verbleibt es im Ergebnissatz und löst das aus
ItemUpdated
Ereignistyp.
Das Objekt wird nun erneut aktualisiert und die Kategorie Wert wird geändert von "Getränke" zu „Kalte Getränke“. Dies spiegelt wider, dass die Abfragekriterien nicht mehr erfüllt werden, sodass „Key1“ aus der Ergebnismenge, aber nicht aus dem Cache entfernt werden soll. Dies löst die aus
ItemRemoved
Ereignistyp.
Ereignisdatenfilter
Ereignisdatenfilter wird angegeben, um die Menge an Informationen zu quantifizieren, die bei der Ausführung eines Ereignisses zurückgegeben werden. Registrierte Ereignisse stellen dem Benutzer dann die auf diesen Datenfiltern basierenden Informationen bereit.
Andere
Dieser Filter gibt nur die Schlüssel zurück, die von der Operation in der Ereignisbenachrichtigung betroffen sind. Dies wird verwendet, wenn die Anwendung nur wissen möchte, welche Schlüssel betroffen waren, beispielsweise möchte eine E-Commerce-Site wissen, welche Produktschlüssel hinzugefügt wurden, und nicht die Werte selbst.
Metadaten
Mit diesem Filter werden die betroffenen Schlüssel zusammen mit ihren Cache-Element-Metadaten in der Ereignisbenachrichtigung zurückgegeben. Zu den zurückgegebenen Metadaten gehören die Gruppen, die Cache-Elementpriorität und der mit dem Element verknüpfte Ablaufwert. Beispielsweise möchte eine Anwendung wissen, welche Schlüssel aus dem Cache entfernt wurden und zu welchen Gruppen sie gehörten.
DatenMitMetadaten
Dieser Filter gibt die Schlüssel zusammen mit den zwischengespeicherten Elementen und den zugehörigen Metadaten zurück. Dies kann in Fällen verwendet werden, in denen eine Bankanwendung möglicherweise wissen muss, welche Kundeninformationen geändert wurden. Daher können mit diesem Filter Benachrichtigungen für Elementaktualisierungsvorgänge registriert werden, sodass der Elementschlüssel und das geänderte Element auch an den Benutzer zurückgegeben werden, sobald das Ereignis ausgelöst wird. Die Verwendung dieses Filters erspart Ihnen das erneute Abrufen der Artikel mit dem Get
API. Dieser Filter muss jedoch bei Bedarf verwendet werden, da es sich um eine netzwerkintensive Reise handelt.
Warnung
EventDataFilter
muss sorgfältig eingestellt werden, um eine unnötige Beanspruchung der Netzwerkbandbreite zu vermeiden.
Datenfreigabe für tragbare Datenstrukturen
Möglicherweise verfügen Sie über eine Anwendung mit .NET- und Java-Clients. Durch die Aktivierung des Datenübertragung Mit dieser Funktion in Ihrem Cluster-Cache können Sie dieselben Objekte für beide Clients indizieren, sogar mit derselben Abfrage. Für zwischengespeicherte Elemente, die von beiden Clients in einem registrierten Abfrageergebnissatz hinzugefügt, aktualisiert oder entfernt wurden, werden Benachrichtigungen an jeden Client gesendet, unabhängig von Java oder .NET.
Betriebskosten
Während Continuous Query für die Erstellung von Echtzeitanwendungen mit sich stark ändernden Betriebsdaten sehr hilfreich ist, ist für die Überwachung und Benachrichtigung von Clients ein gewisser zusätzlicher Verarbeitungsaufwand erforderlich, der Ressourcen verbraucht. Cache-Clients sind nicht betroffen, da dieser Prozess asynchron ist. Um diese Funktion effizient nutzen zu können, müssen Sie die Registrierung von Benachrichtigungen aufheben und auch die Registrierung der Abfrage aus Ihrem Cache aufheben, wenn Ihre Anwendungen keine Verfolgung von Abfrageergebnissätzen erfordern.
Siehe auch
Kontinuierliche Abfrage verwenden
SQL-Referenz für NCache
Ereignisbenachrichtigungen im Cache
Pub/Sub-Messaging