CouchDB芒果性能与地图减少视图



我刚刚注意到,在Couchdb 2.0的发行说明中,有人提到建议对新应用程序进行芒果查询。还提到,显然芒果索引比JavaScript查询快2倍到X10,这使我感到惊讶,因此我有很多问题:

  • 地图/减少视图被淘汰了吗?我希望答案是否定的,因为在我看来芒果并不能涵盖地图/减少的所有用例(最简单的例子是减少自身),并且这种查询样式的灵活性似乎也受到更大的限制。但是,由于建议,我更喜欢问:

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

  • 我们知道,地图/减少视图取决于B-Trees,但是在DOC或有关芒果背后的魔术的邮件列表中,我找不到任何见解。芒果本质上对我来说是白魔法。但是,我可以说,有深入的了解如何在幕后索引JavaScript视图非常有帮助,以避免陷阱,天真的实现以及优化性能。有人对芒果的工作方式有任何了解吗?索引b-trees也是吗?由于不再有设计文档,何时更新索引?性能收益从何而来?(这些收益与我是违反直觉

我本质上是一方面的一些关于芒果的见解,另一方面,关于芒果和地图/减少的概述应该在2.x时代生活在一起。

<</p>

我最近尝试将我的应用切换到使用芒果查询,以使其完全取得并切换回MAP/RESID。这是我的一些原因:

  1. 芒果在处理未准确指定使用索引的查询时是故障的。上周末,这个让我打了一段时间。如果您不指定索引,有时会选择替代索引并返回否(或不正确)结果。
  2. 芒果性能不是"魔术"。许多类型的查询最终将在内存搜索中进行。Couch将选择最佳的拟合索引,然后在记忆中浏览所有这些记录以适合角落案例。通过说使用"文本"的搜索,Coundant Handant Wave在其中一些问题上,这些搜索在Couchdb中不可用。
  3. 正如您指出的那样,芒果搜索根本无法很好地处理某些类型的查询结构。我不会认为我的应用程序过于复杂,但我遇到了几种情况,我无法为手头的任务构建合适的芒果查询。这里的主要一个是搜索阵列以查找标签(例如,搜索以查看哪些用户是组的成员)。芒果无法索引数组元素,因此请在内存中进行全面扫描。
  4. 视图具有一些非常有力的功能,可用于以列表的形式转换搜索结果。芒果不存在。

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

核心开发人员的答案:blockquote>

一些好问题。我认为芒果永远不会取代地图/减少 完全地。这是一种替代查询工具。有什么好处 芒果查询语法是,它更容易理解和 开始。我们可以在公正以外的许多地方使用它 查询文件。它可用于复制过滤和 变化馈送。我们希望很快能够支持验证文档 也更新。

芒果下面使用Erlang Map/降低。这意味着是 像MAP/RESID一样创建B-Tree索引。使它更快的是什么 它正在使用erlang/本机函数来创建b-tree JavaScript。我很久以前就写了一篇博客文章 pouchdb-find [1]是pouchdb的芒果语法。它可能 帮助您更多地了解内部功能的工作方式。钥匙 要理解的是,有一个地图查询部分,它使用 B树和一个内存过滤器。理想情况下,记忆过滤越少 查询的速度越快。

我会说芒果在过程中是一项工作,但是基本的 地面工作已经完成。我们肯定可以改进一些事情。 当开发人员启动一个新项目时,我已经看到它使用了很多 因为它快速易于进行基本查询,例如通过电子邮件查找 地址或以" John Rambo"的名称找到所有用户。

希望会有所帮助。

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

我是Mango和Couchdb的新手,但我认为我可以提供一些见识。一旦您更新了索引/视图,芒果就不会更快。芒果的巨大性能是您首次创建索引时,因为Couch不需要为此创建单独的couchjs进程。

我发现,即使您的某些文档很大,芒果也可以很好地工作。当前使用CouchDB 2.0.0,至少在Windows的情况下,大型文档崩溃了couchjs.s.exe视图服务器,与MAP/RELAD一起使用。Couchdb 1.6.1并非如此,并且已经在开发版本中修复https://github.com/apache/couchdb-couch/commit/1659fda5ddd180808f55946a637fc2637fc26c73913913b57e96666b57e9666666666

最新更新