数据重复在NoSQL中非常普遍,所以存储计数器是非常合理的。查看有关denormalization
的Firebase文章。这几乎总结了我了解它们的方法。
使用计数器
它速度快,它是相当简单的,假设你使用好的DRY原则和集中的记录你的所有操作。利用每个交易记录被添加或删除的时间来更新计数器:在
function addUser(user) {
// do your add stuff...
updateCounter(1);
}
function removeUser(user) {
// do your remove stuff...
updateCounter(-1);
}
function updateCounter(amt) {
userCounter.transaction(function(currentValue) {
currentValue || (currentValue === 0); // can be null
return currentValue + amt;
});
}
独立的公共和安全的数据
存储敏感数据(电子邮件地址,事见不得人)私人路径,保持其公共用户数据可读。
这可以防止需要同步计数器。但是,它确实意味着客户必须下载整个公共用户列表来创建计数。因此,保持公开个人资料很小(一个名字,一个时间戳,没有其他),所以它可以在不花几秒时间的情况下运作到数万人。
"users": {
".read": true,
"$user": {
// don't try to put a ".read" here; it won't remove access
// after the parent path allows it
}
}
"users_secured": {
"$user": {
".read": "auth.id === $user"
}
}
利用一个服务器进程
容易和无痛;超快速的客户端,只要占用空间小,就可轻松处理数十万个配置文件。需要你维护一些东西。 Heroku和Nodejitsu将免费举办此活动,直到您有用户脱离您的耳朵。
var Firebase = require('firebase');
var fb = new Firebase(process.env.FBURL);
fb.auth(process.env.SECRET, function() {
fb.child('users').on('value', function(snap) {
fb.child('user_counter').set(snap.numChildren());
});
}