【问题标题】:Server Side Locks in Cloud FirestoreCloud Firestore 中的服务器端锁
【发布时间】:2019-10-02 20:34:01
【问题描述】:

我很好奇在 Cloud Firestore 上执行服务器端事务时执行的锁定行为,如本视频所述:https://www.youtube.com/watch?time_continue=750&v=dOVSr0OsAoU

我的事务将读取多个文档并在它们上加锁。我的问题是这些锁是否限制了对文档的所有访问 - 包括从不属于事务的客户端代码的并发读取?还是他们只限制写入?

如果他们确实限制了读取,有什么办法可以解决这个问题 - 这可能会导致我正在开发的应用程序严重减速。

此外,如果事务尝试锁定已锁定的文档 - 重试模式是什么 - 它重试的频率是多少,是否存在指数退避?

谢谢!

【问题讨论】:

    标签: firebase google-cloud-firestore


    【解决方案1】:

    我的事务将读取多个文档并在它们上加锁。

    事务操作首先读取文档中属性的值以执行写入操作。因此,它需要与服务器进行往返通信,以确保事务中的代码成功完成。

    我的问题是这些锁是否会限制对文档的所有访问 - 包括从不属于事务的客户端代码的并发读取?

    答案是否定的,即使你使用事务执行写操作,并发用户也可以读取文档的内容。

    此外,如果事务尝试锁定已锁定的文档 - 重试模式是什么 - 它重试的频率是多少,是否存在指数退避?

    根据关于Firestore transactions的官方文档,交易只有在以下情况下才会失败:

    • 事务在写操作之后包含读操作。读操作必须始终在任何写操作之前。 事务读取在事务之外修改的文档。在这种情况下,事务会自动再次运行。事务被重试有限次。

    • 事务超过了最大请求大小 10 MiB。

    • 事务大小取决于事务修改的文档和索引条目的大小。对于删除操作,这包括目标文档的大小和响应该操作而删除的索引条目的大小。

    失败的事务返回错误并且不会向数据库写入任何内容。您不需要回滚事务; Cloud Firestore 会自动执行此操作。

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 2018-11-27
      • 2020-02-04
      • 2019-09-10
      • 2020-02-14
      • 2019-08-28
      相关资源
      最近更新 更多