我知道Firebase事务会根据旧值和新值
启用某些值的原子更新但鉴于Firebase是一个实时数据库,我认为,必须谨慎使用交易而不是实时功能
这是一个例子:
据我所知,如果您对某个值执行某些数学运算(添加'喜欢&等等),则使用交易是有意义的
我不明白在以下用例中使用事务是否有意义:假设文本字段可以由任意数量的用户更新,并且我们对所有更新感兴趣,因为它们实时发生。 firebase建议我们在这种情况下使用交易吗?或者是最终的持续运作'在值上发生,仅限于单个“持续”操作'每个时间戳Firebase服务器时钟的粒度?
此外,是否可以保证事件将按照最终值的持续顺序传递?
答案 0 :(得分:17)
每当您在数据库上使用事务时,您都会牺牲一些可伸缩性,以便获得更强的数据一致性保证。 Firebase数据库上的事务没有什么不同,除非开发人员倾向于在更高并发的情况下使用Firebase。
对于任何事务系统:保持系统可扩展性的关键是最小化竞争更新相同数据的客户端数量。对于Firebase,您可以通过在JSON树中尽可能低地运行事务来实现此目的。即计数器是在交易下可以很好地运作的一个例子。
对于较大的数据,例如文本编辑示例,使用事务将无法很好地扩展。对于这种用例,最好找到一种完全避免冲突的方法。通常,这归结为存储每个用户正在进行的增量,而不是存储更新的状态。一个很好的例子是Firepad example,它使用操作转换在Firebase数据库之上创建高度并发的协作编辑器。