随着基于文档数据库的NoSQL运动的发展,我最近开始关注MongoDB.我注意到,如何将项目视为"文档"有着惊人的相似性,就像Lucene(以及Solr的用户)所做的那样.

所以,问题是:Why would you want to use NoSQL (MongoDB, Cassandra, CouchDB, etc) over Lucene (or Solr) as your "database"?

我(我相信其他人)在寻找答案时,会对它们进行深入的比较.让我们一起跳过关系数据库讨论,因为它们有不同的用途.

Lucene提供了一些重要的优势,比如强大的搜索和权重系统.更不用说Solr中的方面了(Solr很快就会集成到Lucene中,耶!).您可以使用Lucene文档来存储ID,并像MongoDB一样访问文档.将其与Solr混合,现在就可以得到一个基于Web服务的负载平衡解决方案.

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

MongoDB的限制让我想起了使用MemCached,但我可以使用微软的Velocity,并拥有比MongoDB更强大的分组和列表收集能力(我认为).无法比在内存中缓存数据更快或更具可扩展性.就连Lucene也有内存供应商.

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

推荐答案

这是一个很好的问题,我已经思考了很多.我将总结我的经验教训:

  1. 在几乎所有情况下,您都可以轻松地使用Lucene/Solr代替MongoDB,但反之亦然.格兰特·英格索尔post sums it up here.

  2. MongoDB等服务似乎不需要搜索和/或刻面.对于摆脱RDBMS世界的程序员来说,这似乎是一个更简单、更容易的过渡.除非你已经习惯了Lucene&;Solr的学习曲线更陡峭.

  3. 使用Lucene/Solr作为数据存储的例子并不多,但《卫报》已经取得了一些进展,并在优秀的slide-deck篇文章中总结了这一点,但他们也没有promise 完全加入Solr潮流,并"调查"Solr与CouchDB的结合.

  4. 最后,我将提供我们的经验,不幸的是,我不能透露太多关于商业 case 的信息.我们在数TB的数据规模上工作,这是一个近乎实时的应用程序.在调查了各种组合后,决定继续使用Solr.到目前为止(6个月&;计数)没有遗憾,也看不出有理由改用其他方法.

小结:如果你没有搜索要求,Mongo提供了一个简单的&;强有力的方法.然而,如果搜索是你产品的关键,那么你最好还是坚持使用一种技术(Solr/Lucene)并对其进行优化——减少移动部件.

我的2美分,希望有帮助.

Mongodb相关问答推荐

如何拉平mongo DB中的对象并在根目录中保存时有条件地重命名字段?

Tableau 与 Mongo DB Atlas by MongoDB 的连接缓存问题

Mongo 聚合查找 $gte 6 个月前的日期,以DD-MM-YYYY格式存储为字符串

MongoDB 按日期时间字段查询 1h 间隔

错误起草的 MongoDB 聚合管道 $match 阶段

MongoDB聚合:如何将查找结果放入嵌套数组中?

Mongodb聚合查找异常值

以聚合顺序使用 $$ROOT

MongoID find 或 find_by

更新 mongoengine 中的嵌入文档列表

MongoDB:按标签获取文档

如何在array.NET驱动程序中的元素属性上创建MongoDB MultiKey索引

在 MongoDB 中合并两个集合

遍历所有 Mongo 数据库

填充mongoose后查找

RoboMongo:不显示所有文档

如何在mongoose的嵌套填充中 Select 特定字段

何时使用Singleton单例、Transient和使用 Ninject 和 MongoDB 的请求

MongoDB InsertMany 与 BulkWrite

Hadoop Map/Reduce 与内置 Map/Reduce