Eu tenho o seguinte problema: Eu tenho um banco de dados contendo mais de 2 milhões de registros. Cada registro possui um campo de string X e quero exibir uma lista de registros para os quais o campo X contém uma determinada string. Cada registro tem aproximadamente 500 bytes de tamanho.
Para torná-lo mais concreto: na GUI do meu aplicativo, tenho um campo de texto onde posso inserir uma string. Acima do campo de texto, tenho uma tabela exibindo os registros (primeiro N, por exemplo, 100) que correspondem à string no campo de texto. Quando digito ou excluo um caractere no campo de texto, o conteúdo da tabela deve ser atualizado rapidamente.
Gostaria de saber se existe uma maneira eficiente de fazer isso usando estruturas de índice apropriadas e / ou cache. Como explicado acima, só quero exibir os primeiros N itens que correspondem à consulta. Portanto, para N pequeno o suficiente, não deve ser um grande problema carregar os itens correspondentes do banco de dados. Além disso, o armazenamento em cache de itens na memória principal pode acelerar a recuperação.
Penso que o principal problema é encontrar rapidamente os itens correspondentes, dada a sequência de padrões. Posso confiar em alguns recursos do DBMS ou preciso criar algum índice na memória? Alguma ideia?
EDITAR
Eu fiz uma primeira experiência. Dividi os registros em diferentes arquivos de texto (no máximo 200 registros por arquivo) e os coloquei em diretórios diferentes (usei o conteúdo de um campo de dados para determinar a árvore de diretórios). Acabo com cerca de 50000 arquivos em cerca de 40000 diretórios. Em seguida, executei o Lucene para indexar os arquivos. Procurar uma string com o programa de demonstração Lucene é bastante rápido. A divisão e a indexação levaram alguns minutos: isso é totalmente aceitável para mim, porque é um conjunto de dados estático que eu quero consultar.
O próximo passo é integrar o Lucene no programa principal e usar os hits retornados pelo Lucene para carregar os registros relevantes na memória principal.