Implementierung der dynamischen kompakten Serialisierung
NCache speichert Anwendungsdaten in serialisierter Form – sie werden auf dem Cache-Client serialisiert, bevor sie dem Cache hinzugefügt werden. Daher müssen die Daten, die Sie dem Cache hinzufügen, auch als serialisierbar markiert sein. Es unterstützt die native binäre Serialisierung, JSON-Informationen werden nicht im Netzwerk übertragen und die Objektgröße im Netzwerk wird reduziert. Mit abnehmender Objektgröße werden Netzwerkfahrten schneller und schließlich sinken die Kosten, wodurch sich die Gesamtleistung der Anwendung erhöht.
Die kompakte Serialisierung ist auch eine binäre Serialisierung, die folgende Vorteile bietet:
Kompakte Datengröße
In NCache Binärdaten, die Größe des serialisierten Objekts ist kompakt. In bestimmten Szenarien kann die Datengröße zehnmal kleiner sein als die der nativen Serialisierung. Kleinere serialisierte Objekte benötigen weniger Zeit für die Übertragung im Netzwerk, was zu einem höheren Durchsatz führt. Dies trägt auch dazu bei, den Speicherverbrauch auf dem Cache-Server zu reduzieren. Auf diese Weise, NCache erzielt eine bessere Leistung – reduziert Zeit und Kosten. Die geringe Objektgröße und der schnelle Netzwerkverkehr erhöhen die Anwendungsleistung.
Schneller als native Serialisierung
Die kompakte Serialisierung ist schneller als die native Serialisierung, da sie nicht so stark auf Reflektion angewiesen ist wie die native Serialisierung. Die native Serialisierung verwendet Reflektion für Attributinformationen. Diese Reflexion wird vermieden NCacheist die kompakte Serialisierung. Typinformationen für kompakte Typen werden nur einmal geladen, wenn der Cache initialisiert wird, was den Overhead reduziert, der bei der nativen Serialisierung entsteht. Benchmarks haben gezeigt, dass sie in bestimmten Anwendungsfällen 5 bis 10 Mal schneller ist als die native Serialisierung.
Keine Codeänderung
Es ist keine Codeänderung erforderlich, um eine Klasse kompakt serialisierbar zu machen. Der einzige erforderliche Schritt besteht darin, Ihre Klassen über Verwaltungstools (die NCache Management Center oder seine Befehlszeilentools).
Selektive Serialisierung: NCache ermöglicht selektive Serialisierung; Sie können Datenelemente einer Klasse auswählen, die Sie als nicht serialisierbar markieren möchten. Das ausgeschlossene Attribut eines zwischengespeicherten Objekts ist entweder null oder hat einen Standardwert (falls zugewiesen). Diese Funktion ist in einem Szenario nützlich, in dem für bestimmte Attribute kein Bedarf für die Zwischenspeicherung besteht, beispielsweise Verbindungsobjekte für die Datenbank. Durch diese selektive Serialisierung wird der Prozess noch effizienter und kompakter.
Granulare Kontrolle über die kompakte Serialisierung: Dafür können Sie implementieren
ICompactSerializable
. Diese Schnittstelle bietet Ihnen eine detailliertere Kontrolle über die kompakte Serialisierung. Sie können entsprechend Ihren Geschäftsanforderungen steuern, welches Datenelement serialisiert und welches ausgeschlossen werden soll.Unterstützung für native Serialisierung: NCache unterstützt native binäre Serialisierung. Daten werden in serialisierter Form im Cache gespeichert. Die native Serialisierung des Clients wird sowohl für .NET- als auch für Java-Clients unterstützt NCache.
Implementieren der kompakten Serialisierung für den Objekttyp
Um die kompakte Serialisierung zu verwenden, müssen Objekttypen, die kompakt serialisiert werden sollen, über konfiguriert werden NCache Management Center. NCache Verwaltet intern die Serialisierung/Deserialisierung registrierter Klassen und der Benutzer muss nicht explizit dafür programmieren.
Wichtig
Klassenattribute müssen in derselben Reihenfolge deserialisiert werden, in der sie serialisiert wurden, andernfalls kann der serialisierte Stream nicht deserialisiert werden.
Aber, NCache ermöglicht auch die explizite Implementierung des ICompactSerializable
Schnittstelle.
Um diese Schnittstelle zu implementieren, muss die DemoObject-Klasse implementiert werden Serialize
und Deserialize
Methoden, die von aufgerufen werden NCache beim Serialisieren/Deserialisieren dieses Objekts. Nachfolgend finden Sie einen Beispielcode zur Implementierung dieser Schnittstelle:
Wichtig
Wenn Sie eine Klasse für die kompakte Serialisierung markieren möchten, die einen parametrisierten Konstruktor erfordert, stellen Sie sicher, dass die Klasse einen Standardkonstruktor enthält.
Voraussetzungen:
- Lernen Sie die Standardvoraussetzungen kennen, die für die Arbeit mit allen erforderlich sind NCache serverseitige Features entnehmen Sie bitte der angegebenen Seite Serverseitige API-Voraussetzungen.
- Der Cache muss ausgeführt werden.
- Der Antrag muss mit dem Cache verbunden bevor Sie die Operation durchführen.
- Einzelheiten zur API finden Sie unter: ICompactSerializable, Serialisieren, Deserialisieren, CheckIfSerializable, IGenericTypeProvider.
DemoObject erstellen
public class DemoObject : ICompactSerializable
{
private string _attribute1;
private int _attribute2;
private bool _attribute3;
public DemoObject()
{ }
public DemoObject(string attrib1, int attrib2, bool attrib3)
{
_attribute1 = attrib1;
_attribute2 = attrib2;
_attribute3 = attrib3;
}
#region ICompactSerializable Members
public void Deserialize(CompactReader reader) {
_attribute1 = reader.ReadObject() as string;
_attribute2 = reader.ReadInt32();
_attribute3 = reader.ReadBoolean();
}
public void Serialize(CompactWriter writer){
writer.WriteObject(_attribute1);
writer.Write(_attribute2);
writer.Write(_attribute3);
}
#endregion
}
Implementieren eines generischen Typhandlers
NCache Ermöglicht auch die Registrierung generischer Typen in Compact Serialization. Hierzu muss jeder Typ über das registriert werden NCache Management Center. Es gibt eine andere Möglichkeit, generische Kompakttypen über den „Generic Type Handler“ zu registrieren. Mit dem Generic Type Handler kann der Benutzer alle generischen Typen auf einmal hinzufügen, indem er den implementiert IGenericTypeProvider
Schnittstelle. Dies spart viel Zeit und Aufwand, wenn der Benutzer eine große Anzahl von Typen registrieren möchte.
Wichtig
Um die Schnittstelle zu nutzen, fügen Sie den folgenden Namespace in Ihre Anwendung ein: Alachisoft.NCache.Runtime.GenericTypesProvider
Um dies zu implementieren, muss der Benutzer Folgendes implementieren GetGenericTypes
Methode und geben Sie die gewünschten generischen Typen in der zurück Type
Array. Stellen Sie anschließend diese Klassenassembly für die bereit NCache Management Centerdem „Vermischten Geschmack“. Seine NCache Das Management Center registriert alle Typen, die im enthalten sind Type
Array. Nachfolgend finden Sie einen Beispielcode:
Wichtig
Wenn Sie eine Klasse für die kompakte Serialisierung markieren möchten, die einen parametrisierten Konstruktor erfordert, stellen Sie sicher, dass die Klasse einen Standardkonstruktor enthält.
public class CustomGenericType<T, K, V>
{ }
public class SetGenerics : IGenericTypeProvider
{
Type[] types = new Type[6];
Type[] IGenericTypeProvider.GetGenericTypes()
{
types[0] = typeof(Dictionary<string, Customer>);
types[1] = typeof(List<int>);
types[2] = typeof(CustomGenericType<Employee, Product, Customer>);
types[3] = typeof(CustomGenericType<Employee, Product, int>);
types[4] = typeof(CustomGenericType<Employee, string, byte>);
types[5] = typeof(CustomGenericType<string, Customer, bool>);
return types;
}
public bool CheckIfSerializable(Type type, FieldInfo fieldInfo)
{
// Implement logic
}
}
Problemlösung
Kompakte Serialisierungsausnahme
Auf dem Knoten, auf dem Compact Serializable-Typen nicht registriert sind, kann eine Serialisierungsausnahme auftreten.
Workaround
Registrieren Sie Compact Serializable Typen auf allen Knoten im Cluster.
Siehe auch
.NETZ: Alachisoft.NCache.Laufzeit Namespace.