在这个问题的答案中,@Frank van Puffelen解释了实时数据库增量原子操作ServerValue.increment(1)
是如何工作的:
Client Server Client
+ + +
increment(1) | | |
| | | increment(1)
| (increment, 1) | |
+--------->---------+ (increment, 1) |
| |---------<---------+
+---------<---------+ |
| (ack, 2) |--------->---------+
| | (ack, 3) |
| | |
v v v
如果在发送“(增量,1)”后,客户端以某种方式失去连接而没有接收“(ack,2)”,该怎么办?
在我的测试中,它只是重试,有时会导致重复增量。有时会在连接不良的情况下发生。:(
这是一种预期的行为吗?
要复制测试,只需在反复打开和关闭internet连接(WiFi或4G)的同时执行以下示例,以模拟不良连接情况:
val updates: MutableMap<String, Any> = HashMap()
updates["posts/$key/starCount"] = ServerValue.increment(1)
updates["user-posts/$uid/$key/starCount"] = ServerValue.increment(1)
database.updateChildren(updates)
我不期望这种情况经常发生,但这是可能的。如果你发现这种情况发生得比你认为可以接受的要多,你有两个选择:
实时数据库触发器在写入创建时是排队还是线程化?
firebaseDatabase=firebaseDatabase.getInstandatabaseReference=firebaseDatabase.getReference()Query Query=databaseReference.child(“ticket_detail”).orderbychild(“ticket_no”).limittoLast(1);AddListenerFor
我对Firebase和Android是新手。我已经在我的Firebase帐户中存储了用户身份验证详细信息(姓名、个人资料图像而不是电子邮件ID)。我想检索那些数据(如姓名等)到我的应用程序的其他部分。如何检索实时数据库子值?
我使用Firebase实时数据库作为后端。我希望每个请求最多增加1个。例如: 这不管用。 在前端,我发送“数据1”。我应该如何创建“.validate”规则?
我需要firebase来存储任何模型的自动增量Id数据,我应该做什么?
在身份验证成功时,我正在编写以下代码: