Проблема производительности (долгое время сериализации) с сериализаторами фреймворка отдыха Django на больших наборах данных, таких как 1000 объектов, при получении (чтении) данных

Я работаю над приложением Django, которое использует Django Rest Framework для предоставления API. Я испытываю значительные проблемы с производительностью при сериализации больших данных в Django Rest Framework. У меня есть конечная точка, которая возвращает список объектов, например, 1000 записей. Ответ медленный и занимает около 5-6 секунд. Это неприемлемо для пользовательского опыта.

Сведения об окружающей среде:

App Engine Runtime: Python 3.9, Django Version: 2.2.28, Django REST Framework Версия: 3.12.4 База данных: Datastore (NDB)

Например, у меня есть модель Test, которая содержит около 40 полей. При получении списка объектов время отклика составляет около 5-6 секунд, что слишком медленно для моего случая использования.

Вот соответствующий код:

Query: 

 return self.ndb_class.all(
            namespace=self.get_namespace(), ancestor=ancestor_key
        )

Code snippet:

        queryset = self.filter_queryset(self.get_queryset())
        page = self.paginate_queryset(queryset)
        if page is not None:
            self.get_related_data(page)
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)

        serializer = self.get_serializer(queryset, many=True)
        results = {'results': serializer.data}
        return Response(results)
 

Панель инструментов профилирования показывает, что время запроса не является проблемой, но шаг сериализации кажется медленным. Из-за этого я протестировал другие библиотеки сериализации, включая те, которые предлагаются в онлайн-ссылках (такие как DRF Serpy, Pydantic, Marshmallow и т.д.), но мне не удалось сократить время сериализации до 1 секунды. Это по-прежнему занимает около 5+ секунд, больше или меньше.

Любые решения или советы по дальнейшей оптимизации или отладке узкого места будут оценены по достоинству!

Вернуться на верх