我是否应该在每次新的like/dislike/comment
记录后更新comments/likes/dislikes
的编号,将其存储在图像表中
或
每次我需要知道计数时,我是否应该查询类似Vote::where('image_id', $this->id)->where('vote', true)->count();
的内容?
这实际上取决于实际情况(例如,您存储和期望的数据量(,还有两种相互冲突的哲学,两者都有。
论点一:不要保存可计算的数据。如果你能保存一系列事件(例如所有投票(,你总是可以从中扣除总数。然而,这样做的缺点是,在数据量大的应用程序上,速度可能会变慢。
论点二:一定要保存所需的数据。根据您使用的持久性层的类型,在数据更改时保存数据可能是个好主意。例如,MongoDB确实有一种"只存储您需要的东西"的方法。优点:即使在具有大量数据的应用程序上,这也会具有良好的性能,因为您不必实时计算任何内容,只需输出数字即可。
TL;DR:这实际上取决于您的应用程序可能更难处理哪些因素。