【问题标题】:How to create auto incremented key in Firebase?如何在 Firebase 中创建自动递增的密钥?
【发布时间】:2023-03-26 18:45:01
【问题描述】:

我想知道我们是否可以像在 SQL 中一样在 Firebase 中创建自动增量 ID(键)!

我想创建一个这样的结构

rules:
  Line1:
    1: Smith
    2: Alex
    3: Hello
  Line2:
    1: Brown
    2: Michael

所以假设我想将“Erik”添加到第 1 行,它应该这样做

Line1:
    1: Smith
    2: Alex
    3: Hello
    4: Erik

有可能有这样的结构吗?

我知道我们有

推()

childByAutoId()

但这不适合我的问题。我正在使用 Swift iOS。

【问题讨论】:

    标签: ios swift firebase firebase-realtime-database


    【解决方案1】:

    这种顺序键固有地限制了多用户分布式系统的可扩展性,该系统还需要处理缺乏连接的问题。这就是 Firebase 不支持它们的原因之一。

    Firebase 有自己的密钥类型,称为推送 ID。就像您正在寻找的序列一样,它们是单调递增的,并且它们也保证是唯一的。但最大的区别在于,push ID 不同于大多数 SQL 数据库的序列号,可以在客户端确定。

    有关 Firebase 中数组(类似于序列)的更多信息,请参阅这篇博文:https://firebase.googleblog.com/2014/04/best-practices-arrays-in-firebase.html

    有关 Firebase 推送 ID 的更多信息,请参阅此博文:https://firebase.googleblog.com/2015/02/the-2120-ways-to-ensure-unique_68.html

    如果您仍然决定必须使用顺序 ID,请在此处查看 Kato 的实现:http://jsfiddle.net/katowulf/5ESSp/。其核心是在数据库中保留一个counter 属性与当前最高的序列号,然后使用事务来更新它。

    【讨论】:

    • 谢谢你的回答,所以我基本上可以使用“push()”来创建有序数字,而不是这个“1:name 2:name”它会像这样“'pushid1':name 'pushid2':名称'?
    • 如果你想在 Firebase 中按时间顺序排列孩子的集合,使用 push 确实很常见。
    • @FrankvanPuffelen 在序列号上检查此链接,他们称之为“增量”。 firebase.googleblog.com/2019/03/…序列号对吗?
    • 那个博客是针对 Firestore 的,而这个 3 年多的答案是关于实时数据库的。另请注意,increment 操作还不是完整的序列操作。要构建序列,您需要所有客户端递增相同的位置,这是实时数据库和(甚至更多)Firestore 的吞吐量限制。
    猜你喜欢
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 2021-09-20
    • 1970-01-01
    • 2014-02-03
    相关资源
    最近更新 更多