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

问题描述 投票:0回答:2

我正在从 sql 数据库迁移到 nosql 数据库,作为其中的一部分,我正在开发一个 flutter 项目,在该项目中我正在实现如下所示的序列结构。

  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 flutter firebase-realtime-database google-cloud-firestore
2个回答
0
投票

如果您想防止多个用户以冲突的方式修改同一值,您需要使用事务

在这种情况下,由于您似乎只是简单地递增一个值,因此使用原子增量操作也可能会有所帮助,该操作的速度要快得多,正如我在以下内容中所示:您可以在 Firebase Realtime 上以原子方式递增值的速度有多快数据库?


0
投票

您可以使用

ServerValue.increment(1)
获得类似序列的结构。

示例:

database.child("movies/movie-id-123/views").set(ServerValue.increment(1));
© www.soinside.com 2019 - 2024. All rights reserved.