Оптимизация база данных MySQL в Laravel | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 30 ноября, печатный экземпляр отправим 4 декабря.

Опубликовать статью в журнале

Авторы: ,

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

Опубликовано в Молодой учёный №19 (414) май 2022 г.

Дата публикации: 12.05.2022

Статья просмотрена: 246 раз

Библиографическое описание:

Ахметов, Берик Бакытжанулы. Оптимизация база данных MySQL в Laravel / Берик Бакытжанулы Ахметов, Мукан Кудратулы Раджапов. — Текст : непосредственный // Молодой ученый. — 2022. — № 19 (414). — С. 13-14. — URL: https://moluch.ru/archive/414/91367/ (дата обращения: 16.11.2024).



Очень важно идти в ногу с прогрессом и своевременно реагировать на потребности потенциальных клиентов. В современной реалии весь мир перешел в интернет, и как многие онлайн бизнесы все зависит от отклика веб приложений. Как известно, база данных является основополагающим в веб приложении, исходя от количества запросов в приложение может работать медленнее. В данной статье описывается, как лучше использовать БД MySQL в Laravel, чтобы современные веб приложения работали по принципу «швейцарских часов»

Ключевые слова: Laravel, MySQL, индекс, запрос, select, update, delete, Redis, Cache.

Скорость — критически важный фактор для долгосрочного успеха приложения. Для решения данной проблемы требуются не только мощные сервера, но также хорошо оптимизированная База Данных. Рассмотрим популярное фреймворк Laravel и базу данных MySQL. Ниже приведены советы для оптимизации базы данных.

  1. Предположим, имеется более миллиона записей и нужно обработать их черех цикл;

Вариант реалицации будет проходить по следующими маршруту:

$posts = DB::table(‘posts’)->get();

foreach ($posts as $post) {

//Обработка запроса

}

При данной реализации закончится запас памяти. Если вместо привычного получения записи применим chunk, то сможем решить проблему памяти путем обработки ДАННЫХ по частям, тем самым сэкономим память в приложение [2].

$posts = DB::table(‘posts’)->chunk(100, function ($posts)){

foreach($posts as $post){

//Обработка запроса

}

}

  1. Выбрать только нужные поля;

Рассмотрим на примере запроса:

Post::find(1);

Данный запрос возрвращает все поля и возращаемые поля весят больше, чем необходимо (или весят больше чем должны быть)

Post::select([‘id’,’title’])->find(1);

При данном запросе, возращаем нужные поля с меньшим весом (объемом) [1].

  1. Объединить похожие запросы;

Пример: При запросе трех разных статуса в объявлениях логично сделать запрос по нижеследующему запросу:

Post::where(‘status’,’published’)->get();

Post::where(‘status’,’featured’)->get();

Post::where(‘status’,’scheduled’)->get();

Но, в данном случае каждый отдельный запрос — это нагрузка на сервер, во избежание данной проблемы лучше применить маршрут по запросу: (применить нижеуказанный запрос:)

Post::whereIn(‘status’, [‘published’,’featured’,’scheduled’])->get();

В результате, наша задача решается одним запросом вместо трех [1].

  1. Добавить индекс к часто запрашиваевым полям;

Давайте рассмотрим пример использования поля status , т. к. данное поле часто применяется. В среднем если в таблице содержится более миллиона полей, то каждый запрос по полю status занимает в среднем более 10 секунд. При использовании индекс к полю status запрос будет занимать в среднем 1,2 секунды. Индекс это алгоритм бинарного поиска реализованный в MySQL [3].

  1. Оптимизация MySQL Insert;

В MySQL есть четыре основные операции: Insert, SELECT, Update, Delete. Из которых самым медленным является запрос Insert.

Если в основной таблице работает определенный запрос, то следующие запросы ждут выполнения предыдущего. Медленные SQL-запросы могут негативно отражаться на производительности. И для того чтобы ускорить работу Insert нужно настроить сервер.

