【问题标题】:Firebase Firestore get() counts as 3 api callsFirebase Firestore get() 计为 3 次 api 调用
【发布时间】:2019-03-17 21:46:37
【问题描述】:

本周我一直在开发一个简单的应用程序来学习使用 Firestore,并且我一直在配额页面上查看我的 api 调用。整个星期我几乎没有使用 400 个电话,但今天突然报告超过 50,000 个。现在,我的 Firestore 只有 2 个集合,而一个集合中只有 8 个文档。所以没有太多的数据。我的应用程序仍然非常原始,只能在其中一个中收集和添加/更新文档。我提到所有这些是为了说明我的应用程序并没有做太多事情,所以当我看到使用情况时非常惊讶。

我开始深入研究各个呼叫,并注意到当我执行单个呼叫时:

let db = fire.firestore();
db.collection("tags").get()
.then( snapshot => {
  console.log(snapshot);
})
.catch( error => {
  console.log(error);
})

Cloud Firestore API Calls 计数器增加了 3 个。没有自定义函数,没有其他数据库规则

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read: if request.auth.uid != null;
      allow write: if request.auth.uid != null;
    }
  }
}

我还没有研究过创建/更新文档,但是有人知道为什么这个 get() 会算作 3 次 api 调用吗?

【问题讨论】:

  • 该集合中存储了多少文档?
  • 只有 1 个文档包含大约 20 个布尔值。它的结构如下: { tag1: true, tag2: true, tag3: true... } 它用于填充自动完成字段,以便我可以通过这些标签搜索其他集合中的文档
  • 您确定代码只执行一次吗?是否有任何上下文可以提供或隔离该代码 sn-p?
  • 我将代码简化为我认为只有一个调用。它只被记录到控制台一次。我正在使用 React,这段代码在 componentDidMount 方法中。
  • 我假设这是由于您的安全规则。这是文档:firebase.google.com/docs/firestore/pricing#operations

标签: firebase google-cloud-firestore


【解决方案1】:

如果安全规则是原因,请尝试使用以下安全规则,直到应用程序处于开发过程中:

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

【讨论】:

    【解决方案2】:

    免责声明:

    我并不是说这可以解决您达到 50,000 多个 API 调用的问题,但我建议这很可能是您在该配额内遇到的问题。


    通过 Firestore 的控制台查看和编辑项目的数据将 计入您的整体Cloud Firestore API Calls 配额。

    同样,您可能觉得这很有帮助,但用户会测试他们的应用程序的次数更多(无论是运行身份验证、为字段写入新值还是云函数)同时观察数据变化。这将导致配额增加不一致,因为您实际上是同时在两个地方读/写。

    我建议通过使用最能描述发生过程的日志语句观察应用来尝试此操作。如果您仍然看到奇怪的配额增加,不幸的是它存在于您的代码中,而不是 Google。希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      • 2018-05-24
      • 2018-12-05
      相关资源
      最近更新 更多