Firebase Cloud Functions // 快照没有 readTime

CDo*_*Doe 18 firebase google-cloud-functions

我在 Firebase Cloud Functions 日志中收到奇怪的警告消息:

Snapshot has no readTime. Using now()
Run Code Online (Sandbox Code Playgroud)

我正在运行相当多的函数,其中有很多函数都会发生这种情况。但这种情况并不是每次调用都会发生,只是偶尔发生。

snapshotConstructor谷歌搜索在库中的函数中找到了负责此消息的行firebase-functions。您可以在 Github 上找到它。似乎data.value.readTime在 上不可用Event

到底是什么导致了这个错误,这是一个问题吗?


更新:我发现当onWrite同一个文档同时触发函数时就会发生这种情况。我有一些这样开始的函数:

functions
.firestore.document('organizations/{organizationId}/updates/{updateId}')
.onWrite(async (change, context) => {...
Run Code Online (Sandbox Code Playgroud)

同样,这种情况不会每次被触发时都会发生,但经常足以引起关注。

ano*_*rmh 3

Firestore 过去对单个文档的软限制为每秒 1 次写入。此软限制已从文档中删除,但仍有信息,例如有关读/写操作的 Firebase 文档

读写操作

  • 应用程序更新单个文档的确切最大速率在很大程度上取决于工作负载。有关详细信息,请参阅对单个文档的更新

该链接指向提供有关写入单个文档的警告的文档:

对单个文档的更新

在设计应用程序时,请考虑应用程序更新单个文档的速度。表征工作负载性能的最佳方法是执行负载测试。应用程序更新单个文档的确切最大速率在很大程度上取决于工作负载。因素包括写入速率、请求之间的争用以及受影响的索引数量。

文档写入操作会更新文档和任何关联的索引,并且 Firestore 会在一定数量的副本上同步应用写入操作。当写入速率足够高时,数据库将开始遇到争用、更高的延迟或其他错误。

这就是这里发生的事情:

  1. 您在很短的时间内对单个文档进行了多次写入
  2. 您有 onWrite 触发的函数,它们会响应这些事件而触发
  3. Firestore 正在尝试获取有关正在写入的文档的信息,但由于单个文档的高写入速率引起的竞争条件,它无法这样做
  4. 然后错误会出现在日志中

解决方案是您需要将写入速率限制为单个文档。此答案解释说,应使用关键可视化工具来识别应用程序读/写行为中的热点,以限制这些问题。否则,您将继续看到争用、更高的延迟或文档中提到的其他错误。