我正在使用 django 制作一个应用程序,用户可以在其中发帖。要添加可以计数并发送以显示在前端的点赞和视图,我正在考虑两种方法。
就是利用post模型和likes模型之间的反向外键关系,动态统计每次likes模型的实例数。因此,创建/删除相似模型的实例来表示相似/不同
是使用整数字段模型将计数存储在数据库中。
使用多对多字段,其中帖子的“喜欢”数量确定为我的“否”。与 post.likes 关联的用户实例数量
Instagram 使用哪种方法?哪种方法将是最终选择?考虑保持低成本,同时保持可扩展性的可能性。谢谢
我建议结合使用多种方法。
首先,我认为在显示帖子时计算点赞数会表现得非常糟糕。您可能会遇到这样的问题:您网站上的大多数人都会查看您最受欢迎的内容。 (根据定义!)但是,最受欢迎的内容也会更频繁地被喜欢,这会增加渲染该页面所需的 CPU 时间。这意味着您的网络服务器需要完成的工作量将随着想要查看它的人数的平方而增加。这很快就会失控。因此,我认为你必须存储一个喜欢的计数。
但是,如果您只存储点赞数,您将遇到与 Reddit、StackOverflow 和其他网站相同的问题,即存在一些机器人/用户组,它们会为彼此的内容投票。如果您有一个点赞列表,并且可以将其追溯到用户,那么您就可以寻找共谋行为。如果你拥有的只是喜欢的数量,那么事后这是不可能修复的。
因此,您需要以多种不同的方式存储相同的数据(点赞和点赞计数)。这意味着您还应该制定协调冲突数据的策略。一些可能的想法:
我认为方法一和方法三在数据库结构方面非常相似。方法三隐式创建一个链接表,它的结构与模型非常相似,模型对帖子和用户都有外键。如果您想添加元数据,那么将其添加到 ManyToMany 直通表比专用模型要稍微多一些工作。不过我认为 1 或 3 都可以。