Телефон: 8-800-350-22-65
WhatsApp: 8-800-350-22-65
Telegram: sibac
Прием заявок круглосуточно
График работы офиса: с 9.00 до 18.00 Нск (5.00 - 14.00 Мск)

Статья опубликована в рамках: Научного журнала «Студенческий» № 37(249)

Рубрика журнала: Информационные технологии

Скачать книгу(-и): скачать журнал часть 1, скачать журнал часть 2, скачать журнал часть 3, скачать журнал часть 4, скачать журнал часть 5

Библиографическое описание:
Птуха В.И., Птуха К.И. СРАВНЕНИЕ СКОРОСТИ СЕРИАЛИЗАЦИИ ДАННЫХ ИЗ ОБЪЕКТОВ В DJANGO ПРИ ПОМОЩИ DJANGO REST FRAMEWORK И SERPY // Студенческий: электрон. научн. журн. 2023. № 37(249). URL: https://sibac.info/journal/student/249/306114 (дата обращения: 02.06.2024).

СРАВНЕНИЕ СКОРОСТИ СЕРИАЛИЗАЦИИ ДАННЫХ ИЗ ОБЪЕКТОВ В DJANGO ПРИ ПОМОЩИ DJANGO REST FRAMEWORK И SERPY

Птуха Виктор Иванович

магистрант, Белорусский Государственный Университет Информатики и Радиоэлектроники,

РБ, г. Минск

Птуха Кирилл Иванович

студент, Белорусский Национальный Технический Университет,

Республика Беларусь, г. Минск

COMPARISON OF DATA SERIALIZATION SPEED FROM OBJECTS IN DJANGO USING DJANGO REST FRAMEWORK AND SERPY

 

Viktar Ptukha

master's student, Belarusian State University of Informatics and Radioelectronics,

Republic of Belarus, Minsk

Kirill Ptukha

Student, Belarusian National Technical University,

Republic of Belarus, Minsk

 

АННОТАЦИЯ

Статья посвящена исследованию производительности сериализации объектов веб-фреймворком Django с использованием Django REST Framework (DRF) и библиотеки Serpy. Django широко распространён и популярен, но его достоинства, включая предустановленные инструменты и структурированную архитектуру, сопровождаются некоторыми ограничениями. Одним из ключевых этапов работы с DRF является сериализация объектов в JSON формат, что становится критическим при обработке больших объёмов данных.

Целью исследования является сравнение скорости сериализации 500,000 объектов модели в рамках одного запроса с использованием стандартных сериализаторов DRF и библиотеки Serpy.

ABSTRACT

The article is dedicated to investigating the performance of object serialization in the Django web framework using Django REST Framework (DRF) and the Serpy library. Django is widely used and popular, but its advantages, including pre-installed tools and a structured architecture, come with some limitations. One of the key stages in working with DRF is the serialization of objects into the JSON format, which becomes critical when processing large volumes of data.

The main purpose of the research is to compare the serialization speed of 500,000 model objects within a single request using standard DRF serializers and the Serpy library.

 

Ключевые слова: сериализация, DRF, Serpy.

Keywords: serialization, DRF, Serpy.

 

Введение

За 23 года своего существования, фреймворк Django занял лидирующие позиции в рейтинге популярных Веб фреймфорков, написанных на языке Python, продолжает развиваться и улучшаться, а также наращивает свою аудиторию.

По данным Regional Research Reports, объем мирового рынка веб-фреймворков python прогнозируется на уровне 14 млрд. долл. в 2022 году до 17,88 млрд. долл. в 2033 году [Источник 4], что свидетельствует о популярности и востребованности развития этого направления.

Достоинством и, в то же время, недостатком фреймворка Django является большое количество заранее предустановленных иструментов, таких как встроенная ORM, панель администратора, пользователи и группы, авторизация и аутентификация, наличие форм. Заранее заложенная архитектура проекта так же не позволяет задавать структуру приложения по своему усмотрению, фреймворк реализует паттерн MVC (Модель-Представление-Контроллер). Попытка отойти от этого шаблона приводит к неоправданно большим затратам на разработку и является нецелесообразной. Для написания API используется библиотека DJANGO REST Framework (DRF), которая, в большинстве своём, хорошо справляется с поставленными задачами, предоставляет множество настроек и модулей для гибкого построения API.

Важным этапом при работе с DRF является сериализация python объекта в JSON формат, в качестве ответа на запрос пользователя.

Сериализация – процесс преобразования структур данных (например, массив, словарь или пользовательский класс) в формат, который в дальнейшем можно удобно сохранять как файл или передать по сети. В данном контексте пользовательские классы необходимо сериализовать в формат JSON.

В ряде случаев приходится преобразовывать большое количество объектов в рамках одного запроса. Здесь и можно попробовать получить увеличение производительности за счёт выбора оптимальной библиотеки.

