我想知道如何设计这个最佳,所以我不重新发明轮子
我有评级实体:
/**
* Type of the read of this comment,for example quality
*
* @ORM\Column(type="string")
*/
protected $type;
/** @ORM\Column(type="datetime") */
protected $created;
/** @ORM\Column(type="integer") */
protected $thread;
/**
*
*
* @ORM\ManyToOne(targetEntity="User")
*/
private $user;
/**
* @ORM\Column(type="decimal", scale=2)
*/
protected $value;
其中type是评级的类型,例如“file.quality”或“file.story”,用于共享视频。
现在我想打开视频的详细信息页面,并显示总评分(作为所有用户的平均值....还有评级,与用户无关,但来自其他地方。 ...喜欢IMDB(互联网电影数据库)评级。
我正在考虑添加CompleteRating
实体,每当用户向Rating
实体添加新投票时,我会保存平均评分并直接更新。也许是通过symfony2中的一个监听器类。
这是最好的设计方式吗?你怎么处理这个最好的?
答案 0 :(得分:1)
我相信有两种方法可以做到,无论是否有最佳方式,实际上取决于您希望评级更新的频率,是否要让服务器受到压力等等
1)您的视频实体中可能有两列,CompleteRating,LastRatingUpdateTime。 在您的存储库中,您可以拥有一个GetRating函数,无论何时调用它都会检查上次更新时间,如果比较上一次评级更新一小时后,则运行更新评级并输出新评级的数据库查询。这当然意味着用户必须等待看他们的投票数,但这意味着服务器压力会降低。
2)也许你可能讨厌两个单独的评级,1个外包评级(IMDB等)只能通过cronjob每晚更新,然后是个人评级,可以在用户添加评级时计算,甚至只是在苍蝇,数据库在这种情况下非常快。
我的投票结果为2,这实际上取决于您为获取IMDB评级所采用的代码的密集程度。