Новости Joomla

Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях

Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях

👩‍💻 Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях. На старте его сайт на Joomla 3 вообще не смог обновиться на Joomla 5. Пришлось делать экспорт/импорт материалов. Проделав всё это он запустил-таки этот объём данных на Joomla 5. Тестовый скрипт грузил 200 материалов из этого объёма всего за 94 секунды ))) А главная страница с категориями грузилась 20 секунд. Добавив индекс для таблицы #__content

CREATE INDEX idx_catid_state ON #__content (catid, state);
он сократил время загрузки категорий до 1 секунды. Затем наш герой решил поковырять SQL-запрос в ArticleModel, который отвечает за выборку материалов. И решил заменить тип JOIN на STRAIGHT_JOIN для категорий.
// ->from($db->quoteName('#__content', 'a'))->from(    $db->quoteName('#__content', 'a')    . ' STRAIGHT_JOIN ' . $db->quoteName('#__categories', 'c')    . ' ON ' . $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid'))// ->join('LEFT', $db->quoteName('#__categories', 'c'), $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid'))
Что сократило загрузку 200 материалов из 150к с 94 секунд до 5. К слову сказать, боевой сайт на Joomla 3 крутится на 12CPU 64GB рамы. А все манипуляции с кодом он делает на базовом 1CPU 1GB сервере и замеры скорости даны именно для базового сервера. Но это всё в дискуссии, хотя в идеале должно вылиться в Pull Requests. Мы - Open Source сообщество, где никто никому ничего не должен. Джунгли. Но человек ищет пути оптимизации Joomla и предлагает решения. Если оказать поддержку и предложить помощь хотя бы с тестированием самых разнообразных сценариев, то возможно эти улучшения смогут войти в ядро. Пусть не быстро, пусть через несколько лет, пусть не все, но войдут. Достаточно предложить руку помощи и приложить немного усилий.
Дискуссию на GitHub можно почитать здесь.@joomlafeed#joomla #community #php

0 Пользователей и 1 Гость просматривают эту тему.
  • 9 Ответов
  • 10253 Просмотров
*

Alex_B

  • Захожу иногда
  • 196
  • 39 / 0
Связанные таблицы MySQL
« : 18.06.2007, 13:12:39 »
Я делаю две таблицы в MySQL.

1 таблица:

| idL | val1 | val2 |

2 таблица

| idP | idL | val3 |

Вторая таблица должна получить idL которое хранится в первой.


Сначала я заполняю 1-ю таблицу:


$mdb
->setQuery("INSERT INTO #__table1 (val1, val2) VALUES (‘$val1’,’$val2’ )");
$mdb->query();


Значение idL формируется автоматически MySQL и мне не известно.

Затем я должен заполнить вторую таблицу и указать в соответствующем поле именно idL, которое было присвоено. Но как я могу его узнать?
(возможна ситуация при которой в первой таблице будут совершенно одинаковые строки, различающиеся только idL)

Спасибо.
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Связанные таблицы MySQL
« Ответ #1 : 18.06.2007, 13:18:33 »
вообще, есть такая функция как mysql_insert_id(), которая возвращает значение последнего сгенерированного автоинкрементного значения в последнем выполненном insert-запросе.

Вот более подробное описание:
Цитировать
mysql_insert_id() returns the ID generated for an AUTO_INCREMENT column by the previous INSERT query using the given link_identifier. If link_identifier isn't specified, the last opened link is assumed.

mysql_insert_id() returns 0 if the previous query does not generate an AUTO_INCREMENT value. If you need to save the value for later, be sure to call mysql_insert_id() immediately after the query that generates the value.
*

Alex_B

  • Захожу иногда
  • 196
  • 39 / 0
Re: Связанные таблицы MySQL
« Ответ #2 : 18.06.2007, 13:30:58 »
smart, спасибо!
*

boston

  • Захожу иногда
  • 495
  • 222 / 3
Re: Связанные таблицы MySQL
« Ответ #3 : 18.06.2007, 14:27:01 »
В классе базы данных Joomla это выглядит так:
Цитировать
   function insertid() {
      return mysql_insert_id( $this->_resource );
   }
Для получения результата в твоём случае необходимо:
Цитировать
$mdb->setQuery("INSERT INTO #__table1 (val1, val2) VALUES (‘$val1’,’$val2’ )");
$mdb->query();
$new_id = $mdb->insertid(); // твой идентификатор
Самая новая Joostina 1.3.0.5 UTF-8 stable | О найденных ошибках сообщаем | Расширения Joostina
*

Alex_B

  • Захожу иногда
  • 196
  • 39 / 0
Re: Связанные таблицы MySQL
« Ответ #4 : 18.06.2007, 15:06:18 »
boston, у меня и просто вызов функции вроде работает:

$new_id = mysql_insert_id();
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Связанные таблицы MySQL
« Ответ #5 : 18.06.2007, 16:41:38 »
ну конечно работает...
пока у тебя текущий ресурс линк указывает на твою бд, а если нет?..
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

Alex_B

  • Захожу иногда
  • 196
  • 39 / 0
Re: Связанные таблицы MySQL
« Ответ #6 : 18.06.2007, 16:50:43 »
ну конечно работает...
пока у тебя текущий ресурс линк указывает на твою бд, а если нет?..
Я вызываю
mysql_insert_id()
сразу после

$mdb
->setQuery("INSERT INTO #__table1 (val1, val2) VALUES (‘$val1’,’$val2’ )");
$mdb->query();


Т.е. все вместе:

$mdb
->setQuery("INSERT INTO #__table1 (val1, val2) VALUES (‘$val1’,’$val2’ )");
$mdb->query();
$new_id mysql_insert_id();


Может так случиться что "текущий ресурс линк" укажет не на мою бд? Лучше сделать как предложил boston?
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Связанные таблицы MySQL
« Ответ #7 : 18.06.2007, 17:22:51 »
Может так случиться что "текущий ресурс линк" укажет не на мою бд? Лучше сделать как предложил boston?
случиться по идее не может, но лучше сделать как сказал Бостон - это капельку корректнее, с точки зрения программирования для Joomla
*

Alex_B

  • Захожу иногда
  • 196
  • 39 / 0
Re: Связанные таблицы MySQL
« Ответ #8 : 18.06.2007, 21:39:32 »
Всем спасибо.
*

Ayat

  • Захожу иногда
  • 64
  • 0 / 0
Re: Связанные таблицы MySQL
« Ответ #9 : 30.04.2010, 15:05:54 »
подскажите мне где вы все это пишите, на phpmyadmin или где? например я через компонент fabrik создал таблицы и формы теперь не могу их связать(таблицы) между собой. хочу резко отписать я работаю на жумала 1.5 на денвере
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вывод таблицы, деление на страницы

Автор March Cat

Ответов: 6
Просмотров: 1185
Последний ответ 09.01.2019, 18:49:15
от dmitry_stas
checkbox придать вид таблицы в файле XML

Автор xenos

Ответов: 5
Просмотров: 1643
Последний ответ 17.07.2017, 16:16:11
от vipiusss
Загрузить в форму компонента данные из другой таблицы БД

Автор fox7812

Ответов: 11
Просмотров: 1570
Последний ответ 26.05.2014, 22:11:30
от b2z
MySQL - цикл в цикле - как сделать проще

Автор verstalshik

Ответов: 30
Просмотров: 3805
Последний ответ 29.04.2014, 21:52:54
от robert
Компонент для редактирования таблицы БД

Автор maxsl_89

Ответов: 4
Просмотров: 1574
Последний ответ 27.03.2014, 13:24:57
от maxsl_89