一个公共评论应用程序与每个 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(...)
这样,您将获得更高性能的数据库查找,同时减少代码维护开销。
假设我有一个像 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(...)
这样,您将获得更高性能的数据库查找,同时减少代码维护开销。