firebase实时数据库在读取后立即更新视图计数



我有这个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]];

}];

在大规模多用户环境中,所有用户都直接访问数据,因此无法强制执行您所描述的硬限制。

如果硬限制是应用程序的硬性要求,请考虑将对数据的所有访问路由到服务器端组件,然后服务器端组件可以强制执行此要求。如果你还没有服务器,你可以考虑使用云功能或云运行。

最新更新