Как решить проблему с загрузкой большого количества данных в Django? - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь написать приложение типа imdb для своего рабочего проекта.В этом приложении мне нужно хранить 8700 фильмов IMDB, а также около 40 тыс. режиссеров и актеров / актрис в базе данных MySQL,

, когда я пытался опубликовать новый фильм, страница создания фильма заняла много времени (около20s) для рендеринга.

сначала я создал модель с именем "персоны" с логическими полями "имя человека", "пол", "is_director" и "is_actor".

затем я создалмодель под названием "movies" с 2 ManyToManyFields для is_director и is_actor Person.

После этого я импортировал около 40 тыс. человек в свою базу данных с помощью приспособления django.моя проблема началась отсюда.Когда я пытался опубликовать новый фильм от администратора django, создание страницы фильма заняло много времени (около 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 - Я знаком с ядром и laravel asp.net.лучше написать такое приложение с ними?с языком проблем нет, мне нужна только производительность.

1 Ответ

0 голосов
/ 31 мая 2019

Полагаю, ваша админ-страница дважды содержит список из 40 тысяч человек.Попробуйте использовать raw_id_fields в админке для ваших полей режиссера и актеров.

Пожалуйста, смотрите Документацию Django и в этой статье об очень длинном списке (с примером с ForeignKey , но он также должен работать с ManyToManyField )

...