CouchDB / PouchDB 中的视图与过滤器

Views vs Filters in CouchDB / PouchDB

我在 CouchDB 中有一个设计文档。我已经设置了视图和过滤器。

{
  "_id": "_design/my_index_id",
  "_rev": "17-fa5c543fcc80f4420aa98d58f7a07130",
  "views": {

    "jobsbyid": {
      "map": "function (doc,req) {if  (doc.type === 'job') {emit(doc.id);}}"
    }
  },
  "filters": {
    "myfilter": "function (doc, req) {return req.query.type === 'job'}"
}

视图和过滤器之间有什么不同。在性能、用例和使用方面。什么时候使用视图,什么时候使用过滤器?

在 CouchDB 中,您有不同的复制过程过滤选项。所有这些都记录在此处 CouchDB filtering options

关于过滤,您应该考虑到过滤是 CouchDB 中最昂贵的操作之一,随着数据库的增长,它可能会导致您遇到一些性能下降问题。你可以查看这个答案

过滤器或视图的使用在性能方面几乎相同,因为它们在每个过滤请求中过滤整个数据库。这在文档中有说明

Using _view filter doesn’t queries the view index files, so you cannot use common view query parameters to additionally filter the changes feed by index key. Also, CouchDB doesn’t returns the result instantly as it does for views - it really uses the specified map function as filter.

Moreover, you cannot make such filters dynamic e.g. process the request query parameters or handle the User Context Object - the map function is only operates with the document.

使用视图进行过滤的优点是您可以重复使用地图函数进行过滤。

所以这两种方法的用例非常相似,只是过滤器可以访问查询参数或安全上下文。