Раньше в своём самописном движке блога была табличка комментариев к постам. В этой табличке были ячейки 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
Вы придумали самый неоптимальный способ хранения комментариев Я бы побоялся заходить на Ваш форум )
Вы придумали самый неоптимальный способ хранения комментариев Я бы побоялся заходить на Ваш форум )