Firebase 中快速更新实体的消息保证
Message guarantees on rapidly updated entities in Firebase
我想了解 Firebase 和侦听客户端在短时间内对实体进行大量更新并且客户端正在侦听 'value' 更改的情况下的行为在那个实体上。
假设我在 firebase 中有一个包含一些简单数据的实体。
{
"entity": 1
}
而且 "entity" 的值更新得非常快。类似于下面的代码,写入 1000 个整数。
//pseudo-code for making 1000 writes as quickly as possible
for(var i = 0; i < 1000; i++) {
ref.child('entity').set(i)
}
忽略暂时性问题,使用 'on' API in a browser 的监听客户端是否会收到所有 1000 个包含 0-999 的通知,或者 Firebase 是否有适当的限制?
首先,重要的是要注意 Firebase 实时数据库是状态同步服务,而不是 pub/sub 服务。
如果您有一个快速更新的位置,该服务保证最终状态在所有客户端上都是一致的,但不是所有间歇性状态都会浮出水面。每次更新最多会触发一个事件,但服务器可以自由 'squash' 将对同一位置的连续更新合并为一个。
在进行更新的客户端上,我认为当前的行为是每个更改都会传播一个本地事件,但我可能是错的,这是一个值得注意的例外。
为了保证每个中间状态的传递,可以将 push
(Objective-C 中的 childByAutoId
)添加到数据库位置的事件列表中,而不是简单地更新直接的价值。查看 Firebase REST API docs 保存数据列表
我想了解 Firebase 和侦听客户端在短时间内对实体进行大量更新并且客户端正在侦听 'value' 更改的情况下的行为在那个实体上。
假设我在 firebase 中有一个包含一些简单数据的实体。
{
"entity": 1
}
而且 "entity" 的值更新得非常快。类似于下面的代码,写入 1000 个整数。
//pseudo-code for making 1000 writes as quickly as possible
for(var i = 0; i < 1000; i++) {
ref.child('entity').set(i)
}
忽略暂时性问题,使用 'on' API in a browser 的监听客户端是否会收到所有 1000 个包含 0-999 的通知,或者 Firebase 是否有适当的限制?
首先,重要的是要注意 Firebase 实时数据库是状态同步服务,而不是 pub/sub 服务。
如果您有一个快速更新的位置,该服务保证最终状态在所有客户端上都是一致的,但不是所有间歇性状态都会浮出水面。每次更新最多会触发一个事件,但服务器可以自由 'squash' 将对同一位置的连续更新合并为一个。
在进行更新的客户端上,我认为当前的行为是每个更改都会传播一个本地事件,但我可能是错的,这是一个值得注意的例外。
为了保证每个中间状态的传递,可以将 push
(Objective-C 中的 childByAutoId
)添加到数据库位置的事件列表中,而不是简单地更新直接的价值。查看 Firebase REST API docs 保存数据列表