Форум сайта python.su
15
Мне честно говоря не с чем сравнить.
Есть две модельки, взятые с потолка:
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)
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)
Офлайн
33
Прежде, чем копать.
Вы уверенны, что дело именно в Django, а не в СУБД (прирост базы, блокировки, тормозящие при создании индексы и т.п.)?
Офлайн
33
Какой результат, если уменьшить batch_size?
Очень похоже на контроль внешнего ключа на каждую запись книги - ForeignKey тормозить может.
Офлайн
15
Я не очень вопрос правильно сформулировал.
Метод 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)
Офлайн