Couchdb Mango性能与Map Reduce视图

Couchdb Mango性能与Map Reduce视图,couchdb,couchdb-mango,Couchdb,Couchdb Mango,我刚刚注意到,在Couchdb 2.0的版本中,提到芒果查询被推荐用于新的应用程序。还提到Mango索引显然比javascript查询快2倍到10倍,这让我非常惊讶,因此我有很多问题: 地图/缩小视图是否正在逐步淘汰?我希望答案是否定的,因为在我看来,Mango并没有涵盖Map/Reduce的所有用例(最简单的例子是Reduce本身),而且这种查询风格的灵活性似乎也更有限。但是我更愿意问,因为有人推荐: 我们建议所有新的应用程序开始使用芒果作为默认 我们知道Map/Reduce视图依赖于B

我刚刚注意到,在Couchdb 2.0的版本中,提到芒果查询被推荐用于新的应用程序。还提到Mango索引显然比javascript查询快2倍到10倍,这让我非常惊讶,因此我有很多问题:

  • 地图/缩小视图是否正在逐步淘汰?我希望答案是否定的,因为在我看来,Mango并没有涵盖Map/Reduce的所有用例(最简单的例子是Reduce本身),而且这种查询风格的灵活性似乎也更有限。但是我更愿意问,因为有人推荐:
我们建议所有新的应用程序开始使用芒果作为默认

  • 我们知道Map/Reduce视图依赖于B树,但我在文档或邮件列表中找不到关于Mango背后的魔力的任何见解。芒果对我来说基本上是白色的魔法。然而,我可以说,深入了解javascript视图在幕后是如何被索引的对于避免陷阱、幼稚的实现以及优化性能非常有帮助。有人对芒果的工作原理有什么见解吗?索引也是B-树吗?由于不再有设计文档,索引何时更新?性能增益来自哪里?(对我来说,这些收益与直觉相反,因为据我所知,javascript查询的性能来自映射函数的预计算性质)

基本上,我所追求的是一方面对芒果的一些见解,另一方面,对芒果和Map/Reduce在2.x时代应该如何共存的一个概述。

我最近尝试将我的应用程序切换到使用芒果查询,结果是完全取消了它并切换回Map/Reduce。以下是我的一些理由:

  • Mango在处理没有确切指定要使用的索引的查询时会出现问题。上周末这一次让我兴奋了一阵子。如果不指定索引,有时会选择一个备用索引并返回无(或不正确)结果
  • 芒果表演不是“魔术”。许多类型的查询最终都会在内存中进行搜索。coach将选择最适合的索引,然后遍历内存中的所有记录,以适合角落的情况。Cloudant通过使用Couchdb中没有的基于“文本”的搜索来解决其中一些问题
  • 正如您所指出的,Mango搜索无法很好地处理某些类型的查询构造。我不认为我的应用程序过于复杂,但我遇到了几种情况,我无法为手头的任务构建合适的芒果查询。这里的一个主要问题是搜索数组以查找标记(例如,搜索以查看哪些用户是组的成员)。Mango无法索引数组元素,因此求助于在内存中进行完全扫描
  • 视图具有一些非常强大的功能,可以以列表的形式转换搜索结果。这在芒果中是不存在的

  • 您的里程数可能会有所不同,但我想提醒您,这仍然是一个全新的功能。

    我不熟悉Mango和CouchDB,但我想我可以提供一些见解。一旦你的索引/视图被更新,Mango就不会更快了。芒果带来的巨大性能提升是当您第一次创建索引时,因为coach不需要为此创建单独的couchjs过程


    我发现,即使您的某些文档很大,Mango也能正常工作。目前CouchDB 2.0.0(至少在windows上)中,大型文档会使与Map/Reduce一起使用的couchjs.exe视图服务器崩溃。CouchDB 1.6.1的情况并非如此,在开发版本中已得到修复,核心开发人员的回答是:

    一些好问题。我认为芒果永远不会取代地图/地图 完全是。它是另一种查询工具。什么是伟大的 Mango查询语法的特点是更易于理解和使用 开始吧。我们可以在很多地方使用它,除了 查询文档。它可用于复制和筛选 变化反馈。我们希望很快能得到对验证文档的支持 还有更新

    芒果下面使用的是erlang map/reduce。也就是说它是 像map/reduce一样创建B树索引。让它更快的是 而是使用erlang/native函数来创建B树 javascript的应用。很久以前我写了一篇关于内部结构的博客文章 PockDB的find[1]是PockDB的mango语法。可能吧 帮助您进一步了解内部结构是如何工作的。钥匙 需要理解的是,有一个映射查询部分使用 B-树和内存中的过滤器。理想情况下,过滤你的内存越少 执行查询的速度越快

    我想说芒果在很大程度上是一个过程中的工作,但基本的 地面工作已经完成。我们肯定有可以改进的地方。 我看到它在开发人员开始一个新项目时被大量使用 因为它可以快速简单地进行基本查询,比如通过电子邮件查找 地址或查找名为“John Rambo”的所有用户

    希望有帮助

    [1]


    我可以用大型文档和couchjs来证实这个内存问题对我来说也是一个巨大的问题。视图和列表构成了一个难以置信的组合。很遗憾看到列表被弃用。这个答案的来源是什么?我知道它来自一个核心开发者-谁?