MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

java - Desempenho do MongoDB + Solr


Sua abordagem é realmente boa. Alguns frameworks populares como o Compass estão realizando o que você descreve em um nível inferior para espelhar automaticamente as alterações de índice que foram realizadas por meio do framework ORM (consulte http://www.compass-project.org/overview.html).

Além do que você descreve, eu também reindexaria regularmente todos os dados que residem no MongoDB para garantir que o Solr e o Mongo sejam sincronizados (provavelmente não tanto quanto você imagina, dependendo do número de documentos, o número de campos, o número de tokens por campo e o desempenho dos analisadores:costumo criar índices de 5 a 8 milhões de documentos (cerca de 20 campos, mas os campos de texto são curtos) em menos de 15 minutos com analisadores complexos, apenas garanta seu buffer de RAM não é muito pequeno e não confirme/otimize até que todos os documentos tenham sido adicionados).

Com relação ao desempenho, um commit é caro e uma otimização é muito cara. Dependendo do que mais importa para você, você pode alterar o valor do mergefactor no Solrconfig.xml (valores altos melhoram o desempenho de gravação, enquanto valores baixos melhoram o desempenho de leitura, 10 é um bom valor para começar).

Você parece ter medo do tempo de compilação do índice. No entanto, como o armazenamento de índices do Lucene é baseado em segmento, a taxa de transferência de gravação não deve depender muito do tamanho do índice (http://lucene.apache.org/java/2_3_2/fileformats.html). No entanto, o tempo de aquecimento aumentará, portanto, certifique-se de que
  • há consultas típicas (especialmente para ordenações para carregar os caches de campo), mas não muito complexas, nos parâmetros firstSearcher e newSearcher em seu arquivo de configuração solrconfig.xml,
  • useColdSearcher está definido como
    • false para ter um bom desempenho de pesquisa ou
    • true se você quiser que as alterações realizadas no índice sejam consideradas mais rapidamente ao preço de uma pesquisa mais lenta.

Além disso, se for aceitável para você que os dados se tornem pesquisáveis ​​apenas alguns X milissegundos após serem gravados no MongoDB, você pode usar o recurso commitWithin do UpdateHandler. Dessa forma, o Solr terá que se comprometer com menos frequência.

Para obter mais informações sobre os fatores de desempenho do Solr, consulte http://wiki.apache.org/solr/SolrPerformanceFactors

Para excluir documentos, você pode excluir por ID do documento (conforme definido em schema.xml) ou por consulta :http://lucene.apache.org/solr/api/org/apache/solr/client/solrj/SolrServer.html