gpt4 book ai didi

javascript - Firestore 是否缓存查询结果?

转载 作者:行者123 更新时间:2023-12-04 13:01:15 26 4
gpt4 key购买 nike

想象一下,我将对具有 100 个文档的特定集合运行查询。
我将在每页显示 20 个结果,使用 query cursors .
如果我的用户从第 1 页开始,然后按 Next按钮,直到他看到第 5 页,他将阅读所有 100 个文档。
问题
如果他按下 Previous按钮从第 5 页返回到第 1 页,我是否需要为 180 次读取付费,或者 Firestore 有某种缓存期,它会在没有任何新读取的情况下返回相同的结果?
180 = 1 到 4 页两次,第 5 页一次。
注:我会解雇 get()每个页面上的方法与相应的startAfter() .
我问这个是因为来自 pricing operations page ,有关于监听查询结果的信息:

Listening to query results

Cloud Firestore allows you to listen to the results of a query and get realtime updates when the query results change.

When you listen to the results of a query, you are charged for a read each time a document in the result set is added or updated. You are also charged for a read when a document is removed from the result set because the document has changed. (In contrast, when a document is deleted, you are not charged for a read.)

Also, if the listener is disconnected for more than 30 minutes (for example, if the user goes offline), you will be charged for reads as if you had issued a brand-new query.


注:我知道在这种情况下我没有设置监听器,但我想知道在我的情况下是否有任何模拟行为。

最佳答案

由于您没有设置监听器,因此每次调用 get()将从服务器获取最新的数据,您需要为这些读取付费。有两种方法可以避免每次都为新读取收费:

  • 使用 query.onSnapshot(...)监听器,它将随着数据的变化而不断更新。
  • 使用query.get({source: "cache"})从本地缓存中获取。见 GetOptions详情。

  • 对于 (2) 如果缓存中没有数据, get()将返回没有文档的快照,因此您要么需要跟踪已获取的页面,要么进行某种回退:
    let snap = await q.get({source: "cache"});
    if (snap.empty) {
    // cache didn't have anything, so try a fetch from server instead
    snap = await q.get();
    }

    关于javascript - Firestore 是否缓存查询结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56691406/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com