Als Entwickler muss es Ihnen irgendwann schwer gefallen sein, die Kommunikation zwischen Client und Server zu beschleunigen. Netzwerk-Overheads, Verzögerungen und Latenz waren schon immer ein großes Problem und alles läuft auf eine einzige Frage hinaus: Wie können wir die Anfragen beschleunigen? Im Laufe der Zeit werden unzählige Lösungen gefunden, aber die Antwort, auf die wir uns hier konzentrieren, ist Komprimierung und kompakte Serialisierung. Gut für dich, NCache bietet effiziente Komprimierungs- und dynamische kompakte Serialisierungstechniken (zu Ihrer Information, beides sind verschiedene Dinge). In diesem Blog werden wir sehen, welchen Bedarf beides hat und wie sie genutzt werden können.
Dynamische kompakte Serialisierung
NCache bietet Unterstützung für das native .NET-Serialisierungsformat, stellt jedoch auch ein eigenes Serialisierungsframework namens „.net“ bereit Kompakte Serialisierung. Kompakte Serialisierung ist jedoch auch binäre Serialisierung NCache bietet mit diesem Serialisierungsframework viel mehr Flexibilität. Durch die kompakte Serialisierung wird nicht die Größe der gesamten Daten reduziert, sondern lediglich die Größe der Daten, die über das Netzwerk übertragen werden. Es hilft Ihnen, eine bessere Funktionalität zu erreichen, da die Netzwerkfahrten schneller sind und die Kosten sinken.
Schauen wir uns nun die Vorteile der dynamischen kompakten Serialisierung an und wie sie flexibler ist als die native .NET-Serialisierung:
Kompakte Datengröße
In NCache, binär serialisierte Daten haben eine kompakte Größe. Bei der Serialisierung werden diese Objekte manchmal zehnmal kleiner als ihre tatsächliche Datengröße. Je kleiner die Größe, desto schneller werden die Daten über das Netzwerk übertragen und desto höher ist die Leistung. Wenn Daten außerdem kompakter sind, nehmen sie weniger Platz auf dem Cache-Server ein, wodurch sie auch speichereffizient sind.
Erfordert keine Codeänderung
Um Ihre Daten kompakt und serialisiert zu machen, ist keine Codeänderung erforderlich. Sie müssen lediglich die serialisierbaren Daten mithilfe von Verwaltungstools auswählen (NCache Webmanager bzw NCache PowerShell-Tools). NCache kümmert sich intern um die gesamte Serialisierung der Daten, daher ist keine Codeänderung erforderlich.
Selektive Serialisierung
Selektive Serialisierung bedeutet, dass der Benutzer die volle Kontrolle darüber hat, welche Daten serialisiert werden müssen und welche Daten als nicht serialisiert markiert werden müssen. Innerhalb einer Klasse können Sie Attribute auswählen, die serialisiert werden sollen. Nehmen wir beispielsweise an, dass Sie die Datenbankverbindungsobjekte als nicht serialisiert belassen möchten. Sie können einfach andere Attribute serialisieren und die gewünschten Daten nicht serialisieren.
Um eine detaillierte Kontrolle darüber zu erhalten, welche Daten serialisiert werden sollen, ist die Schnittstelle ICompactSerializable implementiert. Dies gibt Ihnen eine umfassende Kontrolle über die Daten und eine selektive Serialisierung. Die benutzerdefinierte Klasse benötigt die Serialisierungs-/Deserialisierungsmethoden, die von aufgerufen werden NCache um die Objekte zu serialisieren/deserialisieren. Schauen Sie sich das folgende Codebeispiel an, um zu sehen, wie die ICompactSerializable-Schnittstelle implementiert wird:
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 |
public class Customers : ICompactSerializable { private string _name; private int _id; private string _company; public Customers() { } public Customers(string customerName, int customerID, string companyName) { _name = customerName; _id = customerID; _company = companyName; } #region ICompactSerializable Members public void Deserialize(CompactReader reader) { _name = reader.ReadObject() as string; _id = reader.ReadInt32(); _company = reader.ReadObject() as string; } public void Serialize(CompactWriter writer){ writer.WriteObject(_name); writer.Write(_id); writer.Write(_company); } #endregion } |
NCache Ermöglicht auch die Registrierung generischer Klassen für die kompakte Serialisierung. Es gibt zwei Möglichkeiten, generische Klassen zu registrieren, nämlich entweder über NCache Web Manager oder über die IGenericTypeProvider-Schnittstelle.
Schritt 1: Durch NCache Web Manager
Sie können generische Klassen mit registrieren NCache Web Manager wie unten gezeigt:
Schritt 2: Über IGenericTypeProvider
Um dies zu implementieren, muss der Benutzer die GetGenericTypes-Methode implementieren und die gewünschten generischen Typen als Array zurückgeben.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public class CustomerPurchaseDetails<T, K, V> { // implement logic } public class CustomerPurchaseImpl : IGenericTypeProvider { Type[] types = new Type[6]; Type[] IGenericTypeProvider.GetGenericTypes() { types[0] = typeof(Dictionary<string, Customer>); types[1] = typeof(List); types[2] = typeof(CustomerPurchaseDetails<Order, Product, Customer>); types[3] = typeof(CustomerPurchaseDetails<Order, Product, int>); types[4] = typeof(CustomerPurchaseDetails<Order, string, byte>); types[5] = typeof(CustomerPurchaseDetails<string, Customer, bool>); return types; } public bool CheckIfSerializable(Type type, FieldInfo fieldInfo) { // implement logic } } |
Stellen Sie anschließend diese Klassenassembly bereit NCache Web-Manager. NCache Web Manager registriert alle im Typ-Array ausgefüllten Typen.
Kompakte Serialisierungsdokumente Generische Klassen registrieren Registrieren Sie nicht generische Klassen
Kompression
Eine weitere effektive Technik von NCache is Datenkompression Dabei werden Daten in komprimierter Form zum Cache hinzugefügt. Der größte Vorteil besteht darin, dass komprimierte Daten weniger Platz beanspruchen als unkomprimierte Daten und Sie viel Speicherplatz sparen. Es reduziert die Netzwerkkosten Ihrer Lese-/Schreibvorgänge. Sie sparen also effizient Netzwerkkosten, Zeit und Speicher, indem Sie einfach die Komprimierung verwenden.
NCache verwendet die GZip-Komprimierung, um die Daten zu komprimieren. Sie legen einen bestimmten Schwellenwert fest und bei aktivierter Komprimierung werden alle Elemente, die den Schwellenwert überschreiten, komprimiert. Wir haben die komprimierten und unkomprimierten Daten sowie die jeweilige Speichernutzung verglichen. Die Ergebnisse können Sie in der Grafik unten sehen. Die blaue Linie zeigt den Speicherverbrauch bei komprimierten Daten und die orangefarbene zeigt die Größe des Caches bei unkomprimierten Daten:
Die Komprimierung erfolgt normalerweise sowohl auf der Clientseite als auch auf der Serverseite, sofern die Komprimierung aktiviert ist beide der Server- und der Clientseite.
- Clientseitige Komprimierung wird auf alle Elemente angewendet, die der Client vom Server anfordert. Der Server komprimiert die Daten und sendet sie an den Client. Der Client dekomprimiert sie beim Empfang der komprimierten Daten. Ebenso werden die Daten für Elemente, die den Schwellenwert überschreiten und vom Client an den Remote-Server gesendet werden, in komprimierter Form gesendet.
- Serverseitige Komprimierung tritt bei allen Elementen auf, die den Schwellenwert überschreiten und von serverseitigen Funktionen wie dem Cache-Startup-Loader aus der Datenquelle geladen werden. Diese Elemente werden dann komprimiert NCache Server, nachdem sie von der Datenquelle empfangen wurden.
Komprimierung in NCache Docs Komprimierung aktivieren/deaktivieren
Um die Komprimierung zu nutzen, müssen Sie lediglich die Komprimierung aktivieren. Dafür gibt es zwei effektive Möglichkeiten.
Methode 1: Verwenden des NCahe Web Managers
Das folgende GIF zeigt Ihnen, wie Sie die Komprimierung aktivieren NCache Webmanager:
Methode 2: Verwenden der Konfiguration
Eine Konfigurationsdatei, die in installiert ist NCache Installationsverzeichnis mit dem Namen config.ncconf enthält ein Tag, das die Komprimierung für Sie aktiviert und deaktiviert. Lassen Sie mich Ihnen zeigen, wie:
1 |
<compression enabled="true" threshold="500kb"/> |
Das aktivierte Tag wird auf „true“ gesetzt, um die Komprimierung zu aktivieren, und auf „false“, falls Sie die Komprimierung deaktivieren möchten. Es stellt Ihnen auch das Schwellenwert-Tag zur Verfügung und die Daten über dem angegebenen Wert werden nur komprimiert.
Zusammenfassung
Zusammenfassend lässt sich sagen, dass Komprimierung und kompakte Serialisierung sehr effektive Techniken zur Verbesserung der Leistung Ihrer Anwendung sind. Es ist auch sehr einfach, diese Funktionen zu aktivieren NCache Management-Tools. NCache hilft Ihnen dabei, all dies ohne Codeänderung zu erreichen. Bitte beziehen Sie sich auf NCache Dokumentation, um andere coole Dinge auszuprobieren NCache Funktionen.