Как вы думаете имеет ли смысл делать такую необычную структуру комментариев?

12
Master812
На сайте с 23.12.2007
Offline
168
1244

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

Сейчас я думаю, что лучше создавать для комментариев к каждому посту отдельную табличку. Например, если id поста 125, то для него будет автоматом создаваться табличка comments_for__125. Если id поста 48, то - comments_for__48 и в этих табличках будут комментарии только к постам, которые имеют id 125, 48 и т.д.

Но вот вопрос: MySQl ищет таблицы с такой же скорость как и данные в ячейках или медленнее?

К тому же возникает проблема хранения таких таблиц, т.к. если их будет тысячи, то зайдя в phpMyAdmin они все будут отображаться. Однако, есть решение:

Если в названии таблицы поставить два нижних подчёркивания, то они объединяться в группу таблиц. Например, если сделать так:

comments_for__123

comments_for__124

comments_for__125

Тогда в phpMyAdmin будет отображаться только ссылка comments_for и рядом будет плюсик. Если нужно раскрыть все таблицы, нажимаешь на плюсик и они открываются. Если они не нужны, то можно на плюсик не нажимать и все эти таблицы с комментариями будут свёрнуты.

Такой вариант оптимальный или я чего-то не догоняю?

Как вы организовали структуру комментариев в своём движке? (если не секрет)

raspberry pi сайт ( https://4raspberrypi.ru/ ) и orange pi сайт ( https://orangepi.su/ ) и новостной движок ( https://generalscript.ru/ )
Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#1

Откройте для себя индексы.

Master812
На сайте с 23.12.2007
Offline
168
#2

Алексей Барыкин, я про индексы знаю давно и использую их. Но они не решают всех проблем.

М
На сайте с 08.02.2006
Offline
59
#3
со всеми вытекающими для процессорного времени последствиями

Что за последствия-то?

По теме - все давно уже придумано до вас: http://ru.wikipedia.org/wiki/%D0%9D%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0

Алексей Барыкин
На сайте с 04.02.2008
Offline
272
#4
Master812:
Алексей Барыкин, я про индексы знаю давно и использую их. Но они не решают всех проблем.

Проблему, заявленную в стартовом сообщении, они решают.

Абстрактные цифры:

Таблица из 600 записей, содержит дерево из 40 узлов.

Без индексов оно строилось у меня 10 секунд, с индексами 0.02 секунды.

Master812
На сайте с 23.12.2007
Offline
168
#5
Без индексов оно строилось у меня 10 секунд, с индексами 0.02 секунды.

Алексей Барыкин, спасибо, учту.

Но я всё же хотел бы услышать Ваше мнение насчёт предложенной мною выше структуре комментариев. MySQL будет искать таблицы так же быстро как и данные в них?

dkameleon
На сайте с 09.12.2005
Offline
386
#6
Master812:
Конечно, индексы я использую, но не думаю, что они ускоряют работу настолько, чтобы не париться по поводу скорости.

вы жгун ещё тот...

интресно, как этот форум работает со своими 7 миллионами сообщений?

Дизайн интерьера (http://balabukha.com/)
Master812
На сайте с 23.12.2007
Offline
168
#7
интресно, как этот форум работает со своими 7 миллионами сообщений?

dkameleon, кэш.

dkameleon
На сайте с 09.12.2005
Offline
386
#8
Master812:
кэш.

ппц....

а формируется этот "кэш" каким образом? для каждой страницы каждой темы.

и как часто он "перестраивается", если через минуту вы уже видите мое сообщение?

и откуда берутся данные для "кеша"?

Master812
На сайте с 23.12.2007
Offline
168
#9

dkameleon, ну вообще-то тут темы не так уж и быстро открываются, как хотелось бы. Неужели не замечали тормозов? Поэтому, логично предположить, что такая вот система, предложенная мною в 1-ом сообщении этой темы, имеет право на существование.

А насчёт кэша, я предпологая, что он используется только для главной страницы и для первых 5-10 страниц каждой категории форума, а для тем используются индексы, т.к. к каждой теме кэш не сделаешь иначе он будет не усокрять а наооборот тормозить скорость загрузки.

dkameleon
На сайте с 09.12.2005
Offline
386
#10
Master812:
ну вообще-то тут темы не так уж и быстро открываются, как хотелось бы. неужели не замечали тормозов?

нет. для такой посещаемости как здесь, все просто летает.

Master812:
Поэтому, логично предположить, что такая вот система, предложенная мною в 1-ом сообщении этой темы, имеет право на существование.

у вас явные проблемы с логикой :)

вы как шаман в древности - не понимаете явления и объясняете его как вам нравится.

расскажите мне, как вы новые сообщения и поиск организуете, если он будет затрагивать больше одной темы?

Master812:
а для тем используются индексы

надо же! мы подходим к сути! :)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий