Indexação

Use o plug-in MapIndexPlugin para construir um índice ou vários índices em um BackingMap para suportar acesso a dados sem chave.

Tipos e Configuração de Índice

O recurso de indexação é representado pelo plug-in MapIndexPlugin ou Index, para abreviar. O Índice é um plug-in BackingMap. Um BackingMap pode ter múltiplos plug-ins de Índice configurados, enquanto cada um seguir as regras de configuração de Índice.

O recurso de indexação pode ser usado para construir um ou mais índices em um BackingMap. Um índice é construído a partir de um atributo ou uma lista de atributos de um objeto no BackingMap. Este recurso fornece uma maneira para os aplicativos localizarem determinados objetos mais rapidamente. Com o recurso de indexação, os aplicativos podem localizar objetos com um valor específico ou em um intervalo com os valores de atributos indexados.

Dois tipos de indexação são possíveis: estática e dinâmica. Com a indexação estática, é necessário configurar o plug-in de índice no BackingMap antes de inicializar a instância do ObjectGrid. É possível fazer esta configuração com a configuração XML ou programática do BackingMap. A indexação estática inicia a construção de um índice durante a inicialização do ObjectGrid. O índice é sempre sincronizado com o BackingMap e está pronto para utilização. Depois de o processo de indexação estático iniciar, a manutenção do índice é parte do processo de gerenciamento de transação do eXtreme Scale. Quando as consolidações de transações mudam, estas alterações também atualizam o índice estático, e as alterações de índice são recuperadas se a transação for recuperada.

Com a indexação dinâmica, é possível criar um índice num BackingMap antes ou depois da inicialização da instância do ObjectGrid que o contém. Os aplicativos possuem controle de ciclo de vida sobre o processo de indexação dinâmica para que você possa remover um índice dinâmico quando ele não for mais necessário. Quando um aplicativo cria um índice dinâmico, o índice pode não estar pronto para utilização imediata devido ao tempo gasto na conclusão do processo de construção do índice. Como a quantidade de tempo depende da quantidade de dados indexados, a interface DynamicIndexCallback é fornecido para aplicativos que desejam receber notificações quando ocorrem determinados eventos de indexação. Estes eventos incluem ready, error e destroy. Os aplicativos podem implementar esta interface de retorno de chamada e registrar-se no processo de indexação dinâmica.

Se um BackingMap tiver um plug-in de índice configurado, você pode obter o objeto de proxy do índice do aplicativo a partir do ObjectMap correspondente. Chamar o método getIndex no ObjectMap e passar o nome do plug-in de índice retornam o objeto de proxy do índice. Você deve efetuar o cast do objeto de proxy do índice para uma interface de índice adequada do aplicativo, como MapIndex, MapRangeIndex ou uma interface de índice customizada. Após obter o objeto de proxy do índice, é possível utilizar métodos definidos na interface do índice do aplicativo para localizar objetos armazenados em cache.

As etapas para utilizar a indexação estão resumidas na lista a seguir:
  • Incluir plug-ins de indexação, estáticos ou dinâmicos, no BackingMap;
  • Obter um objeto de proxy de indexação do aplicativo, emitindo o método getIndex do ObjectMap.
  • Direcione o objeto de proxy de índice a uma interface de índice de aplicativo apropriado, como MapIndex, MapRangeIndex, ou uma interface de índice customizada.
  • Utilizar os métodos definidos na interface Index do aplicativo para localizar objetos no cache.

A classe HashIndex é a implementação de plug-in de índice integrada que pode suportar ambas as interfaces integradas de índice do aplicativo: MapIndex e MapRangeIndex. Também é possível criar seus próprios índices. É possível incluir o HashIndex como um índice estático ou dinâmico no BackingMap, obter o objeto proxy do índice MapIndex ou MapRangeIndex e usar o objeto proxy do índice para localizar objetos em cache.

Índice Padrão

Se desejar iterar por meio das chaves em um mapa local, o índice padrão poderá ser usado. Este índice não requer nenhuma configuração, porém ele deve ser usado com relação ao shard, usando um agente ou uma instância do ObjectGrid recuperados a partir do método ShardEvents.shardActivated(shard do ObjectGrid).

Consideração sobre a Qualidade dos Dados

Os resultados dos métodos de consulta de índice somente representar uma captura instantânea de dados em um determinado ponto no tempo. Nenhum bloqueio contra as entradas de dados é obtido depois do retorno dos resultados para o aplicativo. O aplicativo deve estar ciente de que podem ocorrer atualizações de dados em um conjunto de dados retornado. Por exemplo, o aplicativo obtém a chave de um objeto armazenado em cache executando o método findAll de MapIndex. Este objeto de chave retornado está associado a uma entrada de dados no cache. O aplicativo deve poder executar o método get no ObjectMap para localizar um objeto fornecendo o objeto chave. Se outra transação remover o objeto de dados do cache imediatamente antes de o método get ser chamado, o resultado retornado será nulo.

Considerações sobre Desempenho de Indexação

Um dos principais objetivos do recurso de indexação é melhorar o desempenho geral do BackingMap. Se a indexação não for utilizada corretamente, o desempenho do aplicativo poderá ficar comprometido. Considere os seguintes fatores antes de usar este retorno.
  • A quantidade de transações de gravação concorrentes: O processamento de índices pode ocorrer todas as vezes que uma transação gravar dados em um BackingMap. O desempenho será afetado se muitas transações gravarem dados no mapa simultaneamente quando um aplicativo tentar operações de consulta ao índice.
  • O tamanho do conjunto de resultados que é retornado por uma operação de consulta: Como o tamanho do conjunto de resultados aumenta, o desempenho da consulta cai. O desempenho tente a degradas quando o tamanho do conjunto de resultados é de 15% (ou mais) do BackingMap.
  • A quantidade de índices construídos sobre o mesmo BackingMap: Cada índice consome os recursos do sistema. Conforme a quantidade dos índices construídos sobre o BackingMap aumenta, o desempenho diminui.

A função de indexação pode aumentar significativamente o desempenho do BackingMap. Os casos ideais ocorrem quando o BackingMap possui a maioria de operações de leitura, o conjunto de resultados da consulta é de uma porcentagem pequena das entradas do BackingMap, e somente poucos índices são construídos sobre o BackingMap.