Проблемы с большими таблицами.

Как перенести старые каменты в отдельную таблицу.

 
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2601
Вот уже почти неделю бьюсь с техподдержкой хостера.
Вдруг, неожиданно, сайт, который стабильно работал (практически летал) на этом хостинге больше года, начал открываться по три минуты.
Техподдержка заявляет "проблемы на Вашей стороне", хотя иногда сайт практически летает.

Спойлер
Реселлят, конечно же, но факт остается фактом, имеется несколько таблиц, которые содержат по миллиону строк и весят по 400 мегабайт.

Отсюда возникает вопрос. А нельзя ли комментарии, возрастом более полугода, например, вынести в отдельную таблицу cms_comments_old? чтобы не мешали. Ведь в глубины сайта редко кто лазит, в основном работа ведется с комментариями возрастом не более месяца, но каждый раз вся таблица в 700000 строк вытаскивается в оперативку сервера.

Мне пока представляется реализация этого так: все комментарии с id меньше определенного значения вручную перенести в другую таблицу, а все запросы браузера к этим комментариям направлять в ту таблицу. Вопрос, как это сделать в /comments/model.php ?

Кто что думает, как это можно реализовать?
Редактировалось: 1 раз (Последний: 10 октября 2015 в 15:34)
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
Вывести в отдельную таблицу наверное не проблема ( INSERT INTO), но потом придётся вносить изменения в ф-ции компонента для выборки данных и для систематического копирования устаревших комментариев.Хотя последнее возможно можно привязать к крону.
Реклама
cms
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2601
Lora,
Это программа максимум. Пока достаточно просто один раз выкинуть старьё в отдельную таблицу.

Думаю заменить везде в comments/model.php cms_comments на переменную $comtable и где-нибудь вначале задавать её значение

Код PHP:
  1. if (comment_id > (какое-то значение)) { $comtable = 'cms_comments';}
  2. else { $comtable = 'cms_comments_old';}
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
И что вы этим хотите получить?
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2601
Хочу получить обращение к свежей таблице (содержащей только свежие комментарии) при обычной работе сайта и обращение к таблице со стариной, если кто решит вспомнить старое и полезет в прошлогодние каменты.
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
Что то мне подсказывает, что не всё так просто. smile А если кто то захочет ответить на старый коммент? Ответ будет в новой таблице, а на что отвечает в старой
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2601
Lora,
Да, мне что-то тоже это подсказывает.
Уже столкнулся с проблемой, что не знаю, куда вставить это if .
Пишу в модели просто $comtable = 'cms_comments' - всё работает.
Пытаюсь задать условие
if ($comment_id > 15) {$comtable = 'cms_comments';}
else {$comtable = 'cms_comments_old';}
И всё, каменты не выводятся.

Собственно вопрос в том, как заставить движок обращаться к той или иной таблице в зависимости от id комментария.
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
HiAndy:
не знаю, куда вставить это if
В вашем случае в каждую ф-цию где есть cms_comments
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2601
Lora:
В вашем случае в каждую ф-цию где есть cms_comments

Увы, не работает.
Возможно, я что-то неправильно делаю. Вот моя функция public function getComments

Спойлер
Редактировалось: 1 раз (Последний: 10 октября 2015 в 18:53)
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
Вопервых у вас
Код PHP:
  1. $comtable
, нужно
Код PHP:
  1. {$comtable}
Редактировалось: 1 раз (Последний: 10 октября 2015 в 18:58)
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2601
Lora:
, нужно
Код PHP:
{$comtable}

Вы имеете в виду FROM {$comtable} ?

Нет, проблема не в этом. Оно $comment_id на входе в функцию не подхватывает.
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
А как она его подхватит, если вы это значение не передали в ф-цию?
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2601
Lora,
О! Вот именно в этом и вопрос!
Как передать значение в функцию?

Так?
public function getComments($comment_id=$id, $only_published=true, $is_tree=false, $from_module = false)

Я в пыхе не очень компетентен.
Редактировалось: 1 раз (Последний: 10 октября 2015 в 19:15)
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
Как я понимаю в $comment_id у вас id комментария или сам комментарий?
Посетитель
small user social cms
МедальАвторитет форума
Сообщений: 1545
HiAndy:
Так?
public function getComments($comment_id=$id, $only_published=true, $is_tree=false, $from_module = false)
Теперь $id не определён
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.