Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Configurar Lucene.Net com SQL Server


Sim, eu usei exatamente para o que você está descrevendo. Tínhamos dois serviços - um para leitura e outro para gravação, mas apenas porque tínhamos vários leitores. Tenho certeza de que poderíamos ter feito isso com apenas um serviço (o escritor) e incorporado o leitor no aplicativo e nos serviços da Web.

Eu usei o lucene.net como um indexador geral de banco de dados, então o que recebi de volta foram basicamente IDs de banco de dados (para mensagens de e-mail indexadas) e também o usei para obter informações suficientes para preencher os resultados da pesquisa ou algo semelhante sem tocar no base de dados. Funcionou muito bem em ambos os casos, embora o SQL possa ficar um pouco lento, pois você praticamente precisa obter um ID, selecionar um ID etc. Contornamos isso criando uma tabela temporária (com apenas a linha de ID) e inserção em massa de um arquivo (que foi a saída do lucene) e depois ingressar na tabela de mensagens. Foi muito mais rápido.

Lucene não é perfeito, e você tem que pensar um pouco fora da caixa de banco de dados relacional, porque TOTALMENTE não é um, mas é muito, muito bom no que faz. Vale a pena dar uma olhada e, me disseram, não tem os problemas "oops, desculpe, você precisa reconstruir seu índice novamente" que o FTI do MS SQL faz.

BTW, estávamos lidando com 20-50 milhões de e-mails (e cerca de 1 milhão de anexos únicos), totalizando cerca de 20 GB de índice lucene, eu acho, e 250 + GB de banco de dados SQL + anexos.

O desempenho foi fantástico, para dizer o mínimo - apenas certifique-se de pensar e ajustar seus fatores de mesclagem (quando mescla segmentos de índice). Não há problema em ter mais de um segmento, mas pode haver um GRANDE problema se você tentar mesclar dois segmentos com 1mil itens em cada, e você tiver um thread de observador que mata o processo se demorar muito ... .. (sim, isso chutou nossa bunda por um tempo). Portanto, mantenha o número máximo de documentos por coisa BAIXO (ou seja, não o defina como máximo como fizemos!)

EDIT Corey Trager documentou como usar o Lucene.NET no BugTracker.NET aqui.