一个公共评论应用程序与每个 Django 应用程序中的单独评论模型

One common comments app vs. individual comment models in each Django app

假设我有一个像 YouTube 这样的 Django/PostgreSQL 强大的视频共享网站 - 包括一个额外的博客:实施评论时关于性能的更好方法是什么?

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

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

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

使用多个 table 可能会更快,因为它的查找更简单,并且避免了对 Django content_type table 的额外查询。但是,这种方法可能会给代码维护带来更多困难。所以这是你需要考虑的权衡。

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

from django.db import models

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

    class Meta:
        abstract = True

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

这样,您将获得更高性能的数据库查找,同时减少代码维护开销。