【问题标题】:Firestore request produces unexpected number of readsFirestore 请求产生意外的读取次数
【发布时间】:2020-01-19 01:19:06
【问题描述】:

在执行使用 Flutter 创建的 Firestore-Test-App 后,我查看 Firestore 分析以查看我的 Test-App 发出了多少请求。它告诉我,我在 1 次测试开始时至少读取了 20 到 60 个文档。问题是,按照我的理解,测试最多应该产生 1-3 次读取。

我读过https://firebase.google.com/docs/firestore/pricing。它确实有助于理解 Firestore 的计费逻辑,但按照文章中的逻辑,我应该最多读取约 5 次。 此线程:Firestore - unexpected reads 还暗示,文档读取可能来自打开的 Firebase 控制台,正在查看文档。所以我在测试前关闭它并在 30 分钟后打开它。这并没有改变结果。我还设置了断点,代码只执行了一次。

我打开了一个全新的 Flutter 项目来测试它。 这是发出读取请求的唯一部分:

 CollectionReference dbUsers = dbInstance.collection("Users"); 
 var user = dbUsers
      .where("docId", isEqualTo: fireAppUser.user.uid)
      .limit(1)
      .snapshots();

  var _userSub = user.listen((value) {
    if (value.documents.isNotEmpty && value.documents.first.data != null)
      print(value.documents.first.data);
  });
_userSub.cancel()

低于我的 Firestore 规则,目前是默认设置。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write;
    }
  }
}

我的数据库中正好有 5 个文档。

我预计最多可以读取约 5 次文档。请帮助我理解为什么此片段会导致意外数量的读取。是什么原因造成的?

编辑:忘记将 cancel() 附加到 sn-p

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    该代码可以进行几乎无限次数的读取,因为它为文档添加了一个侦听器。在您第一次运行它时会花费 1 次读取,并会在继续添加侦听器时继续产生读取,因为文档会随着时间的推移而发生变化。

    如果会计对您没有意义,请contact Firebase support 提供准确的复制说明。

    【讨论】:

    • 糟糕,sn-p 没有被正确复制。我确实在订阅后立即取消订阅。只是为了测试。
    • 看起来你在监听器收到第一个回调之前就取消了它。
    • 我知道,没关系,这只是一个测试。尽管如此,sn-p 会导致大量的文档读取。知道为什么吗?
    猜你喜欢
    • 2020-11-10
    相关资源
    最近更新 更多