我的小袋数据库中有大约50个文件。我正在加载角度服务时查询数据库。我知道我们可以使用 alldocs 方法,它比查询方法快得多。但在我的情况下, allDocs 是不够的,因为每个文档都有lastUpdatedTime,以毫秒为单位。基于lastUpdatedTime,我将查询数据库以获取按lastUpdatedTime排序的新记录。但是alldocs方法没有根据文档字段值对文档进行排序的选项。我的doc设计类似于var byTimestampDoc = this.createDesignDoc('by_timestamp', function (doc) {
if (doc.objType == "message") {
emit(doc.lastUpdated);
}
});
db.put(byTimestampDoc)
现在查询大约需要9781.726ms才能在Android中加载应用程序时返回行,但在iOS中则需要不到3秒的时间。任何人都可以帮助我改善表现。
答案 0 :(得分:1)
如果您只是想知道哪些文档最近更新过,您实际上可以使用内置的changes()
API(docs here),这与allDocs()
一样快。
查询往往很慢,因为1)map()
函数必须为数据库中的每个文档运行(例如objType
不是'message'
的文档{1}},)和2)它只会在您query()
时更新。
因此,如果您的数据库中包含频繁更改的文档,则每个query()
都会读取每个已更改的文档,因为您上次query()
它,这就是为什么它很慢。