我们需要在Firebase数据库上运行一些操作,并在用户从移动设备修改标志的某些输入后操作数据。
目前我们使用on()来监听每个用户节点中的特定标志。我们正在Heruku上托管的Nodejs服务器上运行这个监听器。
如果我们计划拥有10万用户,我们将拥有10万名听众。每个用户标志的一个监听器,等待用户在移动设备上操作。
就Firebase而言,这是一个很好的设计吗?
理想情况下,我们可以创建一个由用户调用的REST API,然后在Node JS服务器上我们可以操作数据。
根据用户输入在Firebase上运行数据后台操作的最佳方法是什么?
我们之前使用的是Parse,使用Parse Cloud代码很容易实现这一点。有了Firebase,我们就会因此而遇到问题。
答案 0 :(得分:3)
如果我们计划拥有10万用户,我们将拥有10万名听众。每个用户标志的一个监听器,等待用户在移动设备上操作。
这听起来像是糟糕的数据设计。虽然绝对有可能倾听数十万件物品的变化,但它不应该需要数十万听众。
我的猜测(因为你没有包含你的JSON片段)是你有一个类似的结构:
users
$uid
name: "user6155746"
flag: "no"
并且您只是在每个用户的flag
附加了一个监听器:
ref.child('users').on('child_added', function(userSnapshot) {
userSnapshot.ref().child('flag').on('value', function(flagSnapshot) {
console.log('the flag changed to '+flagSnapshot.val());
});
})
在代码中这很简单,实际上你很难管理"标志监听器"。你什么时候删除它们?你有他们的清单吗?
如果您在JSON树中隔离您感兴趣的信息,所有这些事情都会变得更简单:
users
$uid
name: "user6155746"
userFlags
$uid: "no"
现在,您只需在userFlags
上收听,看看是否有任何用户的标记已更改:
ref.child('userFlags').on('child_changed', function(userSnapshot) {
console.log('Flag of user '+userSnapshot.key()+' changed to '+userSnapshot.val());
});
有了这个,你就有了一个监听器,监视着可能有数十万用户的标志。