WebSphere eXtreme Scale utiliza vários processos Java para conter dados. Esses processos serializam os dados: ou seja, convertem os dados (que estão no formato de instâncias de objeto Java) em bytes e volta em objetos novamente, conforme necessário, para mover os dados entre processos do cliente e do servidor. Serializar os dados é a operação mais dispendiosa e deve ser endereçada pelo desenvolvedor de aplicativos ao projetar o esquema, configurar a grade de dados e interagir com as APIs de acesso a dados.
As rotinas de cópia e serialização Java são relativamente lentas e podem consumir de 60% a 70% do processador em uma configuração típica. As seções a seguir são escolhas para melhorar o desempenho da serialização.
A interface ObjectTransformer foi substituída pelos plug-ins DataSerializer, que podem ser usados para armazenar dados arbitrários eficientemente no WebSphere eXtreme
Scale para que as APIs do produto existentes possam ser interagir de modo eficiente com seus dados.
O aplicativo não precisa copiar chaves, porque elas são consideradas imutáveis.
Ao utilizar a API do EntityManager com entidades, o ObjectGrid não armazena os objetos de entidade diretamente nos BackingMaps. A API do EntityManager converte o objeto de entidade em objetos de Tupla. Os mapas de entidade são automaticamente associados com um ObjectTransformer altamente otimizado. Sempre que a API do ObjectMap ou a API do EntityManager for utilizada para interagir com mapas de entidade, o ObjectTransformer da entidade será chamado.
Há alguns casos em que os objetos devem ser modificados para usar a serialização customizada, tais como implementar a interface java.io.Externalizable ou implementar os métodos writeObject e readObject para classes implementando a interface java.io.Serializable. As técnicas de serialização customizadas devem ser empregadas quando os objetos são serializados utilizando mecanismos que não os métodos da API do ObjectGrid ou da API do EntityManager.
Por exemplo, quando objetos ou entidades são armazenados como dados da instância em um agente da API do DataGrid ou o agente retorna objetos ou entidades, tais objetos não são transformados utilizando um ObjectTransformer. O agente, entretanto, utilizará automaticamente o ObjectTransformer ao utilizar a interface EntityMixin. Consulte Agentes do DataGrid e Mapas Baseados em Entidade para obter mais detalhes.
Ao usar as APIs ObjectMap ou DataGrid, os objetos de valor e chave são serializados sempre que os clientes interagem com a grade de dados e quando os objetos são replicados. Para evitar o gasto adicional de serialização, use matrizes de byte em vez de objetos Java. As matrizes de byte são muito mais baratas para armazenar em memória porque o JDK tem menos objetos para buscar durante a coleta de lixo e elas podem ser aumentadas somente quando necessário. As matrizes de byte somente devem ser usadas se você não precisar acessar os objetos usando consultas ou índices. Como os dados são armazenados como bytes, os dados somente podem ser acessados através de sua chave.
O WebSphere eXtreme Scale pode armazenar dados automaticamente como matrizes de bytes usando a opção de configuração de mapa CopyMode.COPY_TO_BYTES, ou ele pode ser manipulado manualmente pelo cliente. Esta opção armazenará os dados de maneira eficiente na memória e também pode aumentar automaticamente os objetos dentro da matriz de bytes para uso por consulta e índices sob demanda.
Um plug-in MapSerializerPlugin pode ser associado a um plug-in BackingMap quando usar os modos de cópia COPY_TO_BYTES ou COPY_TO_BYTES_RAW. Esta associação permite que os dados sejam armazenados em formato serializado na memória, em vez de em formato de objeto Java nativo. Armazenando dados serializados preserva a memória e aprimora a replicação e o desempenho no cliente e no servidor. É possível usar um plug-in DataSerializer para desenvolver fluxos de serialização de alto desempenho que podem ser compactados, criptografados e consultados.