2016-11-22 99 views
9

我刚刚注意到,在Couchdb 2.0的the release notes,它被提及芒果查询推荐用于新的应用程序。它也mentionned,显然芒果指数从2倍到X10不是JavaScript查询这着实让我吃惊得更快,因此我有一些问题:Couchdb芒果性能vs地图减少查看

  • 是的Map/Reduce的观点被淘汰?我期待答案是否定的,因为在我看来,Mango并没有涵盖Map/Reduce的所有用例(最简单的例子就是Reduce本身),而且这种查询风格的灵活性似乎也更加有限。但米喜欢问,因为该建议:

我们建议所有新应用开始使用芒果作为默认值。

  • 我们知道的Map/Reduce意见依靠B树,但我找不到任何见解,在文档或关于芒果背后神奇的邮件列表。芒果对于我来说基本上是白色的魔法。然而,我可以说,深入了解javascript视图如何在幕后编入索引,对于避免陷阱,简化实现以及优化性能非常有帮助。有没有人有任何关于芒果如何工作的见解?索引B-trees是否也是?由于不再有设计文件,何时更新索引?性能收益从哪里来? (这些收益对我来说是违反直觉的,因为在我的理解中,javascript查询的性能来自Map函数的预先计算性质)

我基本上追求的是一方面关于芒果另一方面,概述Mango和Map/Reduce如何在2.x时代共同生活。

回答

3

答:

一些很好的问题。我不认为芒果会完全取代Map/Reduce 。它是一种替代查询工具。芒果查询语法 的好处在于它更容易理解,并且 开始使用。我们可以在 以外的很多地方查询文档。它可用于复制过滤和 更改提要。我们希望很快能够支持验证文档 更新。

芒果底下是使用erlang map/reduce。意思是 就像map/reduce那样创建一个B树索引。使其更快的是 它使用erlang/native函数来创建B-Tree,而不是使用javascript的 。我很久以前写了一篇关于PouchDB-find [1]的内部 的博客文章,这是PouchDB的芒果语法。它可能帮助你更多地理解内部工作。要了解的关键是 有一个Map查询部分,它使用了B树和内存中的过滤器。理想情况下,内存过滤越少,您的查询速度越快。

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

希望有所帮助。

[1] http://www.redcometlabs.com/blog/2015/12/1/a-look-under-the-covers-of-pouchdb-find

+0

这个答案的来源是什么?我知道这是来自核心开发人员 - 谁? –

7

我最近尝试将我的应用程序切换为使用芒果查询,并将结果完全取消并切换回地图/缩小。以下是我的一些原因:

  1. 芒果在处理不完全指定要使用的索引的查询时出错。上周末这段时间让我bat bat了一阵子。如果您未指定索引,则有时会选择替代索引并返回无(或不正确)结果。
  2. 芒果的表现不是'魔术'。许多类型的查询最终都会在内存搜索中进行。沙发将选择最合适的指数,然后穿过记忆中的所有记录以适应角落案例。 Cloudant通过说使用基于“文本”的搜索来解决其中一些问题,这些搜索在Couchdb中不可用。
  3. 正如您所指出的,芒果搜索根本无法很好地处理某些类型的查询结构。我不认为我的应用过于复杂,但我遇到了几种情况,我无法为手头的任务构建合适的芒果查询。这里主要是搜索数组来查找标签(例如,搜索查看哪些用户是组的成员)。芒果不能索引数组元素,因此可以在内存中进行全面扫描。
  4. 视图具有一些非常强大的功能,用于以列表形式对搜索结果进行转换。这在芒果中不存在。

您的里程可能会有所不同,但只是想留下警告,这仍然是相当新的功能。

+0

意见,并列出做出一个令人难以置信的组合。很遗憾看到名单被弃用。 –

1

我是Mango和CouchDB的新手,但我想我可以提供一些见解。一旦你的索引/视图更新,芒果没有更快。芒果的巨大性能增益是当您第一次创建索引时,因为沙发不需要为此创建单独的couchjs过程。

我发现即使你的一些文件很大,芒果也能很好地工作。目前使用CouchDB 2.0.0,至少在Windows中,大型文档会崩溃与Map/Reduce一起使用的couchjs.exe视图服务器。这不是使用CouchDB 1.6.1的情况,并已固定在开发版本由核心开发者https://github.com/apache/couchdb-couch/commit/1659fda5dd1808f55946a637fc26c73913b57e96

+0

我可以用大文件证实这个内存问题,而且couchjs对我来说也是一个很大的问题。 – reddy