[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Комментарии к постам
ak167
Всем привет!

Раньше в своём самописном движке блога была табличка комментариев к постам. В этой табличке были ячейки id, text, posts_id, где ячейка "posts_id" означала id поста, к которому принадлежит данный коментарий. Выборка нужных комментариев происходила из всех таблицы, в конце sql-запроса я указывал WHERE posts_id='".$post[$i]['id']."'. Таким образом происходил поиск нужных комментариев среди ВСЕХ комментариев в блоге вообще. Это было не оптимально, т.к. комментериев может быть миллион и каждый раз скрипт будет искать из этого миллиона только те, комментарии, которые относятся к выбранному посту.
Сейчас я думаю, что лучше создавать для окмментариев к каждому посту отдельную табличку. Например, если id поста 125, то для него будет автоматом создаваться табличка comments_for_125. Если id поста 48, то - comments_for_48 и в этих табличках будут комментарии только к постам, которые имеют id 125, 48 и т.д.
Но вот вопрос: MySQl ищет таблицы с такой же скорость как и данные в ячейках или медленнее?

И второй вопрос: как вы делали механизм комментариев к своим движкам и как это устроено в форумах phpBB, ipb и т.п.?

С уважением.



Спустя 13 минут, 53 секунды (9.02.2011 - 12:14) linker написал(а):
А если будет тысяча или десятки тысяч постов, это ж ахринеть таблиц в базе наплодится.

Спустя 5 минут, 57 секунд (9.02.2011 - 12:20) ak167 написал(а):
Цитата
А если будет тысяча или десятки тысяч постов, это ж ахринеть таблиц в базе наплодится.


linker, если поставить два нижних подчёркивания, то они объединяться в группу таблиц. Например, если сделать так:
comments__123
comments__124
comments__125
Тогда в phpMyAdmin будет отображаться только ссылка comments__ и рядом будет плюсик. Если нужно раскрыть все таблицы, нажимаешь на плюсик и они открываются.
Такой вариант нормальный или я чего-то не догоняю?

Как организованы комментарии в популярных движках?

Спустя 2 минуты, 56 секунд (9.02.2011 - 12:23) alex12060 написал(а):
Ты наверное путаешь + с MSSQL.
Я такое видел только там. Я уверяю тебя, тебе пока такой логики хватит. А так, посмотри юзабилити к разным новостным движкам.

Спустя 2 часа, 12 минут, 13 секунд (9.02.2011 - 14:35) sergeiss написал(а):
В любом месте, где необходимо сделать что-то подобное твоей задаче, используется очень ограниченное число таблиц. Предложенный тобой вариант с кучей таблиц является едва ли не самым плохим.
Надо все каменты помещать в одну таблицу, а разруливать их по айди основной темы и, возможно, по еще каким-то критериям (это уже исходя из используемой у тебя логики работы блока или форума).

Цитата (ak167 @ 9.02.2011 - 13:00)
Выборка нужных комментариев происходила из всех таблицы, в конце sql-запроса я указывал WHERE posts_id='".$post[$i]['id']."'. Таким образом происходил поиск нужных комментариев среди ВСЕХ комментариев в блоге вообще. Это было не оптимально, т.к. комментериев может быть миллион и каждый раз скрипт будет искать из этого миллиона только те, комментарии, которые относятся к выбранному посту.

Если ты сделаешь правильные индексы к таблицам, то поиск будет очень быстрым.

Спустя 15 минут, 47 секунд (9.02.2011 - 14:51) ak167 написал(а):
Цитата
В любом месте, где необходимо сделать что-то подобное твоей задаче, используется очень ограниченное число таблиц. Предложенный тобой вариант с кучей таблиц является едва ли не самым плохим.

sergeiss, спасибо за информацию.

Цитата
Если ты сделаешь правильные индексы к таблицам, то поиск будет очень быстрым.

sergeiss, а вот тут можно по-подробнее, пожалуйста. Я обычно делал индекс только на ячейку "posts_id" в табличке, где храняться комментарии, т.к. имено по ней осуществляется поиск. Больше никаких индексов не делал. Это правильно? Или лучше сделать еще что-нибудь?

Спустя 58 минут, 24 секунды (9.02.2011 - 15:49) sergeiss написал(а):
Насчет индексов нельзя ответить так, чтобы "раз и навсегда". Общее правило - индексы должны затрагивать все поля, по которым накладываются условия в выборке. Для анализа также можно использовать в БД команду EXPLAIN.
Но лучше тебе будет почитать об этом где-нибудь. Тем более, что у разных БД может быть специфика насчет индексов. Плюс - практиковаться, лучше на больших таблицах (сотны тысяч, миллионы записей), где разница в выборке будет колебаться от десятков-сотен секунд при неправильной выборке до десятых-сотых долей секунды при правильно выборке.

Спустя 13 минут, 37 секунд (9.02.2011 - 16:03) Snus написал(а):
ak167
Вы придумали самый неоптимальный способ хранения комментариев smile.gif Я бы побоялся заходить на Ваш форум smile.gif)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.