allDocs 之间的区别,在关系袋中找到性能

Difference between allDocs, find performance in relational-pouch

我正在开发 Ionic 应用程序。我将 PouchDB 与 relational-pouch localy 和 Cloudant remote 结合使用。我运行陷入了几个性能问题。目前数据库中只有 200 个文档。同步工作正常。

当我在初始同步完成后 运行 这段代码时,在我看来,我得到了奇怪的结果。 allDocs 在 60 毫秒后快速完成。 180 毫秒后找到。我在这里使用的是从 pouchdb 中查找,而不是 relational-pouch。这是互联网。我为字段 data.type 创建了一个索引。这是预期的行为吗?我希望视图会更快,因为基本上所有内容都应该使用索引预加载/更快。也许我没有做正确的索引。请指教

测试脚本

 console.time("allDocs");
        this.dataService.db.allDocs({
          include_docs: true,
          startkey: "supplier_2",
          endkey: "supplier_2\uffff"
        }).then(articles=>{  
          console.timeEnd("allDocs");
          console.log(articles);

            console.time("find");
            this.dataService.db.find({
              selector: {'data.type': 'supplier'},
            }).then(suppliers=> {
              console.timeEnd("find");
              console.log(suppliers);
            }).catch(err=> {
             console.log(err);
            });
          });

索引

this.db.createIndex({
      index: {
        fields: ['data.type'],
        name: 'dataTypeIndex',
        ddoc: 'dataType'
      }
    })

感谢您的支持! :)

查询数据最快的方法是使用主索引(文档 _id)。 当您使用带有 startKey 和 endKey 的 allDocs 时,您基本上是在使用主索引来搜索数据。如果您使用像 ${doc.type}::${someId} 这样的智能 ID,那么在使用 allDocs 时按类型搜索应该会更快。

另一方面,查找查询(或芒果查询)使用通过 createIndex 构建的二级索引。在无法根据文档 ID 执行查询的情况下使用它们。这些通常较慢并且有一些缺点,例如您不能使用正则表达式来搜索字段中的某些文本。

本文可能对您有所帮助(尤其是 "Use and abuse your doc IDs" 部分)

https://pouchdb.com/2014/05/01/secondary-indexes-have-landed-in-pouchdb.html