为什么firebase中有serverTimestamp



我在firebase中有serverTimestamp。

我创建了两个文档并对它们进行了测试。

一个是new Date(),另一个则是admin.firestore.FieldValue.serverTimestamp ()

这存储了完全相同的值。

然而,为什么会有serverTimestamp

我不是指客户端(web(上的serverTimestamp

我指的是firebase函数使用的serverTimestamp

我什么时候该用这个?

如果您查看Timestamp的API文档(我链接到nodejs服务器SDK版本,该版本由nodejs Firebase Admin SDK使用(,您会发现它比JavaScript Date对象具有更大的粒度。时间戳记录的时间精度为纳秒,而Date仅使用毫秒精度。这就是Firestore在内部表示其时间戳的方式,并且精度会传递给具有这种新数据类型的客户端,该客户端不会丢失任何数据

为什么这很重要?好吧,如果随着时间的推移,有很多文档进入一个集合,那么如果时间更精细,获得真正唯一的时间戳编号的几率就会增加。此外,如果Firestore使用纳秒精度,那么在执行分页等需要知道页面最后一项排序字段值的操作时,可能需要匹配该精度。如果您没有反馈一个适当精确的值,那么您的分页可能会不准确。

FieldValue.serverTimestamp()特别重要,因为它在自己的服务器上使用了谷歌标准保证准确的时钟值。这使用了一种非常复杂的方法来处理有问题的时间戳,特别是处理闰秒。如果客户端试图用自己的时间感添加一个值,谁知道该客户端时钟值是否准确。它可能非常不准确,也许开发人员不希望这样。使用serverTimestamp()告诉谷歌,当客户可能不在时,它应该使用自己的时钟时间感来准确

您可以更进一步,使用安全规则进行检查,以确保web或移动客户端在应该需要的字段值中提供了serverTimestamp()令牌值,因此它不能伪造只需要真实当前时间戳的时间戳。安全规则语言允许您使用request.time与字段值进行比较,以确保基于时间的请求得到正确处理。

精度的差异可能会通过其他方式产生影响,但最重要的是客户端SDK需要与服务内部使用的内容相匹配。

相关内容

  • 没有找到相关文章

最新更新