Eu tenho cerca de 4 milhões de registros por dia e preciso manter 7 anos online, por isso estamos analisando 10,2 bilhões de registros que eu preciso pesquisar. Os usuários esperam que a pesquisa seja rápida o suficiente para uma interface do usuário, resultando em 3-5s
Devido à política fora do meu controle, não posso usar uma solução de banco de dados pronta para uso, pois significa que terei que fornecer o banco de dados a outra equipe para gerenciar (não pergunte), o que significa que perco a capacidade de otimizar hardware e software, pois eles têm um serviço único para bancos de dados e cobram (internamente) pelo GB. Tenho certeza de que vou receber comentários sugerindo que eu entendo o ponto, eu já tenho e a gerência entende que o que eles estão me pedindo para fazer é ridículo.
Eu tenho olhado para usar o Lucene como o cerne da minha solução. Armazenando os dados reais particionados por tipo e por dia em arquivos simples. Em seguida, use um documento Lucene para indexar alguns dos campos pesquisados, sendo o único campo "Armazenado" o ID do registro (para que eu possa lê-lo no arquivo simples)
Não sou exatamente informado sobre o Lucene ou os discos rígidos, mas, de acordo com o meu entendimento, haverá IO inicial / tempo de busca para pesquisar o índice; quando tiver todos os IDs de documento do Lucene, leio os documentos que terão mais IO / procurando tempo, então leio o registro real do flat flat ... Não consigo imaginar, dado o tamanho do conjunto de dados, que isso será muito rápido, com o qual estou um pouco preocupado?
O Lucene tem um tamanho máximo de documento de 2,1 bilhões por índice, por isso vou exigir várias indicações aqui.
Essa abordagem, aparentemente, parece que poderia funcionar?
Os dados que estou armazenando são dados de ação de evento. A maioria das consultas agrupa por ID do evento e obtém os últimos detalhes da ação do evento para um evento específico. Algumas das consultas analisarão eventos de conjuntos grandes e suas ações de eventos individuais.