Области оптимизации
В рамках проекта особое внимание уделялось следующим областям:
- Запросы, относящиеся к категориям
- Запросы, относящиеся к материалам
- Запросы, относящиеся к тегам, меню и языкам
- Оптимизация вложенных наборов в качестве области исследования
Методы оптимизации
Для оптимизации применялись следующие методы:
- Применение подзапросов
- Добавление индексов
- Декомпозиция запросов
- Удаление ненужных вычислений
Результаты проекта
Оптимизация запросов
Полное описание всей работы по оптимизации и соответствующие результаты тестов вы может найти в Joomla Magazine. Непосредственно репоизторий проекта находится тут. Ниже приведены ссылки на пулл реквесты:
Какие-то из них уже были влиты в ветку Joomla 3.4-dev, какие-то в процессе обсуждения и тестирования. Некоторые из них дают впечатляющие результаты.
Оптимизация вложенных наборов
Работа по оптимизации вложенных наборов (nested sets) в основном была направлена на то, чтобы дать возможность разработчикам компонентов проектировать таблицы базы данных без полей path, level и parent_id. Все эти значения могут легко вычисляться и не храниться в базе данных, ведь их обновление дается дорого в плане производительности. Идеей было создание коррелирующих подзапросов. Дляэ того были созданы три метода в классе JTableNested:
- Для получения полного пути ноды – getCorrelatedPathQuery($mapField)
- Для получения родительскогого id ноды – getCorrelatedParentIdQuery($lft,$rgt)
- Для получения уровня ноды – getCorrelatedLevelQuery($mapField)
Будущее проекта
Этот проект является первым шагом в долгом путешествии по оптимизации базы данных Joomla. Еще есть запросы, которые требуют внимания, а исследовательская работа по вложенным наборам далека от завершения. И несомненно радует то, что студент, отвечающий за этот проект, продолжит свою работу в этом направлении.
Благодарность
Этот проект не мог существовать без двух наставников: Gunjan Patel и Nicola Galagano, которые постоянно поддерживали и вдохновляли студента. Хочется отметить и Mr. Ronni Christiansen (redComponent), который предоставил хостинг и тестовый сайт, а также Eli Aschkenasy, который оказал неоценимую помощь в технике оптимизации и определении узких мест SQL-запросов.