На сервере с установленным MySQL значение innodb_log_file_size по умолчанию составляет 5 Mb. Этого бывает недостаточно для сервера с множеством запросов, поэтому нужно увеличивать параметр innodb_log_file_size до 500 Mb. Следовательно, операция Insert ускоряется.

  1. Тщательно выбирайте тип полей;

При сохранении текста имеется возможность несколько выбора типа полей:

VARCHAR — до 255 символов

CHAR — до 1000 символов

BLOB — не имеет огранечение.

Для рационального использования памяти, необходимо правильно использовать типы данных для целесообраного экономии БД.

Например: при хранении малых символов, нет надобности в использовании BLOB [3].

  1. Разделите большую таблицу на несколько частей;

Для ускорении работы имеется возможность разделении полей на несколько частей. Рассмотрим пример:

У нас имеется более 10000 записей в одной таблице вес которого составляет 4 Мб. Давайте разделим данную таблицу на несколько малых таблиц:

Первая –основная информация: ФИО, телефон, почта, пароль;

Вторая — хобби, увлечения и интересы;

Третья — дополнительные информация: контакты, семейное положение;

В результате, мы получили три таблицы с малыми объемами, исходя из этого будем легче их обработать.

  1. Определить тип таблиц;

В MySQL имеется два типа таблиц: InnoDB и MyISAM.

InnoDB используется для обеспечения целостности данных, таких как передача личных данных, банковские данные, транзакция банковских дел и прочие. В связи с этим InnoDB работает чуть медленнее относительно MyISAM.

Пример: если человек оплатил товар через банковскую карту, происходит процесс снятия денег с клиента и пополнения счета продавца. Таблица InnoDB будет удерживать операцию у себя в очереди, по мере окончания данного процесса.

  1. Используйте БД Redis;

Рассмотрим случай, если в базе работают одновременно миллион пользователей, они генерируют постоянный объем информации, что значительно тормозит работу всей базы. Это следствие того, что пока первый запрос обрабатывается, второй запрос будет стоять в очереди. Между запросами диапазон ожидания минимальный, но по мере возрастания запросов будут возникать проблемы по загруженности БД, тем самым вызывая вопросы к компетентности специалистов.

При возникновении данной проблемы необходимо использовать кэш либо временную память — Redis. Redis — это NOSQL база данных, которая используется в памяти. Redis работает немного быстрее чем MySQL, так как, Redis берет данные из памяти.

Заключение

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

Литература:

  1. Официальная документация по Laravel. https://laravel.com/
  2. 18 tips to optimize laravel queries. https://dudi.dev/optimize-laravel-database-queries/
  3. MySQL. Оптимизация производительности (2020)
Основные термины (генерируются автоматически): запрос, BLOB, поле, CHAR, NOSQL, SELECT, VARCHAR, база данных, Обработка запроса, тип таблиц.


Ключевые слова

индекс, запрос, MySQL, Laravel, select, update, delete, Redis, Cache

Похожие статьи

Создание клиент-серверного приложения на основе restful api архитектуры

В данной работе было спроектировано и разработано клиент-серверное приложение с архитектурой Restfull и взаимодействием с клиентом по API. Затронуты проблемы, связанные с проектированием микросервисов и его взаимодействия с клиентом. В качестве клиен...

Общие компоненты при кроссплатформенной разработке для web-и мобильных приложений с использованием react и react-native

С появлением таких библиотек, как ReactJS и React-Native от компании Facebook изменился ландшафт разработки web и мобильных приложений. Основная идея заключается в том, что, выучив один подход (библиотеку), ее можно использовать везде как для web- та...

Разработка веб-приложения «Семейный органайзер»

В статье рассматриваются способы организации повседневной семейной жизни. Предлагается разработка веб-приложения, которое позволит управлять задачами, семейным бюджетом и совместными списками покупок. Основное внимание уделяется этапам разработки веб...

Теоретические аспекты создания обозревателя файловой директории с применением кроссплатформенного фреймворка Qt

