我有這個 firebase 實時資料庫
{
"posts" : {
"-Mt8iPsoxOk2rXwfjVKF" : {
"date" : 1641914412858,
"user_name" : "aaaa",
"post_id" : "CYjxpgaMz9P",
"view_count" : 2
},
"-Mt8iPvXA4ALKqSX0dH-" : {
"date" : 1641914413011,
"user_name" : "bbb",
"post_id" : "CDzbKl0lIK-",
"view_count" : 0
},
"-Mt8iPxfJOax_U6TjYov" : {
"date" : 1641914413155,
"user_name" : "ccc",
"post_id" : "B7NZYOnA_NG",
"view_count" : 0
}
}
}
我想在閱讀帖子后立即更新視圖計數,我嘗試使用此方法,但它的問題是我們在一秒鐘內有很多讀取,因此讀取然后更新視圖需要時間,我們需要限制僅發布 5 次查看然后將其洗掉,但我們不能這樣做,因為在一秒鐘內我們有超過 10 次查看,每個查看需要時間來更新查看計數,因此下一個用戶將繼續閱讀相同的帖子,即使該帖子超出了瀏覽范圍。
[recentPostsQuery observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
self->user_name = snapshot.children.allObjects.firstObject.value[@"user_name"];
self->post_key = snapshot.children.allObjects.firstObject.key;
[[[[self.ref child:@"posts"]child:self->post_key]child:@"view_count"]setValue:[FIRServerValue increment:@1]];
}];
uj5u.com熱心網友回復:
在所有用戶都直接訪問資料的大規模多用戶環境中,沒有辦法像您所描述的那樣強制實施硬限制。
如果硬限制是您的應用程式的硬要求,請考慮將所有對資料的訪問路由到服務器端組件,然后該組件可以強制執行此要求。如果您還沒有服務器,您可以考慮為此使用 Cloud Functions 或 Cloud Run。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/414158.html
標籤:
