【发布时间】:2019-05-30 20:50:06
【问题描述】:
我正在尝试为我的工作项目编写一个类似 imdb 的应用程序。在这个应用程序中,我需要在 mysql 数据库中存储 8700 部 imdb 电影以及大约 40k 导演和演员/女演员,
当我尝试发布新电影时,电影创建页面需要很长时间(大约 20 秒)才能呈现。
首先,我创建了一个名为“persons”的模型,其中包含人名、性别、“is_director”和“is_actor”布尔字段。
然后,我确实为 is_director 和 is_actor 人员创建了一个名为“movies”的模型,其中包含 2 个 ManyToManyFields。
在那之后,我确实使用 django 固定装置将大约 40k 人导入了我的数据库。 我的问题从这里开始。当我尝试从 django admin 发布新电影时,电影创建页面需要很长时间(大约 10 秒)才能呈现。 我知道这是针对大量人员数据的。我确实使用了 django 内置的自动完成功能,但问题仍然存在。
我是 Python/Django 的新手。所以我认为我这样做是错误的。 可能是我的数据库结构不对或者我的模型有问题,不知道怎么解决!
# Person Model:
class Person(models.Model):
name = models.CharField(_('Person Name'), max_length=100)
is_actor = models.BooleanField(_('is actor'), default=True)
is_director = models.BooleanField(_('is director'), default=False)
MALE = 'male'
FEMALE = 'female'
PERSON_GENDER = [(MALE, _('Male')), (FEMALE, _('Female'))]
gender = models.CharField(
_('Gender'),
max_length=6,
choices=PERSON_GENDER,
default=MALE
)
# Movies Model:
class Movies(models.Model):
title = models.CharField(_('Movie Name'), max_length=250)
genre = models.ManyToManyField(Genre, verbose_name=_('genre'))
director = models.ManyToManyField(
Person, verbose_name=_('director'), related_name=_('director'),limit_choices_to={'is_director': True},blank=True)
actors = models.ManyToManyField(
Person, verbose_name=_('actors'), related_name=_('actors'),limit_choices_to={'is_actor': True},blank=True)
1- 我的代码有问题吗?
2- 我做错了吗?
3- 我是不是选错了框架?
4- 我熟悉 asp.net core 和 laravel。和他们一起写这种应用程序会更好吗?语言没问题,我只需要表现。
【问题讨论】:
-
在不加载fixture数据的情况下添加电影会不会很慢?
-
我对 django 不熟悉,但在处理大量数据时是一种通用方法。 1- 分页 2- 急切加载/延迟加载 3- 使用序列化程序来限制无用的数据属性 这些是我在项目中所做的几件事。 (Angularjs + Rails)
-
如果你不使用分页、记忆、缓存行为,你使用哪种技术都没有关系(如果你有这么大的数据)。有用 Django 编写的最大的网络应用程序(instagram、disqus、bitbucket、pinterest、disqus 等)。 Django 秤。使用分页并在滚动上动态加载数据,这始终是个好主意(大多数网络应用程序都是以这种方式实现的)。数据永远不会一次加载。
-
亲爱的 Will,没有它,它会在几毫秒内加载页面。
-
在管理页面 django 中创建了一个多选字段。没有分页。
标签: python django autocomplete frameworks large-data