服务器端事务通常像客户端库一样工作,但不是该视频中提到的并发模型技术,而是以传统的锁定数据方式工作。因此,即使您对单个文档或查询使用事务,这些文档也会被锁定,直到事务完成。
为了回答您的问题,由于来自云函数的事务正在内部进行(可能需要几毫秒),因此文档会在这段时间内被锁定。这意味着这些文件不能被任何其他交易获取或更改。
1) 一个文档在一个服务器事务中被gets锁定,所以在第一个事务完成之前其他服务器事务无法获取它。
正确。
2) 一个文档被服务器事务中的gets锁定,但仅用于写入,以便其他服务器事务可以获取它,但在第一个事务完成之前不能修改它。
另一个事务获取锁定的文档是没有意义的。为什么要尝试获取这样的文件,因为它无法更改?此外,在事务完成时,锁定的文档可能具有不同的值。在事务开始和完成之间,文档中的一些属性发生了变化。
3) 一个文档没有被服务器事务中的gets锁定,只是写入。
云函数运行事务后,文档被锁定,事务完成后解除锁定。
编辑:
另一个事务获得锁定的文档确实有意义。无法更改,但如果可以读取
我指的是严格意义上的写作。无论文档是否被锁定,都可以读取所有文档。
如果你只是想读取值
如果您只是想读取值,则无需担心。读取时文档没有锁定。
也许您需要读取一些值来决定是否更改另一个文档,甚至只是向用户显示一些信息。
它会工作得很好。
此外,根据事务,您不必关心文档是否在下一秒内发生变化。例如,如果用户想知道他银行账户里的金额,你可以显示一秒前的值,没问题。
是的,没错。在读取操作方面没有任何限制,对于您的示例,是的,没关系。这也适用于我的一个项目。
能否请您指出他们的来源?
有很多资源可以解释传统的数据锁定方式是如何工作的。正如 Todd Kerpelman 在喜欢的视频中所证实的那样,服务器端交易就是以这种方式工作的。这种锁定的目的是服务和保护共享资源(文档)。
我真的需要绝对确定这一点,所以我需要消息来源,或者 Firebase 团队的其他人来确认它们。
我们还希望 Firebase 团队中的某个人花时间来看看这个,但我不确定我是否理解您的顾虑?您是否认为在进行交易时,您不会阅读文件?还是?