Постановка задачи и методы ее решения

А. Цель исследования

Целью исследования является сравнить скорость сериализации 500000 объектов модели в контексте одного запроса при помощи стандартных сериализаторов DRF и отдельной библиотеки для сериализации Serpy.

Б. Актуальность и новизна

Актуальность данной темы обусловлена ежегодным увеличением нагрузки на сервер, наращиванием объёмов обрабатываемой информации, требованиям ко времени обработки запросов со стороны бизнеса. Поиск средств и методов для решения данных задач является неотъемлемой частью написания качественного ПО.

В. Исходные гипотезы

Официальная документация Sepry приводит исследование, в котором утверждает, что данная библиотека работает значительно быстрее сериализаторов DRF. Эти исследования проводятся на симуляции значительного количества запросов, сериализующих один объект и не рассматривают случай, когда нам нужно сериализовать большую группу объектов в рамках одного запроса.

Подготовка моделей и данных

Для проведения исследования используем две Django модели: ModelA, ModelB (Рисунок 1.).

 

Рисунок 1. Описание моделей ModelA и ModelB

 

Атрибуты моделей имеют одинаковые названия и типы (name, num, json_data). ModelA связана с ModelB отношением один-ко-многим.

Для каждой модели создаём наборы классов-сериализаторов DRF и Serpy. Для модели ModelB создадим отдельный сериализатор для каждого поля по отдельности.

Для сериализации сразу всех полей моделей ModelA и ModelB, при помощи DRF, будем использовать два вида с базовых классов ModelSerializer и Serializer (Рисунок 2, 3).

 

Рисунок 2. DRF сериализаторы для моделей ModelA и ModelB

 

Рисунок 3. Serpy сериализаторы для моделей ModelA и ModelB

 

В DRF ModelSerializer является подклассом Serializer. Он самостоятельно создаёт поля сериализации на основе полей модели. Автоматически определяет метод create и update.

В базе данных создадим 500000 записей для каждой модели. Данные будем записывать в базу данных Postgres. Пример скрипта для создания объектов в БД представлен ниже (Рисунок 4.).

 

Рисунок 4. Скрипт для генерации данных

 

Для измерения времени работы сериализаторов используем модуль cProfile. Исходный код для проведения измерений в статью не включается ввиду использования большого количества вспомогательных функций, модулей и классов для запуска, обработки, сохранения результатов и их отображения на графиках.

Важно отметить, что для измерения касаются исключительно сериализации объектов, все измерения будут производиться на уже извлечённых данных. При получении данных из связанных объектов используется select_related метод Django ORM, с целью избежать дополнительных запросов в СУБД во время сериализации.

Результаты

На первой гистограмме показана скорость сериализации 500,000 объектов из модели ModelB в зависимости от типа поля и используемой библиотеки. ModelB не содержит в себе вложенных данных из других моделей. В качестве родительского класса DRF сериализатора использовался класс Serializer (Рисунок 5.).

 

Рисунок 5. Гистограмма сериализации 500000 простых объектов

 

На гистограмме видно, что скорость сериализации данных при помощи библиотеки Serpy более чем в 10 раз быстрее, стандартных сериализаторов DRF.

Сериализация сразу всех полей группы объектов в Serpy происходит почти в 15 раз быстрее.

Гистограмма (Рисунок 6.) Показывает скорость сериализации 500000 объектов из модели ModelA, включяя данные из связанной модели ModelB.

Для DRF на гистограмме отображены два графика. На первом в качестве родительского класса сариализатора использовался ModelSerializer, на втором Serializer.

Результаты показывают, что DRF ModelSerializer работает на 27,38% быстрее, чем DRF Serializer, сериализатор Serpy на 84,49% быстрее ModelSerializer.

 

Рисунок 6. Гистограмма сериализации 500000 вложенных объектов

 

Выводы

Библиотека Serpy работает значительно быстрее сериализаторов DRF. Это обусловлено тем, что DRF включает в себя большое количество дополнительных функций, поддерживает явную работу с моделями Django, автоматическую валидацию полей. Serpy в свою очередь лишена такой гибкости, но лучше оптимизирована для сериализации данных, используя оптимальные алгоритмы и структуры данных.

 

Список литературы:

  1. Vincent, William S. Django for APIs: Build web APIs with Python and Django, WelcomeToCode (2020), ISBN 10: 1735467227 ISBN 13: 9781735467221, 208 – c.
  2. Электронный ресурс: https://www.django-rest-framework.org/
  3. Электронный ресурс: https://serpy.readthedocs.io/en/latest/
  4. Электронный ресурс: https://www.regionalresearchreports.com/industry-reports/python-web-frameworks-market/ICT-6999
Удалить статью(вывести сообщение вместо статьи): 

Оставить комментарий

Форма обратной связи о взаимодействии с сайтом
CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.