Django REST Framework多个更新性能问题

时间:2014-09-29 16:05:32

标签: python django django-rest-framework

我有以下型号:

class MyModel(models.Model):
    parent  = models.ForeignKey(ParentModel)
    a_field = models.CharField(max_length=10)
    # some more fields

Django REST Framework序列化程序:

class MyModelSerializer(serializers.ModelSerializer):
    class Meta(object):
        model = MyModel

使用以下代码更新多个项目时,更新的性能非常差,特别是如果MyModel包含许多记录(在我的情况下为~30K)。

updated_objects = [...] # an array of serialized MyModel instances
existing_objects = MyModel.objects.filter(id__in = [obj['id'] for obj in updated_objects])
s = MyModelSerializer(existing_objects, data = updated_objects, many = True)
s.is_valid()
s.save()

调试代码后,我发现每个更新的项目都会执行5个SQL查询:

  • 一个用于将parent字段解析为ParentModel个实例。
  • 在项目的full_clean功能期间
  • 3,可能用于验证项目的字段。
  • 实际更新项目的一个

有没有办法提高批量更新的性能,例如缓存已解析的ParentModel实例?在30K的表中更新50行需要超过20秒。

0 个答案:

没有答案