數據重複在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());
});
}