Com o movimento NoSQL crescendo com base em bancos de dados baseados em documentos, observei o MongoDB recentemente. Percebi uma semelhança impressionante com como tratar itens como "Documentos", assim como Lucene (e usuários do Solr).
Então, a pergunta: por que você deseja usar o NoSQL (MongoDB, Cassandra, CouchDB, etc) sobre Lucene (ou Solr) como seu "banco de dados"?
O que estou procurando (e tenho certeza que os outros estão procurando) em uma resposta é algumas comparações profundas deles. Vamos pular as discussões de banco de dados relacionais juntas, pois elas servem a um propósito diferente.
O Lucene oferece algumas vantagens sérias, como poderosos sistemas de busca e peso. Sem mencionar as facetas do Solr (que Solr será integrado ao Lucene em breve, sim!). Você pode usar documentos Lucene para armazenar IDs e acessar os documentos como tais, como o MongoDB. Misture-o com o Solr e agora você obtém uma solução com balanceamento de carga baseada em WebService.
Você pode até fazer uma comparação de provedores de cache fora de processo, como Velocity ou MemCached, ao falar sobre armazenamento de dados e escalabilidade semelhantes do MongoDB.
As restrições do MongoDB me lembram o uso do MemCached, mas eu posso usar o Velocity da Microsoft e ter mais poder de coleta de agrupamento e lista do MongoDB (eu acho). Não é possível obter mais rápido ou escalabilidade do que o armazenamento em cache de dados na memória. Até Lucene tem um provedor de memória.
O MongoDB (e outros) têm algumas vantagens, como a facilidade de uso de sua API. Atualize um documento, crie um ID e armazene-o. Feito. Legal e fácil.
Respostas:
Essa é uma ótima pergunta, algo sobre o qual eu ponderei bastante. Resumirei minhas lições aprendidas:
Você pode facilmente usar o Lucene / Solr no lugar do MongoDB para praticamente todas as situações, mas não vice-versa. A publicação de Grant Ingersoll resume aqui.
O MongoDB etc. parece servir a um propósito em que não há exigência de pesquisa e / ou lapidação. Parece ser uma transição mais simples e sem dúvida mais fácil para os programadores que se desintoxicam do mundo RDBMS. A menos que alguém esteja acostumado, Lucene & Solr têm uma curva de aprendizado mais acentuada.
Não existem muitos exemplos de uso do Lucene / Solr como um armazenamento de dados, mas o Guardian avançou e resumiu isso em um excelente deck de slides , mas eles também não se comprometem a pular totalmente o movimento Solr e a "investigar" combinando o Solr com o CouchDB.
Por fim, vou oferecer nossa experiência, infelizmente não posso revelar muito sobre o caso de negócios. Trabalhamos na escala de vários TB de dados, um aplicativo quase em tempo real. Depois de investigar várias combinações, decidiu ficar com Solr. Até agora, não há arrependimentos (6 meses e contando) e não vejo motivo para mudar para outro.
Resumo: se você não possui um requisito de pesquisa, o Mongo oferece uma abordagem simples e poderosa. No entanto, se a pesquisa for a chave da sua oferta, é provável que você adote uma única tecnologia (Solr / Lucene) e otimize o que é necessário - menos peças móveis.
Meus 2 centavos, espero que tenha ajudado.
fonte
Você não pode atualizar parcialmente um documento no solr. É necessário republicar todos os campos para atualizar um documento.
E o desempenho é importante. Se você não confirmar, sua alteração no solr não terá efeito; se você confirmar sempre, o desempenho será prejudicado.
Não há transação no solr.
Como o solr tem essas desvantagens, algumas vezes o nosql é uma escolha melhor.
fonte
Usamos o MongoDB e o Solr juntos e eles apresentam um bom desempenho. Você pode encontrar meu blog aqui, onde descrevi como usamos essas tecnologias juntos. Aqui está um trecho:
fonte
Observe também que algumas pessoas integraram o Solr / Lucene no Mongo, armazenando todos os índices no Solr e também monitorando as operações do oplog e atualizando em cascata as atualizações relevantes no Solr.
Com essa abordagem híbrida, você pode realmente ter o melhor dos dois mundos com recursos como pesquisa de texto completo e leituras rápidas com um armazenamento de dados confiável, que também pode ter uma velocidade de gravação impressionante.
É um pouco técnico de configurar, mas há muitos tailers oplog que podem ser integrados ao solr. Confira o que o rangepan fez neste artigo.
http://denormalised.com/home/mongodb-pub-sub-using-the-replication-oplog.html
fonte
Pela minha experiência com os dois, o Mongo é ótimo para uso simples e direto. A principal desvantagem do Mongo que sofremos é o baixo desempenho em consultas imprevistas (você não pode criar índices mongo para todas as combinações possíveis de filtro / classificação, você simplesmente não pode).
E aqui, onde o Lucene / Solr prevalece bastante, especialmente com o cache do FilterQuery, o desempenho é excelente.
fonte
Como ninguém mais o mencionou, deixe-me acrescentar que o MongoDB não possui esquema, enquanto o Solr impõe um esquema. Portanto, se é provável que os campos dos seus documentos sejam alterados, esse é um dos motivos para escolher o MongoDB em vez do Solr.
fonte
schema.xml
, MAS também possui 'campos dinâmicos', ou seja, campos cujos tipos são determinados por curingas, para que você possa ter todos os campos correspondentes, digamos,*_i
indexados como campos inteiros. quando a adição de documentos, então você pode ter documentos conaining campos comocount_i
,foo_i
,bar_i
que são todos entendidos como campos inteiros sem aparecer noschema.xml
literalmente. bem sem esquema, eu diria. consulte youtube.com/watch?v=WYVM6Wz-XTw para obter mais informações.@ mauricio-scheffer mencionou o Solr 4 - para os interessados, o LucidWorks está descrevendo o Solr 4 como "o NoSQL Search Server" e há um vídeo em http://www.lucidworks.com/webinar-solr-4-the-nosql -search-server / onde eles detalham os recursos do NoSQL (ish). (O -ish é para a versão deles sem esquema ser realmente um esquema dinâmico.)
fonte
Se você deseja apenas armazenar dados usando o formato de valor-chave, o Lucene não é recomendado porque seu índice invertido desperdiçará muito espaço em disco. E com a economia de dados em disco, seu desempenho é muito mais lento que os bancos de dados NoSQL, como redis, porque os redis salvam dados na RAM. A maior vantagem do Lucene é que ele suporta muitas consultas, portanto, as consultas difusas podem ser suportadas.
fonte
As soluções de terceiros, como uma cauda de mongo op-log, são atraentes. Permanecem alguns pensamentos ou perguntas sobre se as soluções podem ser totalmente integradas, assumindo uma perspectiva de desenvolvimento / arquitetura. Não espero encontrar uma solução totalmente integrada para esses recursos por alguns motivos (um tanto especulativos e sujeitos a esclarecimentos e não atualizados com os esforços de desenvolvimento):
fonte
O MongoDB Atlas terá em breve um mecanismo de pesquisa baseado em luceno. O grande anúncio foi feito na conferência MongoDB World 2019 desta semana. Essa é uma ótima maneira de incentivar mais o uso do produto MongoDB Atlas de alta receita.
Eu esperava vê-lo inserido na versão 4.2 do MongoDB Enterprise, mas não há notícias de trazê-lo para sua linha de produtos no local.
Mais informações aqui: https://www.mongodb.com/atlas/full-text-search
fonte