Formato de serialização - serialização binária e JSON
Os dados de cache, quando transmitidos pela rede, precisam ser serializados. O processo de serialização percorre os objetos existentes, extrai os dados e os converte em dados serializados. Os dados são então transmitidos pela rede e o processo de desserialização lê os dados serializados. Todo esse processo de serialização/desserialização requer muitos fatores como tempo, memória e desempenho, etc. Esses fatores devem ser mantidos em mente ao escolher um formato para serialização.
Note
Este recurso também está disponível em NCache Professional.
Existem dois tipos de formatos de serialização fornecidos por NCache:
- Serialização Binária
- Serialização JSON
Note
É recomendável que você use a serialização JSON se estiver usando ASP.NET 5.0 e superior. Para mais detalhes clique SUA PARTICIPAÇÃO FAZ A DIFERENÇA.
Serialização Binária
No formato binário, os objetos de usuário (por exemplo, objeto Produto) são serializados no lado do cliente e armazenados no lado do servidor na mesma forma. Cada vez que um item é solicitado ao servidor, o cliente recebe o formato binário do item que é então desserializado localmente para o objeto Produto. Além disso, a serialização/desserialização ocorre apenas no lado do cliente e apenas uma vez durante a busca ou adição de dados – desserializada durante a busca e serializada durante a adição. Isso economiza o custo de serialização/desserialização, o que é perceptível, especialmente nos casos em que dados consideráveis são adicionados ou obtidos do cache.
O formato binário é benéfico se a maior parte do seu processamento estiver no lado do cliente e as operações executadas forem como adicionar, atualizar, buscar e remover do cache. Por exemplo, um objeto Produto serializado é obtido do cache para exibir seu conteúdo. Utilizando o formato binário, o item só precisa ser desserializado ao chegar ao cliente, minimizando assim o custo de processamento. Caso o formato Object esteja sendo utilizado, o servidor serializará o objeto Produto e o enviará ao cliente que o desserializará. Isso aumenta a sobrecarga geral e o custo de serialização e desserialização.
Da mesma forma, se um objeto estiver sendo adicionado ao cache usando o formato binário, ele será serializado antes de ser enviado pela rede e será armazenado como está.
Serialização JSON
Note
Esse recurso está disponível em NCache Empreendimento e Aprovação.
JSON é a sintaxe baseada em texto para armazenar e trocar dados. É um formato bastante mais fácil para as máquinas analisarem e para os usuários entenderem. Usando a serialização JSON, os objetos são convertidos em seu equivalente JSON quando serializados e, em seguida, convertidos novamente em seus objetos personalizados no momento da desserialização.
Considere um .NET Produto classe contendo os dados dos produtos. Ele contém vários atributos, por exemplo, Nome do Produto, ID do produto e Vencimento do produto etc.
Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Sizes = new string[] { "Small" };
Esses dados serão serializados para a seguinte string JSON:
{
"Name": "Apple",
"Expiry": "2008-12-28T00:00:00",
"Sizes":
[
"Small"
]
}
O serializador usado é uma extensão do NewtonSoft Serializador de terceiros. Pode ser uma abordagem preferível para serialização compacta e conveniente de dados. A serialização JSON pode ser preferida à serialização binária pelos seguintes motivos:
Memória eficiente: A memória é um dos principais parâmetros considerados ao usar grandes conjuntos de dados. O consumo de memória maior afeta outras medidas de desempenho. A serialização JSON afeta menos memória para armazenar os objetos. Todo o conjunto de dados é serializado como JSON e resulta em redução do consumo de memória devido ao tamanho significativamente menor, melhorando assim a comunicação da rede.
Portabilidade: A serialização JSON oferece maior portabilidade, pois fornece a facilidade de serializar os dados de várias tecnologias no mesmo padrão. O serializador JSON serializa dados de todos os tipos. Por exemplo, se o usuário estiver usando a classe Java, o serializador JSON serializará os dados na forma de uma string e os desserializará no tipo definido pelo usuário. Este nível de portabilidade não é fornecido pela serialização binária.
Sem alteração de código: Como a serialização de acordo com o formato JSON é totalmente automatizada, não há alteração de código exigida pelo usuário, a menos que você exija alteração de código de acordo com sua própria lógica.
Atributos não serializáveis: Você também tem a opção de serializar os atributos seletivos e manter os atributos de sua escolha não serializados usando um método chamado “JsonIgnore” em sua classe. Isso significa que o serializador irá ignorar esses atributos enquanto serializa os dados e serializa o restante. Isso pode ser feito apenas com os atributos de uma classe personalizada. Consulte o NewtonSoft documentação para obter detalhes. Por exemplo, se o usuário quiser manter o atributo Senha como não serializado,
JsonIgnore
irá marcá-lo como não serializável.
using Newtonsoft.Json;
[JsonIgnore]
public String Password()
{
get;
set;
}
Dado abaixo é um exemplo de uma classe personalizada com um atributo marcado não serializável Senha. Após a serialização, a string JSON serializada não conterá o valor do atributo não serializado.
Account account = new Account
{
FullName = "Joe User",
EmailAddress = "joe@example.com",
Password = "VHdlZXQgJ1F1aWNrc2lsdmVyJyB0byBASmFtZXNOSw=="
};
Os dados acima serão serializados para a seguinte string JSON.
{
"FullName":"Joe User",
"EmailAddress":"joe@example.com"
}
Tendo em mente os fatores acima, a serialização JSON pode resultar na obtenção de um nível mais alto de desempenho. No entanto, se você deseja obter precisão em um nível superior, use a serialização binária em vez da serialização JSON, pois os dados serializados binários são desserializados com mais precisão.
Veja também
Serialização compacta
Classes de registro para serialização compacta
Ponte para replicação WAN
Balanceamento de carga de dados