随着基于文档数据库的NoSQL运动的发展,我最近研究了MongoDB。我注意到在如何将项目视为“文档”方面有惊人的相似之处,就像Lucene(以及Solr的用户)所做的那样。

那么,问题来了:为什么你想要使用NoSQL (MongoDB, Cassandra, CouchDB等)而不是Lucene(或Solr)作为你的“数据库”?

我(我相信其他人也一样)想要的答案是对它们进行深入的比较。让我们一起跳过关系数据库的讨论,因为它们有不同的用途。

Lucene提供了一些重要的优势,比如强大的搜索和权重系统。更不用说Solr中的facet了(Solr很快就要被集成到Lucene中了!)你可以使用Lucene文档来存储id,并像MongoDB一样访问这些文档。将它与Solr混合使用,您现在就得到了一个基于webservice的负载均衡解决方案。

在讨论MongoDB类似的数据存储和可伸缩性时,您甚至可以将Velocity或MemCached等进程外缓存提供商进行比较。

MongoDB的限制让我想起了使用MemCached,但是我可以使用微软的Velocity,并且比MongoDB拥有更多的分组和列表收集能力(我认为)。没有比在内存中缓存数据更快或可伸缩的方法了。甚至Lucene也有内存提供商。

MongoDB(和其他)确实有一些优势,比如它们的API易于使用。新建一个文档,创建一个id,并存储它。完成了。很简单。


当前回答

我们同时使用MongoDB和Solr,它们的性能很好。你可以在这里找到我的博客文章,我描述了我们如何一起使用这些技术。以下是节选:

[...] However we observe that query performance of Solr decreases when index size increases. We realized that the best solution is to use both Solr and Mongo DB together. Then, we integrate Solr with MongoDB by storing contents into the MongoDB and creating index using Solr for full-text search. We only store the unique id for each document in Solr index and retrieve actual content from MongoDB after searching on Solr. Getting documents from MongoDB is faster than Solr because there is no analyzers, scoring etc. [...]

其他回答

另外请注意,有些人已经将Solr/Lucene集成到Mongo中,将所有索引存储在Solr中,并监视oplog操作,并将相关更新级联到Solr中。

使用这种混合方法,您可以真正兼得全文搜索和快速读取等功能,并使用可靠的数据存储,同时还可以具有惊人的写入速度。

设置起来有点技术性,但是有很多oplog tailer可以集成到solr中。看看rangespan在本文中做了什么。

http://denormalised.com/home/mongodb-pub-sub-using-the-replication-oplog.html

MongoDB Atlas很快就会有一个基于lucene的搜索引擎。这一重大消息是在本周的2019年MongoDB世界会议上宣布的。这是鼓励他们更多使用高收入的MongoDB Atlas产品的好方法。

我希望它能被应用到MongoDB企业版4.2中,但目前还没有将其应用到他们的on-prem产品线的消息。

更多信息请访问:https://www.mongodb.com/atlas/full-text-search

如果你只是想用键值格式存储数据,不建议使用Lucene,因为它的倒立索引会浪费太多的磁盘空间。由于数据保存在磁盘上,它的性能比NoSQL数据库(如redis)慢得多,因为redis将数据保存在RAM中。Lucene最大的优势是它支持大量的查询,因此可以支持模糊查询。

由于没有人提到它,让我补充一下,MongoDB是无模式的,而Solr强制使用模式。因此,如果文档的字段可能会发生变化,这是选择MongoDB而不是Solr的一个原因。

在solr中不能部分更新文档。为了更新文档,您必须重新发布所有字段。

性能很重要。如果不提交,则对solr的更改不会生效,如果每次都提交,则性能会受到影响。

在solr中没有事务。

由于solr有这些缺点,有时NoSQL是更好的选择。

更新:Solr 4+开始支持提交和软提交。参考最新文档https://lucene.apache.org/solr/guide/8_5/