Показать полную графическую версию : "фаворитные списки" *в форумах - за и против
"фаворитные списки" - это не я так обозвала, это пользователь один на форуме предложил.
Суть в следующем:
был некий форум, который раньше был один, а теперь мне заказали скрипт и админы получили возможность форумы на нем плодить (тематическике, как тут, например).
Весь старый форум перелили в тематический форум "архив" и сделали его только для чтения и пооткрывли ряд новых по темам.
Открылись, народ зашел, огляделся и стал писать свои предложения.
Вот "фаворитные списки" - одно из них. То есть я так понимаю, что он хотел бы иметь возможностях в любых тематических форумах поотмечать себе любимые темы и получить еще один виртуальный форум favorites.
Хотелось бы выслушать мысли за и против такой идеи (как с точки зрения "бизнес-логики" форумов в целом, так и с точки зрения претворения в жизнь (те возможных проблем со скоростью работы)
ran71me3rr0r
04-06-2004, 15:40
А что, форум по избранным темам это даже очень рульно!
ran71me3rr0r
спасибо, а поподробнее можно? (или просто идея понравилась?) :)
Prisoner
04-06-2004, 18:30
Что-то аналогичное есть и тут (правда слешком уж прозрачно аналогичное) - форум по своему усмотрению. Я вот к примеру давно выделил в верх страницы те форумы конференции которые посещаю чаще (по нисходящей), сделал раздельчики... так тут тоже самое только на уровне тем уже. Чтоже, с форумами очень удобно получается, думаю с темами будет также. В общем идея хорошая. На счет проблем с быстродействием, думаю все обойдется. В самом деле, добавится в корень дерева еще одна ссылка - фавориты, которая будет вести на один скриптик. А скриптик, уже идентифицируя бойца, форума выдаст ему все, что необходимо. Да и с хранением, если не заморачиваться, а все продумать, тоже ничего сложного...
собственно меня беспокоит следующее: база форума на MySQL (со всеми вытекающими отсюда ограничениями :( )
имееются таблицы:
forums (id, name и прочее)
forum_topics(id, forum_id, name и прочее)
topic_messages(id, topic_id, name и прочее)
users(id, username и т.д.)
Для того, чтобы мне юзеру задать favorites, надо где-то (неважно где, но положим в отдельной таблице, чтобы не нагружать users, или, может быть прямо в ней) сделать поле, куда запихивать id всех отмеченных им по всем форумам тем (forum_topics). Cудя по всему, это долен быть тип set (те массив) Грубо говоря, индивидуальный виртуальный форум favorites - это связка id юзера - массив id topic_messages
Дальше начинается "НО":
На сегодняшний день в форуме 3341 тема. Они набрались меньше, чем за год. Причем за следующий их будет явно сильно больше (во-первых, хозяева об этом очень сильно заботятся, во-вторых прошлый вариант работал очень медленно, что отпугивало посетителей (собственно, поэтому меня и попросили им форум написать). Вывод - что же это будет за монстр - индивидуальный виртуальный форум для каждого юзера, применительно к базе данных и запросам :(( ? (понятно, что тысячи ссылок человек, скорей всего, не отметит. А вдруг отметит ;)
ran71me3rr0r
05-06-2004, 08:13
mar
спасибо, а поподробнее можно? (или просто идея понравилась?)
.. идея понравилась :)
Prisoner
05-06-2004, 15:00
mar
А почему бы не хранить эту связь еще и в кукисах? Есть пирожок - отлично, нет - берем из базы. Так можно снизить нагрузку в большинстве случаев.
Prisoner
тоже вариант :)
а еще какие идеи будут?
Prisoner
05-06-2004, 16:04
Если свободное место не проблема, то можно заранее формировать этот виртфорум и хранить как в файлах, так и в БД. Единственное узкое место (есстественно, что не единственное :)) - нагрузка на сервер при переформировании этого куска html-кода когда пользователь будет менять его содержимое - редактировать список любимых тем.
Prisoner
не знаю. Если нормально организовать данные, то выбор на лету не должен занимать много времени (не больше, чем при выводе список тем любого другого реального форума)
в принципе с set - это я хватанула. Только 64 элемента в массиве - мало. Можно в принципе просто тупую таблицу создать типа:
id -- id юзера (не уникально, может повторяться)
topic_id -- id выбранной темы
с индексом по тому и по другому
а потом просто:
SELECT v.id, ft.name
FROM virtual v, forum_topics ft
WHERE v.topic_id=ft.id AND
v.id = номер id нашего юзера
ORDER BY ft.name; -- (те сортировать все это добро по алфавиту)
А дальше работать с этим, как с обычным списком тем за одним исключением - нельзя создавать новую тему (тк нет реального номера (id) форума)
А в другие (открытые для записи, конечно) можно постить - они лягут на место и все остальные, и этот юзер в том числе увидит новые сообщения и в обычных форумах.
Prisoner
05-06-2004, 23:51
В общем-то - да! Но вы просили идей, а их у нас есть :).
Prisoner
:up:
Ну, мне еще и поразбираться хотелось. Вместе веселей думается :)
Prisoner
06-06-2004, 01:09
Хм... а интересно (нам с прелессстью), как можно смоделировать рабочую нагрузку на сервер в экстримальных условиях: количество пользователей просматривающих свой виртфорум порядка двухсот, а количество тем в каждом таком форуме порядка пятисот? Вот тогда и думать можно будет... только наврядли слишком уж весело :)
Prisoner
Смоделировать-то конечно можно (еще один скрипт). Но эксперименты ставить на чужем боевом сервере, пожалуй, не буду :biglaugh:
Но задуматься стоит. Вернее почитать про возможности mysql.
Придумаю - напишу :biglaugh:
Если серьезно, то нагрузка только в одновременном select-e о котором я уже писала, причем туда еще limit 0, 15 надо вставить: (ну, или следующие страницы 0 все равно по 15 штук)
SELECT v.id, ft.name FROM virtual v, forum_topics ft
WHERE v.topic_id=ft.id AND
v.id = номер id нашего юзера
ORDER BY ft.name
LIMIT 0,15;
А число выбранных тем у юзера вообще может прямо цифрой в таблице user-ов лежать.
В принципе это не намного хуже, чем одновременный просмотр тем же куоличеством юзеров самих форумов. (Или я чего-то не понимаю?)
Prisoner
06-06-2004, 14:07
Угу... я право не знаю чего мы заморочились - запросы-то почти идентичны...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.