PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Por que o Solr é muito mais rápido que o Postgres?


Primeiro, o Solr não usa árvores B. Um índice Lucene (a biblioteca subjacente usada pelo Solr) é feito de um segmentos . Para cada segmento, o Lucene mantém um dicionário de termos, que consiste na lista de termos que aparecem no segmento, ordenados lexicograficamente. A pesquisa de um termo neste dicionário de termos é feita usando uma pesquisa binária, portanto, o custo de uma pesquisa de um único termo é O(log(t)) onde t é o número de termos. Pelo contrário, usar o índice de um RDBMS padrão custa O(log(d)) onde d é o número de documentos. Quando muitos documentos compartilham o mesmo valor para algum campo, isso pode ser uma grande vitória.

Além disso, o committer do Lucene, Uwe Schindler, adicionou suporte para consultas de intervalo numérico alguns anos atrás. Para cada valor de um campo numérico , o Lucene armazena vários valores com diferentes precisões. Isso permite que o Lucene execute consultas de intervalo com muita eficiência. Como seu caso de uso parece alavancar muito as consultas de intervalo numérico, isso pode explicar por que o Solr é muito mais rápido. (Para mais informações, leia os javadocs que são muito interessantes e fornecem links para trabalhos de pesquisa relevantes.)

Mas o Solr só pode fazer isso porque não possui todas as restrições que um RDBMS possui. Por exemplo, o Solr é muito ruim em atualizar um único documento por vez (prefere atualizações em lote).