• Nenhum resultado encontrado

Melhorando desempenho da indexação

No documento Diogo Luiz Bizatto.pdf - IIS Windows Server (páginas 108-112)

4.5 INDEXAÇÃO

4.5.1 Melhorando desempenho da indexação

Na indexação de pequenas coleções de documentos a indexação funciona bem na configuração padrão do Lucene. No entanto para aplicações que lidam com índices muito grandes, evidentemente será necessário algum controle sobre o processo de indexação do Lucene para garantir um melhor o desempenho de indexação. Por exemplo, podem ser indexados milhares de documentos e se querer acelerar o processo para alguns minutos ao invés de horas. Se o computador possuir uma boa quantidade de memória RAM pode-se configurar o Lucene para fazer maior uso dela. Existem alguns parâmetros que permitem controlar a utilização dos recursos durante a indexação melhorando o desempenho da indexação, esses parâmetros são mergeDocs e maxMergeDocs (HATCHER; GOSPODNETIC, 2005).

No processo de indexação, o processo de escrita do índice no disco é o que reduz o desempenho da indexação. Acompanhando o processo de indexação verificou-se que maior parte do tempo é despendido em seções de código que manipulam arquivos de índice. Por isso é necessário aperfeiçoar o Lucene para ser mais veloz na indexação de documentos novos. Como mostrado na Figura 58, quando os novos documentos são adicionados a um índice Lucene, eles são inicialmente colocados em um buffer na memória, ao invés de serem imediatamente gravados no disco.

Figura 58. Buffer do Lucene

Fonte: Hatcher e Gospodnetic (2005).

94

Esse buffer foi criado por motivos de desempenho e felizmente, a classe IndexWriter (responsável pela indexação) permite o ajuste de alguns parâmetros desse buffer (HATCHER;

GOSPODNETIC, 2005). Os parâmetros são:

Tabela 8. Parâmetros de configuração do buffer do Lucene.

O parâmetro mergeFactor permite controlar o número de documentos armazenados em memória antes de gravá-los no disco. Com valor padrão de 10, o Lucene armazena 10 documentos em memória antes de gravá-los para em único segmento no disco. Este valor também significa que foram atingidos 10 segmentos de arquivos no disco, e então, o Lucene mescla estes segmentos em um único segmento.

Por exemplo, se for definido o mergeFactor com valor 10, um novo segmento é criado no disco para cada conjunto de 10 documentos adicionados ao índice. Quando o décimo documento é adicionado ao décimo segmento, os 10 segmentos são fundidos em um único segmento de tamanho 100. Quando 10 segmentos de tamanho 100 são criados, eles são fundidos em um único segmento que contém 1000 documentos, e assim por diante.

Enquanto os segmentos são mesclados, o Lucene garante que nenhum segmento tenha mais documentos que o valor definido pelo parâmetro maxMergeDocs; portanto, nenhum segmento irá conter mais que 1000 documentos.

Sendo assim, pode-se configurar o Lucene para usar mais memória RAM e gravar dados no disco com menos freqüência, de modo a acelerar o processo de indexação. Quanto menor o tamanho definido para o parâmetro mergeFactor, menos memória RAM será utilizada e o com mais freqüência serão atualizados os índices no disco. Da mesma forma, quanto maior o valor definido para o parâmetro maxMergeDocs maior serão os arquivos de índice. Deve-se estar ciente de que

Variáveis System.property Valor padrão Descrição

mergeFactor org.apache.lucene.mergeFactor 10

Controla a quantidade de documentos no

buffer.

maxMergeFactor org.apache.lucene.maxMergeDocs Integer.MAX_VALUE Limita o número de documentos no buffer.

95

quanto menor o mergeFactor, menos mesclagem de índices serão realizadas, o que resulta em mais arquivos de índice. Embora isso, teoricamente, não afete o desempenho de indexação, pode deixar a pesquisa mais lenta porque o Lucene precisará abrir, ler e processar mais arquivos de índice.

Um melhor ajuste dos parâmetros mergeFactor e maxMergeDocs afetam a velocidade de indexação. Isso foi constatado através da classe IndexTuning, criada para comparar a velocidade da indexação para diferentes valores de parâmetros. O trecho de código responsável pela indexação pode ser visualizado na Figura 59.

Figura 59. Classe IndexTuning.

O método implementado para testar os diferentes parâmetros possíveis possui três parâmetros de argumento: o número de documentos para serem adicionados ao índice, o valor para mergeFactor e o valor para maxMergeDocs. Os testes foram realizados com 100.000 documentos para serem adicionados ao índice variando os parâmetros merge e maxMerge.

Os resultados obtidos podem ser visualizados na Tabela 60, onde são apresentados os resultados.

96 Figura 60. Ajuste de parâmetros do Lucene.

Obteve-se o melhor desempenho na indexação com valor 100 para ambos os parâmetros.

Porém, em virtude da pequena diferença no desempenho, pode-se afirmar que os valores ideais dos parâmetros variam entre 100 e 1000. O uso de 100.000 para mergeFactor resultou em um erro por utilização excessiva de memória.

Este teste é apenas uma demonstração do uso e efeito de mergeFactor e maxMergeDocs. Na classe criada adicionaram-se documentos com dois campos constituídos por uma única palavra. Em conseqüência pode-se usar um mergeFactor muito alto. Na prática, as aplicações que utilizam Lucene tendem a trabalhar com índices cujos documentos têm vários campos e cujos campos contêm pedaços maiores do texto. Nestes casos não será possível definir mergeFactor e maxMergeDocs com valores tão elevados como os utilizados, a menos que sejam executados em computadores com grandes quantidades de memória RAM, fator que limita os valores de mergeFactor e maxMergeDocs para um determinado índice. Para executar a classe IndexTuning, levou-se em consideração o efeito que o sistema o sistema operacional e arquivo de cache tem sobre o desempenho, sendo necessários vários testes consecutivos para cada par de valores. Finalmente, pode-se concluir que os parâmetros padrões Lucene tendem, neste caso, a ter um desempenho inferior aos parâmetros ajustados, pois como apresentado na Figura 60, a diferença no tempo de indexação aproximou-se de 2500 milissegundos, ou seja, 15% de diferença entre o melhor e pior caso, valor muito representativo, considerando a indexação de milhares de arquivos.

97

No documento Diogo Luiz Bizatto.pdf - IIS Windows Server (páginas 108-112)

Documentos relacionados