Implementazione della serializzazione dinamica compatta
NCache stores application data in serialized form - it is serialized on the cache client before being added to the cache. Therefore, the data you add to the cache must also be marked as serializable. It supports native binary serialization and JSON's information does not travel on the network, and the object size on the network is reduced. As the object size decreases, network trips become faster, and eventually, the cost decreases, hence, increasing the overall application performance.
La serializzazione compatta è anche serializzazione binaria che presenta i seguenti vantaggi:
Dimensioni compatte dei dati
In NCache dati binari, la dimensione dell'oggetto serializzato è compatta. In alcuni scenari, la dimensione dei dati potrebbe essere 10 volte inferiore a quella della serializzazione nativa. Gli oggetti serializzati più piccoli impiegano meno tempo per viaggiare sulla rete, con conseguente throughput più elevato. Ciò aiuta anche a ridurre il consumo di memoria sul server cache. In questa maniera, NCache raggiunge prestazioni migliori, riducendo tempi e costi. Le dimensioni ridotte degli oggetti e il traffico di rete veloce aumentano le prestazioni dell'applicazione.
Più veloce della serializzazione nativa
La serializzazione compatta è più veloce della serializzazione nativa, poiché non si basa tanto sulla riflessione quanto la serializzazione nativa. La serializzazione nativa utilizza la riflessione per le informazioni sugli attributi. Questa riflessione viene evitata NCacheLa serializzazione compatta di . Le informazioni sui tipi compatti vengono caricate solo una volta quando la cache viene inizializzata, riducendo così il sovraccarico dovuto all'utilizzo della serializzazione nativa. I benchmark hanno dimostrato che in alcuni casi utilizzati è 5~10 volte più veloce della serializzazione nativa.
Nessuna modifica al codice
Non è necessaria alcuna modifica del codice per rendere serializzabile una classe compatta. L'unico passaggio richiesto è configurare le proprie classi tramite gli strumenti di gestione (the NCache Management Center o i suoi strumenti da riga di comando).
Serializzazione selettiva: NCache consente la serializzazione selettiva; è possibile selezionare i membri dati di una classe che si desidera contrassegnare come non serializzabili. L'attributo escluso di qualsiasi oggetto memorizzato nella cache sarà nullo o avrà un valore predefinito (se assegnato). Questa funzionalità è utile in uno scenario in cui, per determinati attributi, non è necessaria la memorizzazione nella cache, ad esempio, degli oggetti connessioni per il database. Grazie a questa serializzazione selettiva, il processo diventa ancora più efficiente e compatto.
Controllo granulare sulla serializzazione compatta: Per questo, puoi implementare
ICompactSerializable
. Questa interfaccia offre un controllo più preciso sulla serializzazione compatta, puoi controllare quale membro dati serializzare e quale escludere in base alle esigenze aziendali.Supporto per la serializzazione nativa: NCache supporta la serializzazione binaria nativa. I dati vengono archiviati in formato serializzato nella cache, la serializzazione nativa del client è supportata sia per i client .NET che per quelli Java NCache.
Implementazione della serializzazione compatta per il tipo di oggetto
Per utilizzare la serializzazione compatta, i tipi di oggetto che devono essere serializzati compatti devono essere configurati tramite NCache Centro di gestione. NCache gestisce internamente la serializzazione/deserializzazione delle classi registrate e l'utente non ha bisogno di codificarlo esplicitamente.
Consigli
Gli attributi della classe devono essere deserializzati nello stesso ordine in cui sono stati serializzati, altrimenti il flusso serializzato non potrà essere deserializzato.
Però, i NCache consente anche l'implementazione esplicita del ICompactSerializable
interfaccia.
Per implementare questa interfaccia, è necessario implementare la classe DemoObject Serialize
ed Deserialize
metodi che verranno chiamati da NCache durante la serializzazione/deserializzazione di questo oggetto. Di seguito è riportato un codice di esempio per implementare questa interfaccia:
Consigli
Se vuoi contrassegnare una classe per la serializzazione compatta che richiede un costruttore con parametri, assicurati che la classe contenga un costruttore predefinito.
Prerequisiti
- Per conoscere i prerequisiti standard richiesti per lavorare con all NCache caratteristiche lato server si prega di fare riferimento alla pagina indicata su Prerequisiti API lato server.
- La cache deve essere in esecuzione.
- L'applicazione deve essere connesso alla cache prima di eseguire l'operazione.
- Per i dettagli dell'API fare riferimento a: ICompactSerializzabile, serializzare, Deserializza, Seleziona se serializzabile, IGenericTypeProvider.
Creazione dell'oggetto demo
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
}
Implementazione di un gestore di tipi generici
NCache consente inoltre di registrare tipi generici nella serializzazione compatta. Per questo, ogni tipo deve essere registrato tramite NCache Centro di gestione. Esiste un altro modo per registrare tipi compatti generici tramite il "Gestore di tipi generici". Con il gestore di tipi generici, l'utente può aggiungere tutti i tipi generici contemporaneamente, implementando il file IGenericTypeProvider
interfaccia. Ciò consente di risparmiare molto tempo e fatica nel caso in cui l'utente desideri registrare un numero elevato di tipi.
Consigli
Per utilizzare l'interfaccia, includi il seguente spazio dei nomi nell'applicazione: Alachisoft.NCache.Runtime.GenericTypesProvider
Per implementare ciò, l'utente deve implementare il file GetGenericTypes
metodo e restituire i tipi generici desiderati nel file Type
vettore. Successivamente, distribuisci questo assembly di classe nel file NCache Centro di gestione. NCache Il Management Center registrerà tutti i tipi popolati nel file Type
vettore. Di seguito è riportato un codice di esempio:
Consigli
Se vuoi contrassegnare una classe per la serializzazione compatta che richiede un costruttore con parametri, assicurati che la classe contenga un costruttore predefinito.
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
}
}
Troubleshooting
Eccezione di serializzazione compatta
È possibile che si verifichi un'eccezione di serializzazione nel nodo in cui non sono registrati i tipi serializzabili compatti.
Soluzione
Registra compatto serializzabile tipi su tutti i nodi del cluster.
Vedere anche
.NETTO: Alachisoft.NCache.Durata spazio dei nomi.