【问题标题】:Do firestore batch writes get re-run automatically on failure?Firestore 批量写入是否会在失败时自动重新运行?
【发布时间】:2019-10-13 08:10:52
【问题描述】:

在浏览官方文档时,我发现 SDK 在失败时会自动重新运行有限次数的事务,但是在批量写入的情况下并没有明确提及。

文档确实提到批处理写入就像事务一样是原子的,但这并不一定意味着它们也会在失败时重新运行。

【问题讨论】:

    标签: javascript firebase react-native google-cloud-firestore


    【解决方案1】:

    如果失败,则不会重试批量写入。整个事情就是回滚了,要不要重试就得自己想办法了。

    重试事务是因为它们明确地尝试根据现有文档的内容进行更改。由于这些文档可能会在客户端和服务器之间的往返行程中发生变化,因此如果发生这种情况,则需要重试以自动处理这种情况。批量写入没有这个问题,因为它们是原子的,但本质上不是真正的事务性。

    【讨论】:

    • 感谢您为他们的非跨国行为提供理由。
    • 但这也引发了一个问题,如果我有一个执行批处理写入操作的函数,我还通过执行以下操作初始化/创建了我的批处理对象:let batch=db.batch()。因此,如果此批处理操作失败,是否再次调用该函数是一个好主意,因为每次调用都会实例化一个新的批处理对象。还是有一定的“良好实践重试在firestore中批量写入?
    • 只有在您做错了什么或违反了安全规则时,批次才会彻底失败。在这种情况下,在相同的情况下重试确切的事情不会有任何帮助。除了纠正错误,这里没有“最佳实践”。
    • 但是批量写入不会在并发编辑上失败吗?我的意思是,如果在我的应用程序中有太多用户同时想要更新我的一个文档的同一字段,在这种情况下会不会是一个问题?
    • 我不认为这是他们的工作方式。它应该就像最后一次写入获胜的文档写入一样。与批处理的区别在于所有写入将同时命中。如果您需要防止争用,请使用事务,因为如果检测到这种情况,事务将重试。
    猜你喜欢
    • 2020-11-17
    • 2020-08-09
    • 1970-01-01
    • 2021-03-31
    • 2012-01-08
    • 2021-08-21
    • 2018-08-03
    • 1970-01-01
    • 2021-08-31
    相关资源
    最近更新 更多