Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Медленно создаётся 10000 объектов моделей со связью ForeignKey [RSS Feed]

#1 Янв. 24, 2014 11:01:44

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Медленно создаётся 10000 объектов моделей со связью ForeignKey

Мне честно говоря не с чем сравнить.
Есть две модельки, взятые с потолка:

class Book(models.Model):
    author = models.ForeignKey('Author')
    title = models.CharField(max_length=100)
    page_count = models.IntegerField()
    exists = models.BooleanField()
    chars_count = models.BigIntegerField()
    digit_version = models.BinaryField()
    important_pages = models.CommaSeparatedIntegerField(max_length=1000)
    wrote = models.DateField(auto_now=True)
    published = models.DateTimeField(auto_now=True)
    cost = models.DecimalField(max_digits=65, decimal_places=2)
    sale_cost = models.FloatField()
    image = models.ImageField(upload_to='media')
    book_addition = models.FileField(upload_to='media')
 
 
class Author(models.Model):
    name = models.CharField(max_length=100)
    mail = models.EmailField(max_length=254)

дальше создаю 10000 авторов и книг, так вот 10000 авотров создаются почти моментально, а вот 10000 книг создаются около 17секунд. Это нормально?!
RECORDS_COUNT = 10000
 
objs_list = []
for i in range(RECORDS_COUNT):
    obj = Author(name='author_'+str(i), mail='author_'+str(i)+'@djangomail.de')
    objs_list.append(obj)
Author.objects.bulk_create(objs_list)
      
objs_list.clear()
authors = Author.objects.all()
for i in range(RECORDS_COUNT):
    obj = Book(author=authors[i], title='book_'+str(i), page_count=300, exists=True, chars_count=300000, cost=347.77, sale_cost=244.07)
    objs_list.append(obj)
Book.objects.using(db_engine_name).bulk_create(objs_list)

Отредактировано buddha (Янв. 24, 2014 14:56:29)

Офлайн

#2 Янв. 24, 2014 14:37:04

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Медленно создаётся 10000 объектов моделей со связью ForeignKey

Прежде, чем копать.
Вы уверенны, что дело именно в Django, а не в СУБД (прирост базы, блокировки, тормозящие при создании индексы и т.п.)?



Офлайн

#3 Янв. 24, 2014 14:43:18

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Медленно создаётся 10000 объектов моделей со связью ForeignKey

Какой результат, если уменьшить batch_size?
Очень похоже на контроль внешнего ключа на каждую запись книги - ForeignKey тормозить может.



Офлайн

#4 Янв. 24, 2014 14:56:16

buddha
От:
Зарегистрирован: 2012-03-02
Сообщения: 422
Репутация: +  15  -
Профиль   Отправить e-mail  

Медленно создаётся 10000 объектов моделей со связью ForeignKey

Я не очень вопрос правильно сформулировал.
Метод Book.objects.using(db_engine_name).bulk_create(objs_list) выполняется около 1.6 сек.
А вот эта конструкция около 17 сек.:

objs_list.clear()
authors = Author.objects.all()
for i in range(RECORDS_COUNT):
    obj = Book(author=authors[i], title='book_'+str(i), page_count=300, exists=True, chars_count=300000, cost=347.77, sale_cost=244.07)
    objs_list.append(obj)

П.С.: кстати плохо отступы в блоке кода сделал. Поправил.

Отредактировано buddha (Янв. 24, 2014 14:56:55)

Офлайн

  • Начало
  • » Django
  • » Медленно создаётся 10000 объектов моделей со связью ForeignKey[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version