Sander1 51 Опубликовано: 17 ноября 2020 Рассказать Опубликовано: 17 ноября 2020 18 минут назад, celsoft сказал: Оно не может быть одинаковое. Там данные в принципе другие и таблица dle_post априори намного больше, ее обновление занимает больше времени. При условии что у вас там тексты новостей нормальные и обьемные, как и положено, а не одно предложение. Мне нет смысла выдумывать. Операционная система: Linux 3.10.0-1062.18.1.el7.x86_64 Версия PHP: 7.2.29 Версия MySQL: 5.5.5-10.0.38-MariaDB dle_post 60,703 MyISAM utf8mb4_general_ci 201.5 МБ dle_post_extras 60,703 MyISAM utf8mb4_general_ci 7.6 МБ Обычный кино-сайтец, где-то одно предложение в short_story, где-то абзац, где-то вообще нету. Поле xfields заполнено везде, примерно по 500 символов в каждом. <?php error_reporting(E_ALL ^ E_NOTICE); define('DATALIFEENGINE', true ); define('ROOT_DIR', __DIR__); define('ENGINE_DIR', ROOT_DIR . '/engine'); include_once ENGINE_DIR . '/classes/plugins.class.php'; header('Content-type: text/plain; charset=utf-8'); echo date('Y-m-d H:i:s') . ' dle_post_extras' . PHP_EOL; $ids = range(10000, 60000); shuffle($ids); $mt = microtime(true); for ($i = 0; $i < 10000; $i++) { $id = array_pop($ids); $db->query('UPDATE dle_post_extras SET news_read = news_read + 1 WHERE news_id = ' . $id); } echo round(microtime(true) - $mt, 3) . ' sec' . PHP_EOL . PHP_EOL; echo date('Y-m-d H:i:s') . ' dle_post' . PHP_EOL; $ids = range(10000, 60000); shuffle($ids); $mt = microtime(true); for ($i = 0; $i < 10000; $i++) { $id = array_pop($ids); $db->query('UPDATE dle_post SET views = views + 1 WHERE id = ' . $id); } echo round(microtime(true) - $mt, 3) . ' sec' . PHP_EOL . PHP_EOL; Результаты 4 замеров: 2020-11-17 16:01:27 dle_post_extras 1.251 sec 2020-11-17 16:01:29 dle_post 1.168 sec ------------------------------------ 2020-11-17 16:06:29 dle_post_extras 1.488 sec 2020-11-17 16:06:31 dle_post 1.38 sec ------------------------------------ 2020-11-17 16:06:38 dle_post_extras 1.279 sec 2020-11-17 16:06:39 dle_post 1.271 sec ------------------------------------ 2020-11-17 16:06:50 dle_post_extras 1.443 sec 2020-11-17 16:06:51 dle_post 1.394 sec Сейчас на локалке сделаю 80к новостей в каждой заполнив shortstory по 1 - 10кб текста Так же проверю заполнив и fullstory по 30-60кб текста, хотя и считаю, что full_story следует перенести в post_extras. Цитата Ссылка на сообщение Поделиться на других сайтах
Хоббит 6 Опубликовано: 17 ноября 2020 Рассказать Опубликовано: 17 ноября 2020 (изменено) 15 минут назад, Sander1 сказал: Мне нет смысла выдумывать. Операционная система: Linux 3.10.0-1062.18.1.el7.x86_64 Версия PHP: 7.2.29 Версия MySQL: 5.5.5-10.0.38-MariaDB dle_post 60,703 MyISAM utf8mb4_general_ci 201.5 МБ dle_post_extras 60,703 MyISAM utf8mb4_general_ci 7.6 МБ Обычный кино-сайтец, где-то одно предложение в short_story, где-то абзац, где-то вообще нету. Поле xfields заполнено везде, примерно по 500 символов в каждом. <?php error_reporting(E_ALL ^ E_NOTICE); define('DATALIFEENGINE', true ); define('ROOT_DIR', __DIR__); define('ENGINE_DIR', ROOT_DIR . '/engine'); include_once ENGINE_DIR . '/classes/plugins.class.php'; header('Content-type: text/plain; charset=utf-8'); echo date('Y-m-d H:i:s') . ' dle_post_extras' . PHP_EOL; $ids = range(10000, 60000); shuffle($ids); $mt = microtime(true); for ($i = 0; $i < 10000; $i++) { $id = array_pop($ids); $db->query('UPDATE dle_post_extras SET news_read = news_read + 1 WHERE news_id = ' . $id); } echo round(microtime(true) - $mt, 3) . ' sec' . PHP_EOL . PHP_EOL; echo date('Y-m-d H:i:s') . ' dle_post' . PHP_EOL; $ids = range(10000, 60000); shuffle($ids); $mt = microtime(true); for ($i = 0; $i < 10000; $i++) { $id = array_pop($ids); $db->query('UPDATE dle_post SET views = views + 1 WHERE id = ' . $id); } echo round(microtime(true) - $mt, 3) . ' sec' . PHP_EOL . PHP_EOL; Результаты 4 замеров: 2020-11-17 16:01:27 dle_post_extras 1.251 sec 2020-11-17 16:01:29 dle_post 1.168 sec ------------------------------------ 2020-11-17 16:06:29 dle_post_extras 1.488 sec 2020-11-17 16:06:31 dle_post 1.38 sec ------------------------------------ 2020-11-17 16:06:38 dle_post_extras 1.279 sec 2020-11-17 16:06:39 dle_post 1.271 sec ------------------------------------ 2020-11-17 16:06:50 dle_post_extras 1.443 sec 2020-11-17 16:06:51 dle_post 1.394 sec Сейчас на локалке сделаю 80к новостей в каждой заполнив shortstory по 1 - 10кб текста Так же проверю заполнив и fullstory по 30-60кб текста, хотя и считаю, что full_story следует перенести в post_extras. Если надо могу дать доступ к бд с 300к+ новостями, чисто контентый сайт, бд весит ~6 гб Изменено 17 ноября 2020 пользователем Хоббит Цитата Ссылка на сообщение Поделиться на других сайтах
Sander1 51 Опубликовано: 17 ноября 2020 Рассказать Опубликовано: 17 ноября 2020 Локалка: Версия PHP: 7.3.17 Версия MySQL: 8.0.19 Часть 1. Пустые записи, 88к штук. InnoDB. Размер таблиц: dle_post = 37.7Мб dle_post_extras = 14.6Мб Результаты замеров плюс минус пол секунды, но в основном такие: dle_post_extras - 9.067 sec dle_post - 9.268 sec Часть 2. Новости частично заполнены, 89к записей, InnoDB. dle_post = 4.8 ГиБ dle_post_extras = 15.6 МБ dle_post_extras - 8.922 sec dle_post - 16.041 sec Часть 2.1 Эти же данные, но на MyISAM dle_post_extras - 1.361 sec dle_post - 1.994 sec Часть 3. Заполнена только короткая новость, в среднем по ~20кб текста и немного в доп.полях. Количество записей 134к, InnoDB, MariaDB-10.3 dle_post = 7.1 ГиБ dle_post_extras = 21.6 Мб dle_post_extras - 5.292 sec dle_post - 8.445 sec Часть 3.1 Сократил short_story до 900 символов dle_post = 2.0 ГиБ dle_post_extras - 5.394 sec dle_post - 5.66 sec Зато запрос: WHERE category REGEXP '[[:<:]](1)[[:>:]]' AND approve=1 ORDER BY e.news_read desc Выполняется 2,65 сек При том, что запрос с p.views обрабатывается за 0,0013 сек А все потому что Using temporary; Using filesort На большой таблице запрос с news_read DESC вообще выполнялся дольше минуты. Я не знаю почему так... А главную страницу сайта я вообще так и не смог открыть пока не выключил topnews. У меня банально закончилось место на винте под эту временную таблицу. Цитата Ссылка на сообщение Поделиться на других сайтах
crafic 5 Опубликовано: 18 ноября 2020 Рассказать Опубликовано: 18 ноября 2020 SELECT COUNT в MyISAM тоже в разы быстрее чем на Innodb Цитата Ссылка на сообщение Поделиться на других сайтах
skd 5 Опубликовано: 21 ноября 2020 Рассказать Опубликовано: 21 ноября 2020 Здравствуйте! Мегаважно сделать выбор основной категории новости, категории, которая будет отражаться в url новости. Это крайне не удобно, когда назначается категория, которая просто выше в списке. Например, пусть основной категорией первая, выбранная пользователем, или сделать поле выбора основной категории. Спасибо за движок! 1 4 Цитата Ссылка на сообщение Поделиться на других сайтах
crafic 5 Опубликовано: 23 ноября 2020 Рассказать Опубликовано: 23 ноября 2020 если для ред публ на сайте выбран bbcode то невозможно загрузить изображение пока не будет фокус в textarea аналогично кнопочка возле нее Цитата Ссылка на сообщение Поделиться на других сайтах
alex32 859 Опубликовано: 23 ноября 2020 Рассказать Опубликовано: 23 ноября 2020 22.11.2020 в 04:58, skd сказал: Здравствуйте! Мегаважно сделать выбор основной категории новости, категории, которая будет отражаться в url новости. Это крайне не удобно, когда назначается категория, которая просто выше в списке. Поддерживаю, потому что сейчас с этой принудительной сортировкой сильно снижается функционал тегов [category] и [catlist] 1 Цитата Ссылка на сообщение Поделиться на других сайтах
dimitron 33 Опубликовано: 23 ноября 2020 Рассказать Опубликовано: 23 ноября 2020 Дополнительно поле СПИСОК. Нужно расшыть его что бы можно было выбрать несколько пунктов из списка. Такое же поля как мы выбираем категории (несколько категорий). Цитата Ссылка на сообщение Поделиться на других сайтах
Mr. Bot 11 Опубликовано: 25 ноября 2020 Рассказать Опубликовано: 25 ноября 2020 21.11.2020 в 23:58, skd сказал: Здравствуйте! Мегаважно сделать выбор основной категории новости, категории, которая будет отражаться в url новости. Это крайне не удобно, когда назначается категория, которая просто выше в списке. Например, пусть основной категорией первая, выбранная пользователем, или сделать поле выбора основной категории. Спасибо за движок! Этому багу уже 100 лет в обед, но судя по всему @celsoft не видит ничего зазорного в том что второстепенные категории могут заменять основную, в зависимости от того чей ID категории меньше. 23.11.2020 в 23:46, alex32 сказал: Поддерживаю, потому что сейчас с этой принудительной сортировкой сильно снижается функционал тегов [category] и [catlist] Так то данные теги перебирают все указанные категории у новости, им без разницы кто на каком месте по счёту указанна категория. @celsoft, почему доп. поле дата и время не использует unixtime? Элементарно же можно было сделать много интересных вещей (вроде привязки к времени сайта, сортировке, различные кастомные выборки), а так это сугубо текст в БД. 1 1 Цитата Ссылка на сообщение Поделиться на других сайтах
alex32 859 Опубликовано: 25 ноября 2020 Рассказать Опубликовано: 25 ноября 2020 5 минут назад, Mr. Bot сказал: Так то данные теги перебирают все указанные категории у новости, им без разницы кто на каком месте по счёту указанна категория. так то если категории не вложенные, то этот тег игнорируется, потому что у полной новости всего одна категория, которая стоит первой Цитата Ссылка на сообщение Поделиться на других сайтах
Crashlabs 31 Опубликовано: 26 ноября 2020 Рассказать Опубликовано: 26 ноября 2020 Просьба добавить тег [inform_имя] текст [/inform_имя] для проверки информера по аналогии с [banner_имя] текст [/banner_имя]. 1 Цитата Ссылка на сообщение Поделиться на других сайтах
Crashlabs 31 Опубликовано: 30 ноября 2020 Рассказать Опубликовано: 30 ноября 2020 Также, не хватает аналогичных тегов [page-description] текст [/page-description], [not-page-title] текст [/not-page-title] только для {category-title} и {category-description} 3 Цитата Ссылка на сообщение Поделиться на других сайтах
Sander1 51 Опубликовано: 1 декабря 2020 Рассказать Опубликовано: 1 декабря 2020 Вновь подниму вопрос касательно оптимизации. Как известно, на средних и больших БД, запрос вида: SELECT count(*) as count_all FROM dle_post WHERE {...} Порой занимает довольно продолжительное время. И чем больше новостей в разделе, тем дольше запрос. И получается, что на всех (!!) страницах где есть навигация: /page/2/, /page/3/, /page/4/, /page/5000 Будет повторно выполняться один и тот же медленный запрос, который всегда будет отдавать один и тот же результат. Таким образом, в результате сканирования всех 5000 страниц, будет выполнено минимум 10000 запросов. Хотя могло, и следовало бы - 5001. Я предлагаю сделать отдельный кеш для счетчика количества новостей во всех разделах. PS. Для желающих использовать или попробовать это решение - выложил в виде плагина на github: https://github.com/San-Dev/dle-plugins/blob/master/cat-optim.xml 1 1 Цитата Ссылка на сообщение Поделиться на других сайтах
MSK 153 Опубликовано: 1 декабря 2020 Рассказать Опубликовано: 1 декабря 2020 1 час назад, Sander1 сказал: выложил в виде плагина на github: $cache_hash = md5($sql_count); если я правильно понял про кеширование, то при появлении новых новостей в момент хождения по страницам - $sql_count не изменится, изменится результат его выполнения... Цитата Ссылка на сообщение Поделиться на других сайтах
crafic 5 Опубликовано: 1 декабря 2020 Рассказать Опубликовано: 1 декабря 2020 (изменено) Sander1 у тебя наверно отключена отложенная публикация. и запрос один и тот же. а так на самом деле и AND date<'...' добавляется Изменено 1 декабря 2020 пользователем crafic Цитата Ссылка на сообщение Поделиться на других сайтах
Sander1 51 Опубликовано: 1 декабря 2020 Рассказать Опубликовано: 1 декабря 2020 33 минуты назад, MSK сказал: $cache_hash = md5($sql_count); если я правильно понял про кеширование, то при появлении новых новостей в момент хождения по страницам - $sql_count не изменится, изменится результат его выполнения... Мой хак хранит кеш всех результатов запросов в одном файле с именем news_select-count.tmp. Добавление или удаление новости удаляет все файлы кеша с префиксом news_. В том числе мой файл кеша так же будет удален и создан заново с новыми, правильными значениями. 29 минут назад, crafic сказал: Sander1 у тебя наверно отключена отложенная публикация. и запрос один и тот же. а так на самом деле и AND date<'...' добавляется "Отложенная публикация" - это как раз то, что я у себя в статье рекомендую отключать в первую очередь. Вот примеры запросов: В разделе 110к новостей [query] => SELECT COUNT(*) as count FROM dle_post p INNER JOIN (SELECT DISTINCT(dle_post_extras_cats.news_id) FROM dle_post_extras_cats WHERE cat_id IN ('2')) c ON (p.id=c.news_id) WHERE approve=1 [time] => 1,4607090950012 В категории 44к новостей [query] => SELECT COUNT(*) as count FROM dle_post p WHERE category IN ('1') AND approve=1 [time] => 0,27791213989258 В категории 10к новостей [query] => SELECT COUNT(*) as count FROM dle_post p WHERE category IN ('2') AND approve=1 [time] => 0,083189964294434 В разделе 5к новостей [query] => SELECT COUNT(*) as count FROM dle_post WHERE xfields LIKE '%2019%' AND approve=1 [time] => 0,746661901474 Цитата Ссылка на сообщение Поделиться на других сайтах
crafic 5 Опубликовано: 1 декабря 2020 Рассказать Опубликовано: 1 декабря 2020 (изменено) ну тогда я предлагаю и AND approve=1 убрать для ускорения запроса и перемещать все новости на модерации в отдельный раздел. например вот так https://skr.sh/s5PsSZX3P3X а если бы мне за оптимизацию платили я бы еще кое что придумал, да такое что dle точно бы прибавил газу 😁 Изменено 1 декабря 2020 пользователем crafic 1 Цитата Ссылка на сообщение Поделиться на других сайтах
ntrtv 36 Опубликовано: 1 декабря 2020 Рассказать Опубликовано: 1 декабря 2020 3 часа назад, Sander1 сказал: Отложенная публикация" - это как раз то, что я у себя в статье рекомендую отключать в первую очередь. А как без отложек? У нас несколько корреспондентов на сайте. Они расставляют новости с интервалом 20-30 минут. Как без отложки это делать? А как на раннее утро ставить, на поздний вечер и т.п.? Цитата Ссылка на сообщение Поделиться на других сайтах
Sander1 51 Опубликовано: 2 декабря 2020 Рассказать Опубликовано: 2 декабря 2020 14 часов назад, ntrtv сказал: А как без отложек? У нас несколько корреспондентов на сайте. Они расставляют новости с интервалом 20-30 минут. Как без отложки это делать? А как на раннее утро ставить, на поздний вечер и т.п.? Я не могу сказать точно в процентном соотношении, но полагаю что бОльшая часть часть сайтов не использует этот функционал. Но он включен в движке по умолчанию. Поэтому я и рекомендую его отключать. Кто знает, что это такое, тот оставит включенным. Кто нет - лучше выключить. К тому же то, как сейчас реализована отложенная публикация - это лишь один из вариантов. Который тоже не без недостатков. Пока кеш новостей не будет очищен - новость не будет отображаться в общей ленте на сайте. Другое дело, что кеш чистится довольно таки часто, в зависимости от активности пользователя (выставление оценки, добавление комментария). Более правильным вариантом - было бы использование планировщика заданий. И это, кстати, идея. Подумаю над реализацией такого модуля. 16 часов назад, crafic сказал: ну тогда я предлагаю и AND approve=1 убрать для ускорения запроса и перемещать все новости на модерации в отдельный раздел. например вот так https://skr.sh/s5PsSZX3P3X а если бы мне за оптимизацию платили я бы еще кое что придумал, да такое что dle точно бы прибавил газу 😁 Не могу не согласиться. Но вряд ли такое будет реализовано, уж очень много надо будет переделывать как мне кажется. Цитата Ссылка на сообщение Поделиться на других сайтах
kamensk 20 Опубликовано: 2 декабря 2020 Рассказать Опубликовано: 2 декабря 2020 2 часа назад, Sander1 сказал: Я не могу сказать точно в процентном соотношении, но полагаю что бОльшая часть часть сайтов А много ли сайтов на дле - 200-300тысяч публикаций? Цитата Ссылка на сообщение Поделиться на других сайтах
Sander1 51 Опубликовано: 2 декабря 2020 Рассказать Опубликовано: 2 декабря 2020 22 минуты назад, kamensk сказал: А много ли сайтов на дле - 200-300тысяч публикаций? Не знаю. Может и есть, не сомневаюсь в этом. Но про такие числа и не идет речь. Все тестирования я провожу на вполне реальных сайтах с количеством публикаций 50-100к Сайт кинотематики 61к новостей: 44к фильмов, 10к сериалов, 6к мультиков. Сайт с играми 94к. Цитата Ссылка на сообщение Поделиться на других сайтах
kamensk 20 Опубликовано: 2 декабря 2020 Рассказать Опубликовано: 2 декабря 2020 1 час назад, Sander1 сказал: Не знаю. Может и есть, не сомневаюсь в этом. Но про такие числа и не идет речь. Все тестирования я провожу на вполне реальных сайтах с количеством публикаций 50-100к Сайт кинотематики 61к новостей: 44к фильмов, 10к сериалов, 6к мультиков. Сайт с играми 94к. Посещалка какая? На хостинге размещенны? Цитата Ссылка на сообщение Поделиться на других сайтах
Sander1 51 Опубликовано: 2 декабря 2020 Рассказать Опубликовано: 2 декабря 2020 2 часа назад, kamensk сказал: Посещалка какая? На хостинге размещенны? У меня - нулевая посещаемость, это тестовые сайты. На хостинге и на локалке. Цитата Ссылка на сообщение Поделиться на других сайтах
Mr. Bot 11 Опубликовано: 4 декабря 2020 Рассказать Опубликовано: 4 декабря 2020 02.12.2020 в 15:41, Sander1 сказал: Другое дело, что кеш чистится довольно таки часто, в зависимости от активности пользователя (выставление оценки, добавление комментария). Я давным давно обращал внимание на то что кеш должен быть не в виде HTML, а собираться вручную из кусочков, но в угоду немного выросшей нагрузке, насилуем MySQL на больших базах. 01.12.2020 в 18:43, Sander1 сказал: PS. Для желающих использовать или попробовать это решение - выложил в виде плагина на github: https://github.com/San-Dev/dle-plugins/blob/master/cat-optim.xml Файл кеша может сильно раздутся, да и в виде одного крупного файла решение не очень. По сути нужно юзать тот же memcache, и для каждой выборки использовать свой кеш. Но тут даже у @celsoft с его реализацией кеш-карты не предусмотрена такая проблема, что по дефолту memcache может хранить запись размером только 1 Mb, и на больших сайтах эффективность типа кеширования что используется в DLE, стремится прямиком к нулю. Цитата Ссылка на сообщение Поделиться на других сайтах
Alex-GR 2 Опубликовано: 4 декабря 2020 Рассказать Опубликовано: 4 декабря 2020 Модуль googlemap. Вначале идет кнопка "Уведомить поисковые системы о наличии новой версии карты сайта", а в самом конце - "Создать / Обновить файл карты сайта". Возможно, вначале нужно сгенерить сайтемап, а потом его уже отправлять? И кнопки в таком же приоритете расставить? Фигня, конечно, но... Заранее благодарен, если прислушаетесь. Выкину пару строк из плагина. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.