Рубрика «N+1»

Когда начинают говорить об оптимизации запросов Hibernate, разговор быстро приходит к N+1, join fetch, entity graph и настройке batch выборки. Но есть более простой случай, который легко пропустить.

Допустим нам нужно сохранить книгу. Её автор уже существует в базе и его ID пришёл в запросе, данные автора: имя, дата рождения и всё остальное нас вообще не интересуют. Нам нужно только записать author_id в таблицу book. Вот здесь возникает вопрос: зачем перед сохранением сначала получать автора? Разберёмся, как от него избавиться и причём здесь метод getReference().

Исходная модель данных

Две обычные сущности:

Читать полностью »

Дорогой Шерлок, вы знаете мою слабость к заметкам, задачам и конспектам ваших дедуктивных выкладок. Держу я всё это в приложении, которое сам и пишу: десктоп на Rust Tauri 2 поверх обычной папки на диске.

Новое дело выглядело скромно. Сорок с небольшим записей: несколько заметок, пара таблиц, остальное — ссылки на внешние документы. Решил все перетянуть из одной ветки дерева в другую, ошибся с папкой, нажал undo. И я увидел, как время остановилось. Это было не «подвисло на секунду», а именно вязкое перемещение документов из папки в папку и обратно.

Разберусь сам, подумал я. Делов на один вечер.

Читать полностью »

История о том, как я загнал главную страницу форума с 88 запросов до 15, выяснил, что половину работы делал впустую один невинный аддон, и в конце снял ещё четверть серверного времени строчкой в конфиге — не сломав при этом ничего из того, что работало. А заодно — полная документация на стек из четырёх своих расширений и preload, на которых форум сейчас и держится.

Содержание

Пришёл в проект, там легаси погоняет легаси. Спагетти такие что уже в рот лезут. Отчёты по филиалам открывались 30 секунд. Команда реально боялась нажать кнопку в рабочее время, а вдруг база ляжет.

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

Первое что я сделал: открыл EXPLAIN ANALYZE.

Что показал EXPLAIN ANALYZE

Запрос для отчёта по филиалу выглядел примерно так:

Читать полностью »

Всех приветствую! Я планирую создать цикл статей, демонстрирующий распространенные ошибки, влияющие на производительность приложения со стороны бэкенда, а также методы их поиска и устранения. Для этого, я написал приложение, в котором специально допустил различные ошибки, чтобы по порядку найти и исправить их.

В текущей статье, рассмотрим темы - n+1, пагинация и индексы. Приятного чтения!

Описание приложения

Читать полностью »

N1Loader разработан для легкого избежания N+1 проблемы
любого типа. К счатью, гем очень легко интегрировать в GraphQL
API. Без дальнейших отлагательств, давайте рассмотрим простой, но самодостаточный пример.

Читать полностью »

Одна из основных проблем разработчиков, когда они создают приложение с ORM — это N+1 запрос в их приложениях. Проблема N+1 запроса — это не эффективный способ обращения к базе данных, когда приложение генерирует запрос на каждый вызов объекта. Эта проблема обычно возникает, когда мы получаем список данных из базы данных без использования ленивой или жадной загрузки (lazy load, eager load). К счастью, Laravel с его ORM Eloquent предоставляет инструменты, для удобной работы, но они имеют некоторые недостатки.
В этой статье рассмотрим проблему N+1, способы ее решения и оптимизации потребления памяти.

Читать полностью »

Андрей Коняев (N+1) объявил о запуске «Пикчера», которые включает в себя рекламное агентство, сейлз-хаус и несколько площадок, среди которых «Лентач». Проект создан совместно с бывшими сотрудниками «Читать полностью »

Андрей Коняев рассказал сегодня о запуске N+1 — коммерческого научно-популярного СМИ в пару к некоммерческому «Образовачу». Команда «Образовача» объяснила запуск проекта тем, что ей надоело верстать статьи в вики-разметке.

Формат паблика мутировал и стал аналогичен «Лентачу» до разрыва с Lenta.ru; весь контент Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js