Estou com a ideia de desenvolver um web crawler em java para coletar algumas informações na Internet. Essas informações estarão disponíveis por um sistema web que irei desenvolver.
A princípio tentando fazer uma previsão, acredito que o volume de informações será grande. Minha dúvida é a seguinte: Qual o melhor SGBD para gerenciar toda essa informação colhida pelo web crawler.
Será que esse é um caso voltado para a área de data warehouse?
Acho que você pode começar com algo bem simples, focando no expertise do seu time. Pode ser mysql, pode ser oracle, pode ser postgre. Mesmo que você precise de busca textual, esses bancos oferecem algo para isso, ou poderá usar o Solr/lucene separadamente.
Se você tiver algo muito específico em mente, como precisar manter os relacionamentos de uma forma bem diferente ou ainda precisar navegar no grafo de relações entre as páginas, talvez algum desses bancos NoSQL se adequem melhor.
Mas eu começaria com algo simples se ainda estiver vendo quais serão as necessidades em específico.
Solr, ElasticSearch, que ambos sao baseados no Lucene, foram feitos especificamente para busca textual e com performance incrível, podendo fazer pesquisas até com palavras parecidas, configurando o boost dela. Porém é esses possuem sua base própria e é preciso mante-los também. E o mesmo não substitui um banco de dados, pois sua estrutura deve ser construída baseado nas suas necessidades de busca.
O Postgres e outros banco de dados (Oracle, MySQL) trabalham semelhante a um NoSQL, trabalhando com JSON. Isso pode talvez substituir os uso do Solr, ElasticSearch, por exemplo. Depende da necessidade.
Voce pode ter mais informacoes sobre como o Postgres funciona com JSON nessa palestra: aqui
Você pode usar um banco que permite as entidades terem um número arbitrário de atributos, ou usar um banco de dados de documento e usar lucene pra fazer busca textual.
Usar um SGBD não faz muito sentido se a informação coletada é proveniente de vários sites com diferentes layouts porque uma tabela em um banco de dados SQL precisa possuir um número limitado e predefinido de colunas.