Форум обновлен

Простой вопрос
Да (10)
26%
Нет (6)
16%
Филипп Киркоров (22)
58%
Всего голосов: 38
15.61K
.
Hey guys! Finally I'm gonna change status!?

Simba, Как это? Сам то читал что написал?

.
Кадило крутится, лавэха мутится
# kantry (06.10.2019 / 09:23)
Simba, Как это? Сам то читал что написал?
Читал гг. Ну, а что тебе не понятно?
На форуме решена конкретная проблема - производительность при большом количестве данных.
На малом количестве данных он нормально работает.
.
kantry
Hey guys! Finally I'm gonna change status!?

Simba, Теперь ясно
Мужики зачем вам зайца ловить, если в магазине есть ролтон
п.с. мАКС, Я СЕЙЧАС ОТ СМЕХА ПОМРУ НАВЕРНО.

.
Кадило крутится, лавэха мутится
# aRwap (06.10.2019 / 02:48)
Simba, В поиске форума если поставить галку искать в названиях тем, то в результатах не корректная дата.
Поправлено.
.
Гlקоﮎто хоקºωий ฯєλỗßеķ
# Simba (07.10.2019 / 22:27)
Поправлено.
Ай молодца
.
AlkatraZ
╭∩╮ (`-`) ╭∩╮

На большой базе форума возникают заметные тормоза.
Плохо работает часть запроса `cms_forum_rdm`.`topic_id` Is Null
Пробовал манипулировать с индексами, не помогает, пробовал NOT IN и NOT EXISTS еще хуже...
Кроме того, в таблице cms_forum_rdm очень большое к-во записей, которое равно (к-во тем Х к-во пользователей).

Причем систематизация таблиц (разбивка форума на категории-темы-посты) помогает мало, тормозит именно cms_forum_rdm при нуль-запросе.

Если из запроса списка новых тем удалить `cms_forum_rdm`.`topic_id` Is Null, сразу работает во много раз быстрее, обновленные темы показывает правильно. Но не показывает новые темы.
---
Я вчера придумал новый алгоритм расчета непрочитанных, надо будет проэкспериментировать.
Если идея была верной, позволит на несколько порядков поднять скорость, уменьшить базу непрочитанного и снизить нагрузку.

.
Кадило крутится, лавэха мутится
# AlkatraZ (16.10.2019 / 13:19)
Я вчера придумал новый алгоритм расчета непрочитанных, надо будет проэкспериментировать.
Если идея была верной, позволит на несколько порядков поднять скорость, уменьшить базу непрочитанного и снизит
А в чем заключается идея?
.
Hey guys! Finally I'm gonna change status!?

Simba, О ты на гит какие то изменения выложил
Так как в таблице cms_forum_rdm есть уник key, там можно поубирать кое какие запросы, например

В index.php (+/-)
// Фиксация факта прочтения Топика
        if ($systemUser->isValid() && $show_type == 'topic') {
            $db->query("INSERT INTO `cms_forum_rdm` (topic_id,  user_id, `time`)
                VALUES ('$id', '" . $systemUser->id . "', '" . time() . "')
                ON DUPLICATE KEY UPDATE `time` = VALUES(`time`)
            ");
            //$req_r = $db->query("SELECT * FROM `cms_forum_rdm` WHERE `topic_id` = '$id' AND `user_id` = '" . $systemUser->id . "' LIMIT 1");
            //
            //if ($req_r->rowCount()) {
            //    $res_r = $req_r->fetch();
            //
            //    if ($type1['last_post_date'] > $res_r['time']) {
            //        $db->exec("UPDATE `cms_forum_rdm` SET `time` = '" . time() . "' WHERE `topic_id` = '$id' AND `user_id` = '" . $systemUser->id . "' LIMIT 1");
            //    }
            //} else {
            //    $db->exec("INSERT INTO `cms_forum_rdm` SET `topic_id` = '$id', `user_id` = '" . $systemUser->id . "', `time` = '" . time() . "'");
            //}
        }

В nt.php (+/-)
// Ставим метку о прочтении
        $db->query("INSERT INTO `cms_forum_rdm` (topic_id,  user_id, `time`)
            VALUES ('$rid', '" . $systemUser->id . "', '" . time() . "')
            ON DUPLICATE KEY UPDATE `time` = VALUES(`time`)
        ");
        //$db->exec("INSERT INTO `cms_forum_rdm` SET
        //    `topic_id`='$rid',
        //    `user_id`='" . $systemUser->id . "',
        //    `time`='" . time() . "'
        //");

И в new.php (+/-)
// Отмечаем все темы как прочитанные
            $ids = $db->query("SELECT `forum_topic`.`id`, `forum_topic`.`last_post_date`
            FROM `forum_topic` LEFT JOIN `cms_forum_rdm` ON `forum_topic`.`id` = `cms_forum_rdm`.`topic_id` AND `cms_forum_rdm`.`user_id` = '" . $systemUser->id . "'
            WHERE `forum_topic`.`last_post_date` > `cms_forum_rdm`.`time` OR `cms_forum_rdm`.`topic_id` IS NULL")->fetchAll(PDO::FETCH_ASSOC);
            foreach ($ids as $val) {
                $values[] = '(' . $val['id'] . ', ' . $systemUser->id . ', ' . $val['last_post_date'] . ')'; 
            }
            
            $db->query('INSERT INTO cms_forum_rdm (topic_id, user_id, `time`) VALUES ' . implode(',', $values) . '
            ON DUPLICATE KEY UPDATE `time` = VALUES(`time`)');

            //$db->exec("INSERT INTO `cms_forum_rdm` (`topic_id`, `user_id`, `time`)
            //SELECT `forum_topic`.`id`, '" . $systemUser->id . "', '" . time() . "'
            //FROM `forum_topic` LEFT JOIN `cms_forum_rdm` ON `forum_topic`.`id` = `cms_forum_rdm`.`topic_id` AND `cms_forum_rdm`.`user_id` = '" . $systemUser->id . "'
            //WHERE `cms_forum_rdm`.`topic_id` IS NULL");
            //
            //$ids = $db->query("SELECT `forum_topic`.`id`
            //FROM `forum_topic` LEFT JOIN `cms_forum_rdm` ON `forum_topic`.`id` = `cms_forum_rdm`.`topic_id` AND `cms_forum_rdm`.`user_id` = '" . $systemUser->id . "'
            //WHERE `forum_topic`.`last_post_date` > `cms_forum_rdm`.`time`")->fetchAll(PDO::FETCH_COLUMN);
            //
            //if (!empty($ids)) {
            //    $db->exec("UPDATE `cms_forum_rdm` SET
            //        `time` = '" . time() . "'
            //        WHERE `topic_id` IN (" . implode(',', $ids) . ") AND `user_id` = '" . $systemUser->id . "'
            //    ");
            //}
.
Кадило крутится, лавэха мутится

Надо будет глянуть. Спасибо

.
╭∩╮ (`-`) ╭∩╮
Добавлено: 17.10.2019 / 10:29
kantry, а че ты PR не высылаешь?

Добавлено: 17.10.2019 / 10:48
А так, предложенная доработка абсолютно правильная.

Добавлено: 17.10.2019 / 10:54
Правда в nt.php доработка не нужна.
Там создается НОВАЯ тема и дублирующийся ключ теоретически невозможен.
Всего: 199