В статье подробно разобран пример программы, написанной на языке C++ на основе кроссплатформенного фреймворка Qt. Программа InterView написана программистами компании Qt, и входит в состав примеров, поставляемых вместе с пакетом Qt Creator. На её при...

Разработка веб-сервиса для проведения аукционов

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

Разработка приложения «Закладки» для web-браузера

Система хранения данных в веб-браузерах — “Закладки” — имеет ряд недостатков: отсутствие возможности описания хранимых ссылок, невозможность оперирования с группами вкладок и сложность при миграции данных между браузерами, — при этом, являясь одной и...

Hibernate-6: обзор изменений и преимуществ

Современное развитие технологий требует обновления фреймворков. Данная статья анализирует изменения в Hibernate при переходе с 5 на 6 версию. Рассматриваются новые возможности, изменения в API и аннотациях, а также предоставляются практические советы...

Моделирование угроз для веб-приложений на основе веб-служб

Анализ угроз веб-приложения может привести к широкому спектру выявленных угроз. Некоторые из этих угроз будут очень специфичны для приложения; другие будут больше связаны с базовым инфраструктурным программным обеспечением, таким как веб-серверы или ...

Асинхронное выполнение SQL-запросов на языке программирования PHP

В данной работе представлены результаты исследования и использования асинхронных SQL-запросов с помощью скриптового языка PHP, которые позволят значительно ускорить выполнение массивного SQL-запроса с помощью использования логических ядер процессора....

Разработка Android фреймворка для аспектно-ориентированного программирования

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

Похожие статьи

Создание клиент-серверного приложения на основе restful api архитектуры

В данной работе было спроектировано и разработано клиент-серверное приложение с архитектурой Restfull и взаимодействием с клиентом по API. Затронуты проблемы, связанные с проектированием микросервисов и его взаимодействия с клиентом. В качестве клиен...

Общие компоненты при кроссплатформенной разработке для web-и мобильных приложений с использованием react и react-native

С появлением таких библиотек, как ReactJS и React-Native от компании Facebook изменился ландшафт разработки web и мобильных приложений. Основная идея заключается в том, что, выучив один подход (библиотеку), ее можно использовать везде как для web- та...

Разработка веб-приложения «Семейный органайзер»

В статье рассматриваются способы организации повседневной семейной жизни. Предлагается разработка веб-приложения, которое позволит управлять задачами, семейным бюджетом и совместными списками покупок. Основное внимание уделяется этапам разработки веб...

Теоретические аспекты создания обозревателя файловой директории с применением кроссплатформенного фреймворка Qt

В статье подробно разобран пример программы, написанной на языке C++ на основе кроссплатформенного фреймворка Qt. Программа InterView написана программистами компании Qt, и входит в состав примеров, поставляемых вместе с пакетом Qt Creator. На её при...

Разработка веб-сервиса для проведения аукционов

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

Разработка приложения «Закладки» для web-браузера

Система хранения данных в веб-браузерах — “Закладки” — имеет ряд недостатков: отсутствие возможности описания хранимых ссылок, невозможность оперирования с группами вкладок и сложность при миграции данных между браузерами, — при этом, являясь одной и...

Hibernate-6: обзор изменений и преимуществ

Современное развитие технологий требует обновления фреймворков. Данная статья анализирует изменения в Hibernate при переходе с 5 на 6 версию. Рассматриваются новые возможности, изменения в API и аннотациях, а также предоставляются практические советы...

Моделирование угроз для веб-приложений на основе веб-служб

Анализ угроз веб-приложения может привести к широкому спектру выявленных угроз. Некоторые из этих угроз будут очень специфичны для приложения; другие будут больше связаны с базовым инфраструктурным программным обеспечением, таким как веб-серверы или ...

Асинхронное выполнение SQL-запросов на языке программирования PHP

В данной работе представлены результаты исследования и использования асинхронных SQL-запросов с помощью скриптового языка PHP, которые позволят значительно ускорить выполнение массивного SQL-запроса с помощью использования логических ядер процессора....

Разработка Android фреймворка для аспектно-ориентированного программирования

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

Задать вопрос