在Firebase上实施分布式计数器

时间:2019-02-17 21:34:18

标签: javascript firebase google-cloud-firestore angularfire

我正在尝试在/counters/{i}处实现一个三分片分布式计数器。

最初,我想检查userCount设置为0的文档/集合是否存在,如果不存在,则需要重新创建。

如果确实存在,则跳过上述步骤,并将userCount加1。

我该怎么做?到目前为止,这是我的代码:

  incrementUserCount() {

    // First check to see if user exists

    for (let i = 0; i < environment.numberOfShards; i++) {
      const newShardReference = this.afs.firestore.collection('counters').doc(i.toString());
      this.afs.firestore.batch().set(newShardReference, { userCount: 0 });
    }
    this.afs.firestore.batch().commit();

    // Steps to increment user count

    // const shardId = Math.floor(Math.random() * environment.numberOfShards).toString();
    // const shardReference = this.afs.firestore.collection('counters').doc(shardId);

    // return this.afs.firestore.runTransaction(t => {
    //   return t.get(shardReference).then(doc => {
    //     const newCount = doc.data().count + 1;
    //     t.update(shardReference, { count: newCount });
    //   });
    // });
  }

0 个答案:

没有答案