Firebase云函数//快照没有readTime

xxb16uws  于 2023-04-07  发布在  其他
关注(0)|答案(1)|浏览(104)

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

Snapshot has no readTime. Using now()

我有很多函数在运行,其中有一些函数会发生这种情况,但并不是每次调用都会发生这种情况,只是偶尔发生。
在谷歌搜索中,在firebase-functions库中的snapshotConstructor函数中找到了负责此消息的行。您可以在Github上找到它。似乎Event上没有data.value.readTime
究竟是什么导致了这个错误,它是一个问题吗?
更新:我发现当同一文档同时触发onWrite函数时会发生这种情况。我有几个函数是这样开始的:

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

同样,它不会发生在每次他们被触发,但经常足以值得关注。

pkwftd7m

pkwftd7m1#

Firestore曾经对单个文档有每秒1次写入的软限制. This soft-limit has been removed from the documentation,但仍然有关于读/写操作的Firebase文档等信息:

读写操作

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

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

单文档更新

在设计应用时,请考虑应用更新单个文档的速度。表征工作负载性能的最佳方法是执行负载测试。应用更新单个文档的确切最大速率在很大程度上取决于工作负载。因素包括写入速率、请求间争用以及受影响的索引数。
文档写操作会更新文档和任何关联的索引,Firestore会在仲裁副本中同步应用写操作。在足够高的写速率下,数据库将开始遇到争用、更高的延迟或其他错误。
这就是现在的情况
1.在很短的时间内对单个文档进行多次写入
1.您有onWrite触发的函数,这些函数正在触发以响应这些事件

  1. Firestore正在尝试获取有关正在写入的文档的信息,但由于对单个文档的高写入速率导致竞争条件,因此无法执行此操作
    1.然后在日志中显示错误
    解决方案是您需要限制对单个文档的写入速率。This answer解释说,应该使用key visualizer来识别应用程序读/写行为中的热点,以限制这些问题。否则,您将继续看到文档中提到的 * 争用,更高的延迟或其他错误 *。

相关问题