一个常见的评论应用与每个Django应用中的个别评论模型

时间:2015-09-17 18:09:10

标签: django database performance postgresql models

假设我有一个像YouTube这样的Django / PostgreSQL支持的视频共享网站 - 还包括一个额外的博客:在实施评论时,有哪些更好的方法与性能有关?

a)有一个用于视频和博客文章的评论应用/模型。在这种情况下,Django会创建一个评论表,其中包含一个额外的内容类型字段,以确定评论是属于博客还是视频应用。

b)有两个单独的评论模型,一个存在于博客应用程序中,另一个存在于视频应用程序中。在这种情况下,Django创建了两个单独的数据库表 - 而没有内容类型字段。

假设我们在每个应用程序中都有数百万条评论,那么在检索特定视频的所有评论时使用两个单独的数据库表是否有优势?或者在内容类型字段上使用数据库索引同样有效吗?

1 个答案:

答案 0 :(得分:2)

使用多个表可能会更快,因为它更简单的查找,并避免对Django content_type表的额外查询。但是,这种方法可能会增加代码维护的难度。这就是你需要考虑的权衡。

你可以做的是使用评论抽象基础模型,类似于:

from django.db import models

class BaseComment(models.Model):
    author = ...
    title = ...
    body = ...

    class Meta:
        abstract = True

class VideoComment(BaseComment):
    video = models.ForeignKey(...)

这样,您可以获得性能更高的数据库查找,而代码维护开销更少。