Firebase-根据服务器时间订购项目

Firebase-根据服务器时间订购项目,firebase,Firebase,我希望根据服务器写入时间将用户评论维护为有序列表。关于这一点,有几个问题: 我可以基于ServerValue.TIMESTAMP创建(设置/推送)位置吗 我可以用规则验证(1)吗 我能安全地假设没有两篇文章会在完全“同一时刻”被写下来,并且相互覆盖吗 如果我决定使用setWithPriority,而不是按位置名称排序,我可以使用ServerValue.TIMESTAMP作为优先级(并按规则验证它…) “奖金”问题-是否仍然无法在firebase中创建计数查询 ==编辑=== 我正在尝试实现一个类

我希望根据服务器写入时间将用户评论维护为有序列表。关于这一点,有几个问题:

  • 我可以基于ServerValue.TIMESTAMP创建(设置/推送)位置吗

  • 我可以用规则验证(1)吗

  • 我能安全地假设没有两篇文章会在完全“同一时刻”被写下来,并且相互覆盖吗

  • 如果我决定使用setWithPriority,而不是按位置名称排序,我可以使用ServerValue.TIMESTAMP作为优先级(并按规则验证它…)

  • “奖金”问题-是否仍然无法在firebase中创建计数查询

  • ==编辑===

    我正在尝试实现一个类似聊天的功能。消息必须按时间顺序(通过服务器端时间戳)排序,以保持“讨论”的逻辑顺序(如果我使用客户端生成的顺序,则一个本地的机器时钟偏移可能会破坏整个讨论)。我可以使用规则来验证ServerValue.TIMESTAMP字段是否持久化到任何新消息,但是,我似乎找不到一种方法来确保客户端实际使用setWithPriority()来持久化数据。我想不出任何办法来做这件事——我是不是遗漏了什么

  • 您可以将自动ID生成为密钥的
    .push()
    ,也可以
    .setWithPriority()
    ,其中密钥可以是任何内容,优先级也可以是几乎任何内容。据我所知,没有选择将
    serverValue.TIMESTAMP
    作为键。唯一的方法是使用
    .child(retrievedTime).set(someData)

  • 见1)

  • 我不确定您的确切意思,因为没有选项将
    servervalue
    设置为键,但我想这是原因之一

  • 您可以使用数据库上的某些字段,设置
    ServerValue.TIMESTAMP
    并侦听更改-在回调中,您将很快获得最新的服务器时间,因为占位符被替换为
    TIMESTAMP
    。然而,不能保证它是独一无二的。拥有相同优先级的记录是完全合法的

  • 这是承诺,但尚未提供。您可以在每次写入/删除时手动处理事务,请参见

  • 您可以将自动ID生成为密钥的
    .push()
    ,也可以
    .setWithPriority()
    ,其中密钥可以是任何内容,优先级也可以是几乎任何内容。据我所知,没有选择将
    serverValue.TIMESTAMP
    作为键。唯一的方法是使用
    .child(retrievedTime).set(someData)

  • 见1)

  • 我不确定您的确切意思,因为没有选项将
    servervalue
    设置为键,但我想这是原因之一

  • 您可以使用数据库上的某些字段,设置
    ServerValue.TIMESTAMP
    并侦听更改-在回调中,您将很快获得最新的服务器时间,因为占位符被替换为
    TIMESTAMP
    。然而,不能保证它是独一无二的。拥有相同优先级的记录是完全合法的

  • 这是承诺,但尚未提供。您可以在每次写入/删除时手动处理事务,请参见


  • #3是一个很大的“不”。如果您的应用程序被广泛采用,则此声明将无法维护。相反,我只需使用
    push
    来保证唯一性,并将时间戳保留在一个值中,和/或将其设置为优先级。这些都是一本很好的读物,可以让你快速了解这些事情。@frank van puffelen,“推送”不是依赖于客户端时间戳吗?如果是这样的话,我如何才能确保订单得到保持?
    push
    只保证一个唯一的id。如果您使用服务器端时间戳来设置优先级,您可以使用它来维护订单。但是这种时间戳并不能保证唯一性:两个人的信息可能在同一时刻到达服务器。@FrankvanPuffelen-谢谢,我理解你的意思。但是现在,我有一个问题,我需要依靠客户端来设置优先级。如果没有这个假设,我有没有办法得到按时间顺序排序的消息列表?我可以要求FB根据ServerValue.TIMESTAMP字段给我消息吗?#3是一个很大的“否”。如果您的应用程序被广泛采用,则此声明将无法维护。相反,我只需使用
    push
    来保证唯一性,并将时间戳保留在一个值中,和/或将其设置为优先级。这些都是一本很好的读物,可以让你快速了解这些事情。@frank van puffelen,“推送”不是依赖于客户端时间戳吗?如果是这样的话,我如何才能确保订单得到保持?
    push
    只保证一个唯一的id。如果您使用服务器端时间戳来设置优先级,您可以使用它来维护订单。但是这种时间戳并不能保证唯一性:两个人的信息可能在同一时刻到达服务器。@FrankvanPuffelen-谢谢,我理解你的意思。但是现在,我有一个问题,我需要依靠客户端来设置优先级。如果没有这个假设,我有没有办法得到按时间顺序排序的消息列表?我可以要求FB根据ServerValue.TIMESTAMP字段给我消息吗?4-可以使用setWithPriority(data,Firebase.ServerValue.TIMESTAMP)将ServerValue设置为优先级,我认为这是这里的问题。5-或在抓取记录后在客户端上使用snapshot.numChildren()@加藤雷。snapshot.numChildren()-对于包含20 mil+子级的快照,情况如何?你会用它吗?