PouchDB中的物化视图

时间:2019-01-25 17:38:16

标签: pouchdb materialized-views

是否可以在PouchDB中创建实例化视图?我想要这样做是因为数据几乎是静态的,但是用户经常进行查询。

1 个答案:

答案 0 :(得分:1)

安静,像一个实体化的视图。 您更改数据,用户执行查询,PouchDB处理索引,首先对所有索引进行“索引”后,所有工作都像物化视图,在内存中建立索引,直到发生更改,然后我们在下一个查询中更新索引。一遍又一遍。

https://pouchdb.com/guides/queries.html

  

持久查询持久查询要快得多,   在生产应用程序中使用query()API的预期方式。使用   持久查询有两个步骤。

     

首先,创建一个设计文档,其中描述了地图功能   您想使用:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <limits.h>

char* doStuff(char* line){
    return line;
}

int main(int argc, char *argv[])
{
    char *line = malloc(sizeof(char)*LINE_MAX);
    while(fgets(line, LINE_MAX, stdin)!= NULL)
    {
        line = doStuff(line);
        printf("%s", line);
    }
    return 0;
}

然后,您实际上使用保存时提供给设计文件的名称来查询它:

// document that tells PouchDB/CouchDB
// to build up an index on doc.name

var ddoc = {
  _id: '_design/my_index',
  views: {
    by_name: {
      map: function (doc) { emit(doc.name); }.toString()
    }
  }
};
// save it
pouch.put(ddoc).then(function () {
  // success!
}).catch(function (err) {
  // some error (maybe a 409, because it already exists?)
});

请注意,第一次查询时,它会很慢,因为直到您查询索引才建立索引。要解决此问题,您可以执行一个空查询以启动新的构建:

db.query('my_index/by_name').then(function (res) {
  // got the query results
}).catch(function (err) {
  // some error
});