【问题标题】:pouchdb.query is taking more timepouchdb.query 需要更多时间
【发布时间】:2016-01-12 22:54:44
【问题描述】:

我的邮袋数据库中有大约 50 个文档。我在加载角度服务时查询数据库。我知道我们可以使用比查询方法快得多的 alldocs 方法。但在我的情况下, allDocs 是不够的,因为每个文档都会有 lastUpdatedTime 以毫秒为单位。基于 lastUpdatedTime,我将查询数据库以获取按 lastUpdatedTime 排序的新记录。但是 alldocs 方法没有根据文档归档值对文档进行排序的选项。我的文档设计是这样的 var byTimestampDoc = this.createDesignDoc('by_timestamp', function (doc) { if (doc.objType == "message") { emit(doc.lastUpdated); } }); db.put(byTimestampDoc)


目前,在 Android 中加载应用程序时查询需要大约 9781.726 毫秒来返回行,但在 iOS 中则需要不到 3 秒。谁能帮我提高性能。

【问题讨论】:

    标签: cordova pouchdb


    【解决方案1】:

    如果您只想知道最近更新了哪些文档,您实际上可以使用内置的changes() API (docs here),它与allDocs() 一样快。

    查询往往很慢,因为 1) map() 函数必须为数据库中的每个文档运行(例如,objType 不是 'message' 的文档),以及2)它只会在你query()它的那一刻更新。

    因此,如果您有一个包含频繁更改文档的数据库,则每个 query() 都会阅读自您上次 query()d 以来所有更改的文档,这就是它缓慢的原因。

    【讨论】:

    • 如果我使用 allDocs 方法将记录放入我的控制器中,然后如果我基于 lastUpdatedTime 以编程方式对这些记录进行排序,它是否会出现比 query() 的任何性能问题。如果我使用控制器中的 allDocs 加载记录,则需要更少的时间。但是,如果我将相同的代码放入需要时间的服务中。
    • 如果您在内存中进行排序,那么您读取整个数据库只是为了对其进行排序。如果您的数据不断变化,这可能会更快,但在这种情况下,我会问使用 PouchDB 是否有意义,或者您是否应该将所有对象保留在内存中,然后将它们作为一个大的 JSON blob 保存到 LocalForage .可能更有意义。
    • 为了更直接地回答您的问题,first query() 最慢,因为它必须构建数据并将其写入磁盘,但第二次应该是快点。我说“应该”是因为如果数据不断变化,那么它就必须重建。
    • 或者,您也可以尝试使用 PouchDB 内存适配器,然后偶尔使用 pouchdb-replication-stream 或使用内存数据库和 IndexedDB 数据库之间的定期复制将您的数据库转储到 IndexedDB。跨度>
    • 感谢您的建议和深入的解释。我将尝试在内存适配器中使用 PouchDB。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 2022-01-23
    • 2021-02-22
    • 2020-04-19
    • 2016-09-07
    相关资源
    最近更新 更多