NoSQL(MongoDB)与Lucene(或Solr)作为您的数据库
随着NoSQL运动在基于文档的数据库基础上的发展,我最近研究了MongoDB。我注意到,如何将项目视为“文档”有着惊人的相似性,就像Lucene(以及Solr的用户)所做的那样 因此,问题是:为什么要在Lucene(或Solr)之上使用NoSQL(MongoDB、Cassandra、CouchDB等)作为“数据库” 我(我相信其他人)在寻找答案时,会对它们进行深入的比较。让我们一起跳过关系数据库讨论,因为它们有不同的用途 Lucene提供了一些重要的优势,例如强大的搜索和权重系统。更不用说Solr中的方面(Solr很快就会集成到Lucene中,耶!)。您可以使用Lucene文档来存储ID,并像MongoDB一样访问文档。将它与Solr混合使用,您现在可以得到一个基于Web服务的负载平衡解决方案 在讨论MongoDB类似的数据存储和可伸缩性时,您甚至可以对进程外缓存提供程序(如Velocity或MemCached)进行比较 MongoDB的限制让我想起了使用MemCached,但我可以使用微软的Velocity,并且比MongoDB有更多的分组和列表收集能力(我认为)。无法比在内存中缓存数据更快或更具可扩展性。甚至Lucene也有一个内存提供程序NoSQL(MongoDB)与Lucene(或Solr)作为您的数据库,mongodb,solr,lucene,memcached,nosql,Mongodb,Solr,Lucene,Memcached,Nosql,随着NoSQL运动在基于文档的数据库基础上的发展,我最近研究了MongoDB。我注意到,如何将项目视为“文档”有着惊人的相似性,就像Lucene(以及Solr的用户)所做的那样 因此,问题是:为什么要在Lucene(或Solr)之上使用NoSQL(MongoDB、Cassandra、CouchDB等)作为“数据库” 我(我相信其他人)在寻找答案时,会对它们进行深入的比较。让我们一起跳过关系数据库讨论,因为它们有不同的用途 Lucene提供了一些重要的优势,例如强大的搜索和权重系统。更不用说Sol
MongoDB(和其他)确实有一些优势,比如它们的API的易用性。新建文档、创建id并存储它。完成。这是一个很好的问题,我已经思考了很多。我将总结我的经验教训:
我的2美分,希望能有所帮助。您不能在solr中部分更新文档。为了更新文档,您必须重新发布所有字段 和性能问题。如果不提交,对solr的更改将不会生效,如果每次都提交,性能将受到影响 solr中没有事务 由于solr有这些缺点,所以有时NoSQL是更好的选择 更新:Solr 4+开始支持提交和软提交。请参阅最新文档
另外请注意,有些人已经将Solr/Lucene集成到Mongo中,方法是将所有索引存储在Solr中,并监控oplog操作,并将相关更新级联到Solr中 使用这种混合方法,您可以真正做到两全其美,具有诸如全文搜索和快速读取等功能,并具有可靠的数据存储,还可以具有极高的写入速度 设置起来有点技术性,但是有很多oplog零售商可以集成到solr中。看看rangespan在本文中做了什么
因为没有人提到它,所以让我补充一点,MongoDB是无模式的,而Solr强制执行模式。因此,如果文档的字段可能会更改,这就是选择MongoDB而不是Solr的原因之一。我们将MongoDB和Solr结合使用,它们的性能很好。你可以在我描述我们如何一起使用这些技术的地方找到我的答案。这里有一段摘录: […]然而,我们观察到,当索引 尺寸增大。我们意识到最好的解决方案是同时使用Solr和Solr 和Mongo DB在一起。然后,通过存储Solr和MongoDB 将内容导入MongoDB并使用Solr创建全文索引 搜索。我们只在Solr索引中存储每个文档的唯一id 并在Solr上搜索后从MongoDB检索实际内容。 从MongoDB获取文档比Solr更快,因为没有 分析仪、计分仪等[…]
根据我对两者的经验,Mongo非常适合简单、直接的使用。我们遇到的主要Mongo缺点是在意外查询上的性能差(您无法为所有可能的筛选/排序组合创建Mongo索引,您不能)
Lucene/Solr在这里大行其道,特别是FilterQuery缓存,性能非常出色。@mauricio scheffer提到了Solr 4——对于那些对此感兴趣的人,LucidWorks将Solr 4描述为“NoSQL搜索服务器”,并在视频中详细介绍了NoSQL(ish)功能。(ish表示他们的无模式版本实际上是一个动态模式。)如果您只想使用键值格式存储数据,不建议使用Lucene,因为它的反向索引将浪费太多磁盘空间。由于数据保存在磁盘上,它的性能比NoSQL数据库(如redis)慢得多,因为redis将数据保存在RAM中。最