是否可以在PouchDB中创建实例化视图?我想要这样做是因为数据几乎是静态的,但是用户经常进行查询。
答案 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
});