Heutzutage wird verteilter Cache häufig verwendet, um Skalierbarkeit und Leistung in Anwendungen mit hohem Datenverkehr zu erreichen. Der verteilte Cache entlastet Ihre Datenbankserver, indem er zwischengespeicherte Daten aus dem In-Memory-Speicher bereitstellt. Darüber hinaus bieten Ihnen einige verteilte Caches auch SQL-ähnliche Abfragefunktionen, mit denen Sie Ihren verteilten Cache problemlos auf die gleiche Weise abfragen können, wie Sie Ihre Datenbank abfragen, d. h “SELECT employee WHERE employee.city=‘New York’”
Erstens bieten die meisten verteilten Caches nicht einmal eine Bereitstellung SQL-ähnliche Abfragefunktionen. Selbst einige wenige, die dies anbieten, unterstützen es nur sehr begrenzt. Sie ermöglichen lediglich die Suche im verteilten Cache anhand einfacher Kriterien. Dagegen gibt es mehrere Szenarien, in denen Sie das Ergebnis basierend auf Aggregatfunktionen finden müssen, z “SELECT COUNT(employee) WHERE salary > 1000”
or “SELECT SUM(salary) WHERE employee.city = ‘New York’”
. Um dies zu erreichen, müssen Sie zunächst den verteilten Cache abfragen und dann die Aggregatfunktion für die abgerufenen Cache-Daten berechnen.
NCache Details NCache Docs SQL-Abfrage in NCache Docs
Warum NCache um den verteilten Cache mithilfe von Aggregatfunktionen abzufragen
Dieser Ansatz hat zwei große Nachteile. Erstens müssen Sie eine Abfrage im verteilten Cache ausführen, was das Abrufen aller Daten vom verteilten Cache zum Cache-Client umfasst. Diese Daten können von MB bis GB variieren und dieser Vorgang wird teurer, wenn Sie auch für die verbrauchte Netzwerkbandbreite bezahlen. Darüber hinaus benötigen Sie diese Daten meist nicht mehr, nachdem Sie die Berechnungen der Aggregatfunktionen abgeschlossen haben.
Der zweite Nachteil besteht darin, dass eine benutzerdefinierte Programmierung zur Berechnung der Aggregatfunktion erforderlich ist. Dadurch entstehen zusätzliche Arbeitsstunden, und dennoch können die meisten komplexen Szenarien nicht abgedeckt werden. Es wäre viel schöner, wenn Sie die Anwendung weiterhin für den Zweck entwickeln könnten, für den sie erstellt wird, und sich nicht selbst um das Entwerfen und Implementieren dieser zusätzlichen Funktionen kümmern müssten.
Dies sind die Gründe dafür NCache bietet Ihnen die Flexibilität, verteilten Cache mithilfe von Aggregatfunktionen wie COUNT, SUM, MIN, MAX und AVG als Teil seiner Object Query Language (OQL) abzufragen. Benutzen NCache Mit den OQL-Aggregatfunktionen können Sie die erforderlichen Aggregatberechnungen problemlos innerhalb der verteilten Cache-Domäne durchführen. Dieser Ansatz vermeidet nicht nur den Netzwerkverkehr, sondern bietet Ihnen auch eine wesentlich bessere Leistung bei der Berechnung von Aggregatfunktionen. Dies liegt daran, dass alle Auswahlen und Berechnungen innerhalb der verteilten Cache-Domäne erfolgen und keine Netzwerkfahrten erforderlich sind.
Hier ist das Codebeispiel zum Durchsuchen NCache Verwendung von OQL-Aggregatabfragen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public void Main(string[] args) { ... NCache.InitializeCache("myPartitionReplicaCache"); String query = "SELECT COUNT(Business.Product) WHERE this.ProductID > ? AND this.Price < ?"; Hashtable param = new Hashtable(); param.Add("ProductID", 100); param.Add("Price", 50); // Fetch the cache items matching this search criteria IDictionary searchResults = _cache.SearchEntries(query, values); ... } |
Für eine kürzere Abfrageausführungszeit NCache führt die SQL-ähnliche Abfrage parallel aus, indem es sie an alle Cache-Server verteilt, genau wie der Map-Reduce-Mechanismus. Darüber hinaus können Sie verwenden NCache OQL-Aggregatabfragen in .NET- und Java-Anwendungen.
Fazit!
Zusammenfassend, NCache bietet Ihnen nicht nur die Skalierbarkeit und Leistung, sondern auch die Flexibilität, den verteilten Cache mithilfe einer SQL-ähnlichen Aggregatfunktion zu durchsuchen.