pouchdb查找操作非常慢

时间:2019-05-29 17:52:20

标签: angular

我遵循了pouchdb-find的官方页面来搜索最新条目,它可以工作,但是速度很慢。调试显示:

pouchdb:find creating index +8m _design/idx-a5

pouchdb:find planning query +368ms {selector: {…}, fields: Array(7), sort}
pouchdb:find query plan +4ms {queryOpts: {…}, index: {…}, inMemoryFields: Array(1)}

当我第一次运行它时,查询计划花费+ 590ms。我现在的问题是,我需要显示结果,但是需要花几秒钟的时间才能将其返回给我。是因为我在每次调用时都创建了索引(索引ID始终相同,所以我认为它正在使用现有索引)。如何提高其检索数据的速度?我有1000个付款类型的文件,我需要一个。

  public getData(): Observable<any> {

    let vm: any = this;

    return new Observable(observer => {

      db.createIndex({
        index: {fields: ['paidOn']}
      }).then(function () {
        return vm.local.find({
          selector: {type: 'payment', paidOn: {$gt: null} },
          fields: ['paidOn'],
          sort: [{'paidOn' : "desc"}],
          limit : 1
        }).then(function (result) {

         observer.next(result)
         observer.complete()
        }).catch(function (err) {
          // ouch, an error
          observer.error(err);
          observer.complete();
        });;
      });



    });
  }

然后我明白了:

  getData().subscribe(data=>{

    if (data['docs'] != undefined && data['docs'].length>0){

      console.log(data['docs'][0]);

    }
  })

1 个答案:

答案 0 :(得分:0)

是的,如果您不更改索引,则不应在每次调用时都重新创建索引。试试这个。

let vm: any = this;
    vm.index = await db.createIndex({
        index: {fields: ['paidOn']}
      })

将这段代码移到对象的构造函数中或onInit函数上。

public async getData(): Promise<Observable<any>> {
    const result = await vm.local.find({
          selector: {type: 'payment', paidOn: {$gt: null} },
          fields: ['paidOn'],
          sort: [{'paidOn' : "desc"}],
          limit : 1
        });
    return new Observable(observer => {observer.next(result); observer.complete()});
  }

尽管现在我正在查看您的代码。您正在返回一个可观察对象以获取数据,然后立即完成该可观察对象。您应该保持相同的可观察性,并且当您想要更新数据或对其进行重构以仅返回承诺的结果而不必担心使用可观察性时,只需使用.next()方法。我对您的用例并不十分清楚,因此无法确定最适合您的情况。

编辑:异步函数返回promise,所以我修复了返回类型