如何在firebase实时数据库中获取“序列”或类似结构的计数器

Posted

技术标签:

【中文标题】如何在firebase实时数据库中获取“序列”或类似结构的计数器【英文标题】:How to get a "Sequence" or counters like structure in firebase realtime database 【发布时间】:2021-12-29 15:40:48 【问题描述】:

我正在从 sql 数据库迁移到 nosql 数据库,作为其中的一部分,我正在从事一个颤振项目,我正在实现如下结构的序列。

  static Future<int> get nextId async 
    return database.get().then((snapshot) 
      return snapshot.value;
    ).then((value) 
      database.set(value + 1);
      return value + 1;
    );
  

它有效,每次我使用 nextID 时,它都会在数据库中递增。我的问题是,当两个不同的用户碰巧在调用 nextId 时获得相同的值时,是否有可能。

【问题讨论】:

Firebase 实时数据库和 Cloud Firestore 是两个独立的数据库。请仅使用相关标签标记您的问题,不要同时使用两者。 【参考方案1】:

如果您想防止多个用户以相互冲突的方式修改同一个值,您需要use a transaction。

在这种情况下,由于您似乎只是在增加一个值,因此您还可以通过使用 atomic increment 操作来帮助您,正如我在How quickly can you atomically increment a value on the Firebase Realtime Database? 中所展示的那样,它的速度明显更快

【讨论】:

以上是关于如何在firebase实时数据库中获取“序列”或类似结构的计数器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Firebase 实时数据库(Android 开发)中获取特定子项的键值?

如何从 Firebase 实时数据库中检索/获取项目

如何根据 Angular 6 中的 Firebase 实时数据库中的键获取单个记录

如何从 firebase 实时数据库中获取子值?

如何在Android Firebase实时数据库中按降序获取孩子[重复]

如何从 Firebase 实时数据库中获取数据到 Flutter 中的列表中?