【问题标题】:Firebase control server for maintaining counters and aggregates用于维护计数器和聚合的 Firebase 控制服务器
【发布时间】:2017-06-20 00:03:19
【问题描述】:

这是一个known issue,firebase 没有简单的方法来计算项目。我计划创建一个严重依赖计数和其他聚合的应用程序。我担心按照here 建议的规则创建这个应用程序的计数器会非常复杂且难以维护。

所以我想到了这个模式:

我将保留一个服务器,该服务器将侦听数据库中输入的所有项目,该服务器将更新所有计数器和聚合。服务器将保存一个特殊管理员的 UID,只有他可以更新计数器。

这样,用户不必下载整个节点来获得计数,而且我不必处理客户端维护计数器所产生的问题。

这种模式有意义吗?我错过了什么吗?

【问题讨论】:

    标签: firebase firebase-realtime-database


    【解决方案1】:

    Firebase 最近发布了 Cloud Functions。正如documentation中提到的:

    Cloud Functions 是一个托管、私有且可扩展的 Node.js 环境 您可以在其中运行 JavaScript 代码。

    使用 Cloud Functions,您无需创建自己的服务器。您可以简单地编写 JavaScript 函数并将其上传到 Firebase。 Firebase 将负责在事件发生时触发函数。

    例如,假设您要计算帖子中的点赞数。你应该有一个类似于这个的结构:

    {
      "Posts" : {
        "randomKey" : {
          "likes_count":5,
          "likes" : {
          "userX" : true,
          "userY" : true,
          "userZ" : true,
          ...
        }
        }
      }
    }
    

    你的 JavaScript 函数会这样写:

    const functions = require('firebase-functions');
    const admin = require('firebase-admin');
    admin.initializeApp(functions.config().firebase);
    
    // Keeps track of the length of the 'likes' child list in a separate attribute.
    exports.countlikes = functions.database.ref('/posts/$postid/likes').onWrite(event => {
      return event.data.ref.parent().child('likes_count').set(event.data.numChildren());
    });
    

    每当likes 节点上有新的写入时,此代码都会增加likes_count 变量。

    此示例可在GitHub 获得。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-30
      • 1970-01-01
      • 2022-08-19
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      相关资源
      最近更新 更多