Forwarded from Библиотека программиста | программирование, кодинг, разработка
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21💯1
Что такое индексы? Как они влияют на время выполнения SELECT, INSERT?
Индексы в базах данных — это структуры данных, создаваемые для ускорения поиска и доступа к данным. Их основная цель — улучшить производительность запросов к базе данных, таких как SELECT, INSERT, UPDATE и DELETE, путем уменьшения количества записей, которые необходимо обработать для выполнения запроса.
Индексы работают подобно алфавитному указателю в книге, где каждое слово имеет свой номер страницы. Когда запрос направлен к базе данных, оптимизатор запросов использует индексы для быстрого нахождения необходимых данных.
Влияние индексов на время выполнения различных операций запросов:
SELECT: Индексы значительно ускоряют операции SELECT, поскольку они позволяют базе данных быстро найти соответствующие записи. Однако, иногда индексы могут замедлить операции SELECT, если их неправильно использовать или если данные часто изменяются, что приводит к частым обновлениям индексов.
INSERT: Вставка данных также может быть замедлена из-за индексов. При вставке новой записи база данных должна обновить соответствующие индексы, что может вызвать дополнительные накладные расходы по времени. Однако, правильно спроектированные индексы могут сделать вставку более эффективной, поскольку они уменьшают количество данных, которые нужно перестраивать для обновления индексов.
Общее правило состоит в том, что индексы улучшают производительность операций чтения данных (SELECT), но могут негативно сказываться на производительности операций записи данных (INSERT, UPDATE, DELETE). Поэтому при проектировании базы данных необходимо балансировать использование индексов в зависимости от требований к производительности операций чтения и записи.
#вопросы_с_собеседований
Индексы в базах данных — это структуры данных, создаваемые для ускорения поиска и доступа к данным. Их основная цель — улучшить производительность запросов к базе данных, таких как SELECT, INSERT, UPDATE и DELETE, путем уменьшения количества записей, которые необходимо обработать для выполнения запроса.
Индексы работают подобно алфавитному указателю в книге, где каждое слово имеет свой номер страницы. Когда запрос направлен к базе данных, оптимизатор запросов использует индексы для быстрого нахождения необходимых данных.
Влияние индексов на время выполнения различных операций запросов:
SELECT: Индексы значительно ускоряют операции SELECT, поскольку они позволяют базе данных быстро найти соответствующие записи. Однако, иногда индексы могут замедлить операции SELECT, если их неправильно использовать или если данные часто изменяются, что приводит к частым обновлениям индексов.
INSERT: Вставка данных также может быть замедлена из-за индексов. При вставке новой записи база данных должна обновить соответствующие индексы, что может вызвать дополнительные накладные расходы по времени. Однако, правильно спроектированные индексы могут сделать вставку более эффективной, поскольку они уменьшают количество данных, которые нужно перестраивать для обновления индексов.
Общее правило состоит в том, что индексы улучшают производительность операций чтения данных (SELECT), но могут негативно сказываться на производительности операций записи данных (INSERT, UPDATE, DELETE). Поэтому при проектировании базы данных необходимо балансировать использование индексов в зависимости от требований к производительности операций чтения и записи.
#вопросы_с_собеседований
❤8👍1
Laravel facades vs class aliases
Здесь рассматриваются различия между фасадами (Facades) и псевдонимами классов (Class Aliases) в Laravel, а также объясняется, как они стали восприниматься сообществом Laravel как взаимосвязанные концепции.
Фасады в Laravel представляют собой прокси-объекты для объектов, хранящихся в контейнере служб (Service Container). Если объект привязан к контейнеру служб под именем 'my-service', вы можете вызывать его методы, используя статические методы фасада.
При вызове статического метода на этом фасаде вызывается магический метод __callStatic(), извлекается служба 'my-service' из контейнера, и вызов перенаправляется к этому экземпляру.
Псевдонимы классов позволяют разработчикам создавать альтернативные имена для классов с помощью функции class_alias. Например:
class_alias(MyClass::class, 'BonzuPippinpaddleopsicopolisTheThird');
Это может быть удобно, когда нужно использовать классы с длинными полностью квалифицированными именами (FQCN) в представлениях или когда использование операторов use не уместно.
Основное недопонимание заключается в том, что Laravel по умолчанию создает псевдонимы для всех своих фасадов, делая их доступными как будто они находятся в глобальном пространстве имен. Это привело к тому, что многие в сообществе Laravel перепутали фасады с псевдонимами классов.
Здесь рассматриваются различия между фасадами (Facades) и псевдонимами классов (Class Aliases) в Laravel, а также объясняется, как они стали восприниматься сообществом Laravel как взаимосвязанные концепции.
Фасады в Laravel представляют собой прокси-объекты для объектов, хранящихся в контейнере служб (Service Container). Если объект привязан к контейнеру служб под именем 'my-service', вы можете вызывать его методы, используя статические методы фасада.
При вызове статического метода на этом фасаде вызывается магический метод __callStatic(), извлекается служба 'my-service' из контейнера, и вызов перенаправляется к этому экземпляру.
Псевдонимы классов позволяют разработчикам создавать альтернативные имена для классов с помощью функции class_alias. Например:
class_alias(MyClass::class, 'BonzuPippinpaddleopsicopolisTheThird');
Это может быть удобно, когда нужно использовать классы с длинными полностью квалифицированными именами (FQCN) в представлениях или когда использование операторов use не уместно.
Основное недопонимание заключается в том, что Laravel по умолчанию создает псевдонимы для всех своих фасадов, делая их доступными как будто они находятся в глобальном пространстве имен. Это привело к тому, что многие в сообществе Laravel перепутали фасады с псевдонимами классов.
👍3❤2🔥1
«Как мы разрабатывали сервис расчета стоимости доставки для ритейлера»
Представьте: вы — крупный производитель и ритейлер товаров для дома, который обрабатывает в сутки тысячи заказов по всей стране. Но при этом у вас нет единого алгоритма расчета стоимости доставки — из-за этого суммы почти всегда разные, иногда завышенные. Менеджеры вручную корректируют стоимость доставки до значений, которые не отпугнули бы клиента. При этом покупатели часто слышат разные цены от специалистов колл-центра и офлайн-магазинов. А после — оставляют жалобы или даже отказываются от покупки.
Здесь рассказывается о том, как был разработан и внедрён сервис расчёта стоимости доставки.
Представьте: вы — крупный производитель и ритейлер товаров для дома, который обрабатывает в сутки тысячи заказов по всей стране. Но при этом у вас нет единого алгоритма расчета стоимости доставки — из-за этого суммы почти всегда разные, иногда завышенные. Менеджеры вручную корректируют стоимость доставки до значений, которые не отпугнули бы клиента. При этом покупатели часто слышат разные цены от специалистов колл-центра и офлайн-магазинов. А после — оставляют жалобы или даже отказываются от покупки.
Здесь рассказывается о том, как был разработан и внедрён сервис расчёта стоимости доставки.
Хабр
Как мы разрабатывали сервис расчета стоимости доставки для ритейлера
Представьте: вы – крупный производитель и ритейлер товаров для дома, который обрабатывает в сутки тысячи заказов по всей стране. Но при этом у вас нет единого алгоритма расчета стоимости доставки –...
👍3❤1
Стрессуете на работе?
Anonymous Poll
40%
Ага, особенно когда завтра дедлайн
34%
Нет, работа — кайф
2%
Свой вариант (напишу в комментариях)
24%
Посмотреть результаты
Гайд по мягкому удалению в Laravel
🔄 Мягкие удаления в веб-приложениях позволяют удалять данные без их окончательного удаления из базы данных. Вместо этого устанавливается флаг, указывающий, что данные были удалены, что позволяет их восстановить при необходимости. В Laravel мягкие удаления реализуются с использованием столбца deleted_at с отметкой времени.
👍 Преимущества мягких удалений включают восстановление данных, аналитические цели и двухэтапный процесс удаления для дополнительной верификации. Однако они могут привести к увеличению размера базы данных, случайному запросу удаленных данных и потенциальным проблемам с конфиденциальностью данных.
🛠️ Чтобы реализовать мягкие удаления в Laravel, вы используете трейт SoftDeletes в вашей модели и добавляете столбец deleted_at в таблицу базы данных. Модели мягких удалений могут быть восстановлены или окончательно удалены с использованием предоставленных методов.
🧪 Тестирование софт-удалений включает в себя проверку правильности софт-удаления, восстановления или окончательного удаления моделей, а также проверку запросов на исключение или включение софт-удаленных моделей в зависимости от задуманного. Необходимо быть осторожным с использованием фасада DB, чтобы избежать случайного запроса софт-удаленных данных.
🔄 Мягкие удаления в веб-приложениях позволяют удалять данные без их окончательного удаления из базы данных. Вместо этого устанавливается флаг, указывающий, что данные были удалены, что позволяет их восстановить при необходимости. В Laravel мягкие удаления реализуются с использованием столбца deleted_at с отметкой времени.
👍 Преимущества мягких удалений включают восстановление данных, аналитические цели и двухэтапный процесс удаления для дополнительной верификации. Однако они могут привести к увеличению размера базы данных, случайному запросу удаленных данных и потенциальным проблемам с конфиденциальностью данных.
🛠️ Чтобы реализовать мягкие удаления в Laravel, вы используете трейт SoftDeletes в вашей модели и добавляете столбец deleted_at в таблицу базы данных. Модели мягких удалений могут быть восстановлены или окончательно удалены с использованием предоставленных методов.
🧪 Тестирование софт-удалений включает в себя проверку правильности софт-удаления, восстановления или окончательного удаления моделей, а также проверку запросов на исключение или включение софт-удаленных моделей в зависимости от задуманного. Необходимо быть осторожным с использованием фасада DB, чтобы избежать случайного запроса софт-удаленных данных.
DEV Community
A guide to soft deletes in Laravel
This article was originally written by Ashley Allen on the Honeybadger Developer Blog. There may be...
❤4👍2🔥2😁1
#дайджест новостей по PHP за неделю:
🔎Выпущены PHP 8.2.18, PHP 8.3.6 & PHP 8.1.28 — Команда разработчиков PHP объявляет о немедленной доступности PHP 8.2.18, PHP 8.3.6 и PHP 8.1.28. Это релиз безопасности.
🔎Команда Laravel выпустила v11.4 — с новым фасадом исключений, поддержкой Enum в методе Collection::mapinto() и многое другое.
🔎Basset — альтернативный способ загрузки ассетов CSS & JS
🔎Неделя Symfony #902 (8-14 апреля 2024 г.)
🔎Выпущены PHP 8.2.18, PHP 8.3.6 & PHP 8.1.28 — Команда разработчиков PHP объявляет о немедленной доступности PHP 8.2.18, PHP 8.3.6 и PHP 8.1.28. Это релиз безопасности.
🔎Команда Laravel выпустила v11.4 — с новым фасадом исключений, поддержкой Enum в методе Collection::mapinto() и многое другое.
🔎Basset — альтернативный способ загрузки ассетов CSS & JS
🔎Неделя Symfony #902 (8-14 апреля 2024 г.)
👍3🔥2❤1
Глубокое погружение в оптимальные настройки PHP-FPM
Настройки PHP-FPM часто игнорируются обычными разработчиками, но становятся критически важными по мере роста приложений и возникновения проблем с производительностью.
Раздел по устранению неполадок советует проверять журналы PHP-FPM на предупреждения о настройке max_children, которая определяет максимальное количество дочерних процессов, которые PHP-FPM может породить. Также выделяется важность контроля за потреблением памяти, который можно отслеживать с помощью команд, таких как htop или free -hl.
Настройка менеджера процессов включает выбор между статическим, динамическим и по требованию, каждый из которых имеет свои компромиссы в потреблении памяти и отзывчивости. В статье объясняется, как рассчитать подходящее значение max_children на основе доступных ресурсов сервера и как настраивать другие связанные параметры.
Проведение тестирования различных вариантов менеджера процессов рекомендуется с использованием ApacheBench, с результатами, показывающими неожиданные различия в производительности между статическим, динамическим и по требованию настройками. Кроме того, в статье обсуждаются дополнительные параметры, такие как slowlog для отслеживания медленных запросов и параметры аварийного перезапуска для обработки отказов процессов.
Настройки PHP-FPM часто игнорируются обычными разработчиками, но становятся критически важными по мере роста приложений и возникновения проблем с производительностью.
Раздел по устранению неполадок советует проверять журналы PHP-FPM на предупреждения о настройке max_children, которая определяет максимальное количество дочерних процессов, которые PHP-FPM может породить. Также выделяется важность контроля за потреблением памяти, который можно отслеживать с помощью команд, таких как htop или free -hl.
Настройка менеджера процессов включает выбор между статическим, динамическим и по требованию, каждый из которых имеет свои компромиссы в потреблении памяти и отзывчивости. В статье объясняется, как рассчитать подходящее значение max_children на основе доступных ресурсов сервера и как настраивать другие связанные параметры.
Проведение тестирования различных вариантов менеджера процессов рекомендуется с использованием ApacheBench, с результатами, показывающими неожиданные различия в производительности между статическим, динамическим и по требованию настройками. Кроме того, в статье обсуждаются дополнительные параметры, такие как slowlog для отслеживания медленных запросов и параметры аварийного перезапуска для обработки отказов процессов.
👍12
Настраиваем Windows WSL для локальной разработки Laravel
В этой небольшой статье рассказывается, как правильно настроить WSL в Windows 11 для локальной разработки Laravel-приложения. Мы собираемся установить php, mysql, nginx и composer, а также отредактировать файл hosts в самом Windows.
В этой небольшой статье рассказывается, как правильно настроить WSL в Windows 11 для локальной разработки Laravel-приложения. Мы собираемся установить php, mysql, nginx и composer, а также отредактировать файл hosts в самом Windows.
Хабр
Настраиваем Windows WSL для локальной разработки Laravel
Всем привет! В этой небольшой статье я очень сжато расскажу, как правильно настроить WSL в Windows 11 для локальной разработки Laravel-приложения. Мы собираемся установить php, mysql, nginx и...
❤10👍5🥱5
Какая система типов используется в PHP? Опишите плюсы и минусы.
В PHP используется динамическая система типов, что означает, что тип переменной определяется во время выполнения программы и может изменяться в процессе работы. Вот некоторые плюсы и минусы такой системы типов:
Плюсы:
✔️Гибкость: Динамическая типизация делает PHP очень гибким языком программирования, позволяя быстро писать и изменять код.
✔️Простота использования: Не нужно явно объявлять типы переменных, что упрощает написание кода, особенно для новичков.
✔️Легкость внесения изменений: Поскольку типы переменных могут быть изменены в любой момент, изменение структуры данных или логики программы может быть более легким и менее разрушительным.
✔️Меньше кода: Нет необходимости явно приводить типы или выполнять проверки на соответствие типов, что может сократить объем кода.
Минусы:
❗Потенциальные ошибки времени выполнения: Поскольку типы определяются во время выполнения, ошибки, связанные с несоответствием типов, могут возникнуть только во время выполнения программы, что может затруднить их обнаружение и отладку.
❗Уменьшение производительности: Проверка типов во время выполнения может негативно сказаться на производительности приложения, особенно в больших и сложных проектах.
❗Меньшая надежность: Поскольку типы переменных могут изменяться во время выполнения, это может привести к неожиданному поведению программы и усложнить ее понимание и поддержку.
❗Трудности в документации и отладке: Из-за динамической типизации может быть сложно определить типы переменных и их ожидаемое поведение, что может затруднить документирование кода и отладку ошибок.
#вопросы_с_собеседований
В PHP используется динамическая система типов, что означает, что тип переменной определяется во время выполнения программы и может изменяться в процессе работы. Вот некоторые плюсы и минусы такой системы типов:
Плюсы:
✔️Гибкость: Динамическая типизация делает PHP очень гибким языком программирования, позволяя быстро писать и изменять код.
✔️Простота использования: Не нужно явно объявлять типы переменных, что упрощает написание кода, особенно для новичков.
✔️Легкость внесения изменений: Поскольку типы переменных могут быть изменены в любой момент, изменение структуры данных или логики программы может быть более легким и менее разрушительным.
✔️Меньше кода: Нет необходимости явно приводить типы или выполнять проверки на соответствие типов, что может сократить объем кода.
Минусы:
❗Потенциальные ошибки времени выполнения: Поскольку типы определяются во время выполнения, ошибки, связанные с несоответствием типов, могут возникнуть только во время выполнения программы, что может затруднить их обнаружение и отладку.
❗Уменьшение производительности: Проверка типов во время выполнения может негативно сказаться на производительности приложения, особенно в больших и сложных проектах.
❗Меньшая надежность: Поскольку типы переменных могут изменяться во время выполнения, это может привести к неожиданному поведению программы и усложнить ее понимание и поддержку.
❗Трудности в документации и отладке: Из-за динамической типизации может быть сложно определить типы переменных и их ожидаемое поведение, что может затруднить документирование кода и отладку ошибок.
#вопросы_с_собеседований
❤10
В Symfony инструкции не всегда достаточны, но Symfony имеет интеграцию с Doctrine ORM, что круто! 🎉
🛠️ Проблема:
Как выполнить запросы к БД на основе данных формы?
📋 Решение:
Предлагается использовать объект типа DTO (DataTransferObject), созданный на основе данных формы, чтобы передавать структурированные данные в методы запросов. Это делает код более надежным и предсказуемым.💼
Далее показывается пример создания формы и обработки данных из неё в контроллере Symfony. Автор использует созданный объект DTO для передачи данных в метод запроса репозитория.
Затем переходим к рассмотрению метода findByFilter в репозитории событий (EventRepository). Этот метод выполняет запрос к базе данных на основе данных из формы, применяя различные фильтры в зависимости от выбранных пользователем параметров. Автор обсуждает компактность и эффективность этого метода, а также его возможность повторного использования благодаря отделению от остального кода.🛠️
🔧 Преимущества:
Код становится более читаемым и надежным 📖
Запросы становятся короткими, эффективными и переиспользуемыми 💪
Можно выполнять стандартные проверки кода на SQL-запросах 👨💻
Короткие, эффективные и переиспользуемые запросы к БД — круто! 🚀
🛠️ Проблема:
Как выполнить запросы к БД на основе данных формы?
📋 Решение:
Предлагается использовать объект типа DTO (DataTransferObject), созданный на основе данных формы, чтобы передавать структурированные данные в методы запросов. Это делает код более надежным и предсказуемым.💼
Далее показывается пример создания формы и обработки данных из неё в контроллере Symfony. Автор использует созданный объект DTO для передачи данных в метод запроса репозитория.
Затем переходим к рассмотрению метода findByFilter в репозитории событий (EventRepository). Этот метод выполняет запрос к базе данных на основе данных из формы, применяя различные фильтры в зависимости от выбранных пользователем параметров. Автор обсуждает компактность и эффективность этого метода, а также его возможность повторного использования благодаря отделению от остального кода.🛠️
🔧 Преимущества:
Код становится более читаемым и надежным 📖
Запросы становятся короткими, эффективными и переиспользуемыми 💪
Можно выполнять стандартные проверки кода на SQL-запросах 👨💻
Короткие, эффективные и переиспользуемые запросы к БД — круто! 🚀
🥱7👍3❤2
Почему FilamentPHP — это хорошее решение для создания CMS
В жизни каждого PHP-разработчика рано или поздно настаёт момент, когда его просят написать корпоративный сайт, новостной портал или очередной интернет-магазин.
Конечно, в этом случае можно взять готовое решение вроде Bitrix. Однако порой эти огромные комбайны оказываются действительно слишком уж огромными, и для управления тремя с половиной табличками проще написать свое решение.
В жизни каждого PHP-разработчика рано или поздно настаёт момент, когда его просят написать корпоративный сайт, новостной портал или очередной интернет-магазин.
Конечно, в этом случае можно взять готовое решение вроде Bitrix. Однако порой эти огромные комбайны оказываются действительно слишком уж огромными, и для управления тремя с половиной табличками проще написать свое решение.
Хабр
Почему FilamentPHP — это хорошее решение для создания CMS
Привет, Хабр! Меня зовут Егор Черненок, я работаю PHP-разработчиком в AGIMA . В этой статье расскажу вам о FilamentPHP. В документации говорится , что это набор красивых Fullstack-компонентов для...
🥱13❤3
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
❤2
4 сайта с бесплатными шаблонами для Laravel
HTMLrev: Огромная коллекция бесплатных HTML-шаблонов, в том числе множество для панелей управления Laravel. Часто обновляются и позволяют легко просматривать по категориям.
Creative Tim: Известный своими готовыми к использованию шаблонами, Creative Tim предоставляет UI-киты, административные панели и системы дизайна для нескольких архитектур, включая Laravel. Их шаблоны поставляются с высококачественным кодом и документацией.
ThemeSelection: Предлагает как бесплатные, так и платные UI-киты и шаблоны панелей управления. Хотя доступно всего несколько бесплатных вариантов, они отличаются замечательным качеством и сравнимы с премиальными пакетами.
JustBoil: JustBoil специализируется на шаблонах панелей управления для различных библиотек, включая Bulma и Tailwind. Их бесплатные шаблоны профессионально разработаны, написаны и документированы, предлагая множество компонентов для создания панелей управления.
HTMLrev: Огромная коллекция бесплатных HTML-шаблонов, в том числе множество для панелей управления Laravel. Часто обновляются и позволяют легко просматривать по категориям.
Creative Tim: Известный своими готовыми к использованию шаблонами, Creative Tim предоставляет UI-киты, административные панели и системы дизайна для нескольких архитектур, включая Laravel. Их шаблоны поставляются с высококачественным кодом и документацией.
ThemeSelection: Предлагает как бесплатные, так и платные UI-киты и шаблоны панелей управления. Хотя доступно всего несколько бесплатных вариантов, они отличаются замечательным качеством и сравнимы с премиальными пакетами.
JustBoil: JustBoil специализируется на шаблонах панелей управления для различных библиотек, включая Bulma и Tailwind. Их бесплатные шаблоны профессионально разработаны, написаны и документированы, предлагая множество компонентов для создания панелей управления.
🔥10⚡2👍2🌚2❤1