【发布时间】:2014-08-06 12:53:12
【问题描述】:
我想根据服务器写入时间将用户 cmets 维护为有序列表。关于这个的几个问题:
我可以根据 ServerValue.TIMESTAMP 创建(设置/推送)位置吗?
我可以用规则验证 (1) 吗?
我可以有把握地假设没有两个帖子会在确切的“同一时刻”写出,相互覆盖吗?
如果我决定使用 setWithPriority,而不是按位置名称排序,我是否可以使用 ServerValue.TIMESTAMP 作为优先级(并通过规则验证......)
“奖励”问题 - 是否仍然无法在 firebase 中创建 COUNT 查询?
=== 编辑 ===
我正在尝试实现类似聊天的功能。消息必须按时间顺序(通过服务器端时间戳)排序,以维护“讨论”的逻辑顺序(如果我使用客户端生成的顺序,那么本地机器时钟偏移可能会破坏整个讨论)。我可以使用规则来验证 ServerValue.TIMESTAMP 字段是否持久保存到任何新消息,但是,我似乎无法找到确保客户端实际使用 setWithPriority() 来持久保存数据的方法。我想不出任何办法来做到这一点 - 我错过了什么吗?
【问题讨论】:
-
#3 是一个很大的“不”。如果您的应用程序被广泛采用,则此声明将变得无法维护。相反,我会简单地使用
push来保证唯一性并将时间戳保持在一个值中和/或将其设置为优先级。 -
所有这些都包含在saving data 和retrieving data 下的文档中。这些是了解此类事情的好书。
-
@frank-van-puffelen - “推送”不依赖于客户端时间戳吗?如果是这样,我怎么能确保订单被保留?
-
push只是保证一个唯一的ID。如果您使用服务器端时间戳来设置优先级,则可以使用它来维护顺序。但无法保证此类时间戳的唯一性:两个人的消息可能在完全相同的时刻到达服务器。 -
@FrankvanPuffelen - 谢谢,我明白你在说什么。不过,现在我有一个问题,我需要依靠客户来实际设置WithPriority。如果没有这个假设,我有什么办法可以得到按时间排序的消息列表?我可以以某种方式要求 FB 根据 ServerValue.TIMESTAMP 字段给我消息吗?
标签: firebase