我在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) => {...
同样,它不会发生在每次他们被触发,但经常足以值得关注。
1条答案
按热度按时间pkwftd7m1#
Firestore曾经对单个文档有每秒1次写入的软限制. This soft-limit has been removed from the documentation,但仍然有关于读/写操作的Firebase文档等信息:
读写操作
该链接指向提供有关写入单个文档的警告的文档:
单文档更新
在设计应用时,请考虑应用更新单个文档的速度。表征工作负载性能的最佳方法是执行负载测试。应用更新单个文档的确切最大速率在很大程度上取决于工作负载。因素包括写入速率、请求间争用以及受影响的索引数。
文档写操作会更新文档和任何关联的索引,Firestore会在仲裁副本中同步应用写操作。在足够高的写速率下,数据库将开始遇到争用、更高的延迟或其他错误。
这就是现在的情况
1.在很短的时间内对单个文档进行多次写入
1.您有onWrite触发的函数,这些函数正在触发以响应这些事件
1.然后在日志中显示错误
解决方案是您需要限制对单个文档的写入速率。This answer解释说,应该使用key visualizer来识别应用程序读/写行为中的热点,以限制这些问题。否则,您将继续看到文档中提到的 * 争用,更高的延迟或其他错误 *。