【问题标题】:Questions about firestore cache and reads charge关于 Firestore 缓存和读取费用的问题
【发布时间】:2019-10-30 06:00:59
【问题描述】:

我了解 Firestore 缓存和读取费用在这些情况下的行为方式。我不确定它是否正确。

如果我在一个集合中有 2000 个文档。此集合名称为“testCollection”。这些文档不会更改、更新或删除。 我的客户端是安卓,已经启用离线持久化,设备当前在线

1.

db.collection("testCollection").onSnapshot(function(doc) {});

2000 次读取充电和 这些文档被缓存。 然后重新打开应用程序并再次运行相同的代码

db.collection("testCollection").onSnapshot(function(doc) {});

另外 2000 次读取收费导致 Firestore 需要检查每个文档是否是最新的。 所以 2000+2000 读取收费

2.

我不确定这是如何表现的。 只需一起运行相同的代码

db.collection("testCollection").onSnapshot(function(doc) {}); 
db.collection("testCollection").onSnapshot(function(doc) {});

我认为是 2000 次读取收费,因为数据保持最新

3.

db.collection("testCollection").limit(300).onSnapshot(function(doc) {}); 
db.collection("testCollection").limit(800).onSnapshot(function(doc) {}); 

总共 1100 次读取已收费。因为它是不同的查询。

我是不是有什么误解或不对劲?

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    2000 次读取收费并且这些文档被缓存。

    这是正确的,因为这是您第一次执行这些读取操作。

    另外 2000 次读取收费,因为 Firestore 需要检查每个文档是否是最新的。所以 2000+2000 读取收费

    一旦文档在您的缓存中并且这些文档没有更改(如您所说),所有读取操作都来自缓存。您不会为来自缓存的读取操作付费。

    我认为会收取 2000 次读取的费用,因为数据会保持最新

    只有在 Firebase 服务器上的数据发生更改时,您才需要为其他读取操作付费,否则,您将从缓存中获取数据。

    总共 1100 次读取已收费。因为这是一个不同的查询

    如果您已经执行了初始查询并且您已经获得了那 2000 个文档,如果您执行另一个查询,无论您是否使用限制,您都会从缓存中读取所有这些文档。

    【讨论】:

    • 这非常有帮助,非常感谢。我认为“检查文档是否是最新的”这个动作会收取阅读费用。因此,如果这些缓存的文档与服务器数据相同,那么我不会收取费用吗?就像我的设备缓存是空的并且第一次运行orderBy("timestamp").limit(300).onSnapshot(function(doc) {}) 然后运行orderBy( "timestamp").limit(800).onSnapshot(function(doc) {}) 它应该按 800 次读取收费
    • 我问这个问题是因为youtu.be/poqTHxtDXwU这个官方7:55的视频说你增加限额会收费。我想我错了,只有当你使用 .get 时才会发生
    • 如果您增加限制,您将需要为新的读取操作付费,而不是为已经在缓存中的文档付费。
    • @AlexMamo 这种行为对于 Firestore Web 客户端/不管离线支持都是一样的,对吧?
    • @FabianMerchan 无需检查,因为仅当数据库发生更改时才会触发侦听器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 2011-06-26
    • 2021-12-09
    • 2014-06-13
    • 2011-07-29
    • 2020-01-30
    • 1970-01-01
    相关资源
    最近更新 更多