您好我刚刚为自己实施了评分系统
A有3个模型和表格:场地,用户,评论
将场地视为分数。
我的评级表看起来像这样:
static int counter = 0;
- (void)taskCompleted {
// can be called 2000 times from 2000 different threads, all at once
if( counter > 0) {
return;
}
OSAtomicIncrement32Barrier(&counter);
dispatch_group_async(self.group, self.queue, ^{
OSAtomicDecrement32Barrier(&counter);
if( counter > 0 ) {
return;
}
HEAVY_STUFF
});
}
每当用户为场地添加评论时,Laravel Schema::create('reviews', function (Blueprint $table) {
$table->increments('id');
$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->integer('venue_id')->unsigned();
$table->foreign('venue_id')->references('id')->on('venues')->onDelete('cascade');
$table->tinyInteger('quality');
$table->tinyInteger('cost');
$table->timestamps();
});
事件就会被解雇,我只是对所有场地评分进行求和,计算所有记录编号,总计场地评分,计算场地记录编号并计算评分。 特殊方式并将场地评级存储在场地表中称为评级的属性中
但是,如果我只是在2分钟内在表中插入10000行而不进行平均,并且使用上述方法进行7分钟,这似乎效率非常低
如何在表格中存储场地评级以及如何更新它
1-缓存查询(减少仅1分钟)
2-排队等候工作(减少3分钟)
答案 0 :(得分:0)
为什么不动态查询平均评分?
$count = \DB::table('ratings')
->selectRaw('SELECT AVG(rating) as average_rating')
->where('venue', $someVenueId)
->get();