用于维护计数器和聚合的Firebase控制服务器

这是一个已知的问题 ,firebase没有简单的方法来计数项目。 我打算创build一个应用程序,严重依赖计数和其他聚合。 我担心创build这个应用程序的计数器与这里build议的规则将是非常复杂和难以维护。

所以我想到了这个模式:

我将保留一个服务器,将监听在数据库中input的所有项目,该服务器将更新所有计数器和聚合。 服务器将拥有只有他可以更新计数器的特殊pipe理员的UID。

这样,用户就不必下载整个节点来计数,而且我也不必处理由客户维护计数器所引起的问题。

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

Firebase最近发布了云端函数。 正如在文档中提到的:

Cloud Functions是托pipe的,私有的,可扩展的Node.js环境,您可以在其中运行JavaScript代码。

使用云function,您不需要创build自己的服务器。 您只需编写JavaScript函数并将其上传到Firebase即可。 每当事件发生时,Firebase将负责触发function。

例如,假设您要计算post中的喜欢数量。 你应该有一个类似于这个结构的结构:

{ "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_count节点上有新的写入时,此代码将增加likes_countvariables。

这个示例在GitHub上可用 。