Администратор
Кому интересно - формирование ленты происходит примерно так.
Идет обращение к базе - выбирается группа тех, кто есть в избранном у данного пользователя (с проверкой права на доступ к дневнику). Причем проверка шарашит по всей базе пользователей.
Затем у обнаруженных избранных выбираются записи, сделанные после даты Х. При этом проверяется еще и право доступа к кажой конкретной записи.
Наконец все это разбивается на страницы (учитывая выбранное число вывода для конкретного юзера).
В часы пик сервер, мягко скажем, не радуется.
Если у кого-то есть внятные мысли по поводу оптимизации запросов - будем рады выслушать.
Идет обращение к базе - выбирается группа тех, кто есть в избранном у данного пользователя (с проверкой права на доступ к дневнику). Причем проверка шарашит по всей базе пользователей.
Затем у обнаруженных избранных выбираются записи, сделанные после даты Х. При этом проверяется еще и право доступа к кажой конкретной записи.
Наконец все это разбивается на страницы (учитывая выбранное число вывода для конкретного юзера).
В часы пик сервер, мягко скажем, не радуется.
Если у кого-то есть внятные мысли по поводу оптимизации запросов - будем рады выслушать.
27.10.2005 в 14:53
а зачем по всей-то?
27.10.2005 в 14:58
Опередил с вопросом.
Насколько я понимаю, у каждого дайри есть уникальный идентификатор. Чем шарить по всей базе, нельзя ли переадресовать его к свойствам пользователя, где-то ведь прописаны эти самые избранные, которые потом выводятся списком на страницы?
27.10.2005 в 15:02
Это не колебания воздуха, мы пишем софт для обслуживания большого (хоть и не такого как у вас) количества пользователей, но с гораздо большим количеством самих записей - сотни тысяч- миллионы на одного пользователя, права учитываются, статусы записей и прочее. Просто не надо делать все сразу. Пусть клиентский комп тоже напрягается - сделайте ему хороший javasсriрt.
27.10.2005 в 15:03
27.10.2005 в 15:07
и побить базу на таблички по месяцам.
27.10.2005 в 15:10
27.10.2005 в 15:10
27.10.2005 в 15:12
27.10.2005 в 15:18
от лица человека, несколько раз в час обновляющего страницу избранного
1. Идет обращение к базе - выбирается группа тех, кто есть в избранном у данного пользователя (с проверкой права на доступ к дневнику).
Не совсем понятна фраза «Причем проверка шарашит по всей базе пользователей». Индекса нет, что ли?
список избранных - в куку. 7 символов на человека => 4 Кб хватит примерно так на 500 избранных.
2. Затем у обнаруженных избранных выбираются записи, сделанные после даты Х. При этом проверяется еще и право доступа к кажой конкретной записи.
Объясните глупому сакральный смысл даты Х, а то никаких мыслей по этому поводу
3. Наконец все это разбивается на страницы (учитывая выбранное число вывода для конкретного юзера).
Опять-таки, число вывода - в куку (-1 запрос)
На страницы разбивать перед вторым шагом (уверен, что так и делается, только криво сформулировано)
27.10.2005 в 15:22
27.10.2005 в 15:26
27.10.2005 в 15:29
27.10.2005 в 15:31
27.10.2005 в 15:34
одно но: всё портит функция «выкинуть себя из чужого избранного», это надо как-то бороть
27.10.2005 в 15:43
да и ведь в настройках дайрика можно сделать такой пункт - количество дней для показа избранного, а то и вообще количество страниц избранного с жестким максимумом. Причем новичкам сделать минимальное, а если надо больше - пусть идут в настройки. Вроде идея неплохая. нет?
А насчет пользователей - что-то мне кажется что пользователи ищутся не по ключу, а по нику. Ведь мы вводим в черно-белые листы именно ники, хотя должны бы были выбирать пользователя, а храниться все должно было по первичному ключу...
Могу ошибаться, конечно.
27.10.2005 в 15:46
27.10.2005 в 15:47
2Администрация: хотя бы приблизительно структуру базы пользователей можно? Проще было бы понять, в каком направлении можно провести оптимизацию...
27.10.2005 в 15:48
Ники уникальны - значит, тоже могут быть ключом.
27.10.2005 в 15:48
Продумывать такой вариант, конечно, долго надо...
27.10.2005 в 15:49
27.10.2005 в 15:53
tven, здесь таких пользователей нет, кроме "гостей". Если куки отключены, то вообще нельзя работать в дневниках.
27.10.2005 в 15:53
.silent ... и добавится время на обработку флага прочитал/не прочитал, да? а если к тому же с первого раза не понять? лучше подсветку сделать.
Караидель что-то мне подсказывает, что по шестизначному цифровому айдишнику индекс побыстрее будет, чем по варчару...
27.10.2005 в 16:01
у каждого пользователя есть номер- уникальный идентификатор, смена ника на него никак не обображается.
Хотелось бы знать какая есть уже система индексирования , ибо меня тоже сильно напугала фраза про поиск по всей базе.
Связь "Избранные - Записи" - типовое M к N - разводится введение дополнительной сущности. в которуй атрибутами станут уникальные идентификаторы с первого и второго, если и дополнять сразу полем "открыта" с соответствующими параметрами, то поиск уже будет далеко не по всей базе, а разбит только вот в такие подиндексные блоки.
27.10.2005 в 16:01
1) добавляем табличку с содержимым типа ID UID MSGID TIME
ID - ид записи, UID - ид усера, чью френдленту собираем, MSGID - ид какой-то мессаги (как у вас посты хранятся, я не знаю. если может быть сообщение с одинаковым идом у двух разных усеров, можно добавить PID - Poster ID).
Френдленту собираем из нее простым поднятием сообщений по MSGID (и, возможно, PID).
Посты в табличку заносятся при посте - проверяется, кто читает запостившего, и добавляются соответствующие записи согласно прав. Та же операция происходит при смене списка избранных и при смене прав доступа на дневник/пост/самилучшезнаетечто.
2) вешаем периодический процесс, который регулярно бьет из таблички старые записи по TIME.
3) (опционально) Выносим ее на отдельный сервер, куда по вкусу можно скинуть что-нибудь еще - например, тяжелое, но редкотаскаемое.
Как насчет такого варианта?
27.10.2005 в 16:01
1. Выбор группы избранных.
2. Выбор записей, сделанных после даты Х.
3. Разбивка на страницы.
27.10.2005 в 16:03
или вы расчитываете таким образом уменьшить количество народа пользующего эту функцию?
но ведь это не решение проблемы, это опять же уход от нее.
27.10.2005 в 16:04
27.10.2005 в 16:09
27.10.2005 в 16:13
Да хотя бы держать список тех, кто обновлял дневник за последние Х дней - уже даст хороший прирост скорости, учитывая тонны мёртвых дневников.
27.10.2005 в 16:13