Django Rest Frame Производительность вложенной модели - PullRequest
1 голос
/ 16 июня 2019

Я профилировал свое приложение Django, используя silk , и оказалось, что для 200000 записей в db вызов списка GET занимает 701 мс, из которых только 36 мс тратится на запросы (я использую prefetch_related и select_related и нумерация страниц)

Поскольку я предполагал, что db-запросы будут занимать больше всего времени, мне интересно, делаю ли я что-то не так, поскольку 95% времени не тратится на запросы.

Моя основная модель измерения очень вложенная и выглядит следующим образом

class Measurement(models.Model):
    filetype = models.ForeignKey(Filetype)
    sensor = models.ForeignKey(Sensor)
    sensorpositions = models.ManyToManyField('Sensorposition')
    experiment = models.ForeignKey(Experiment, related_name = "measurementexperiment")
    data = models.FileField(null=True)

и интерфейс ожидает подробный вывод nested-json для каждого поля, поэтому Serializer возвращает не только pk, но и все подполя Foreign-моделей:

class MeasurementSerializer(MeasurementSerializer):
    sensor = SensorDetailSerializer(many=False, read_only=True)
    sensorpositions = SensorpositionSerializer(many=True, read_only=True)
    experiment = ExperimentDetailForMeasurementSerializer(many=False, read_only=True)
    filetype = FiletypeSerializer(many=False, read_only=True)

class ExperimentDetailForMeasurementSerializer(ExperimentSerializer):
    persons = PersonSerializer(many=True, read_only=True)
    conditions = ConditionSerializer(many=True, read_only=True)
    location = LocationSerializer(many=False, read_only=True)
    layout = LayoutSerializer(many=False, read_only=True)

Так я просто теряю много времени из-за вложенной сериализации или время ответа, как 701 мс, нормальное?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...