用于维护计数器和聚合的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_count
variables。
这个示例在GitHub上可用 。