Diary Spirit @дневники: изнутри

четверг, 27 октября 2005

Администратор

14:50 И еще немного о ленте избранного
Кому интересно - формирование ленты происходит примерно так.



Идет обращение к базе - выбирается группа тех, кто есть в избранном у данного пользователя (с проверкой права на доступ к дневнику). Причем проверка шарашит по всей базе пользователей.

Затем у обнаруженных избранных выбираются записи, сделанные после даты Х. При этом проверяется еще и право доступа к кажой конкретной записи.

Наконец все это разбивается на страницы (учитывая выбранное число вывода для конкретного юзера).



В часы пик сервер, мягко скажем, не радуется.



Если у кого-то есть внятные мысли по поводу оптимизации запросов - будем рады выслушать.
URL
Если Вы делаете то, что Вы всегда делали, Вы получите то,...
BIOS successfully loaded power supply check.......done ...
успкоилась, сегодня утром Гордон дочитал "Сокровен...
Никогда не думал, что в городе столько выпускников, казал...
второй Current music: Земфира - Р
Жизнь... смерть... сегодня жил, всего час назад.. сечас ...

27.10.2005 в 14:53

27.10.2005 в 14:53
Причем проверка шарашит по всей базе пользователей.

а зачем по всей-то?
URL

27.10.2005 в 14:58

27.10.2005 в 14:58
.silent

Опередил с вопросом.

Насколько я понимаю, у каждого дайри есть уникальный идентификатор. Чем шарить по всей базе, нельзя ли переадресовать его к свойствам пользователя, где-то ведь прописаны эти самые избранные, которые потом выводятся списком на страницы?
URL

27.10.2005 в 15:02

27.10.2005 в 15:02
Мысль - не надо строить все. Достраивайте асинхронно порциями.

Это не колебания воздуха, мы пишем софт для обслуживания большого (хоть и не такого как у вас) количества пользователей, но с гораздо большим количеством самих записей - сотни тысяч- миллионы на одного пользователя, права учитываются, статусы записей и прочее. Просто не надо делать все сразу. Пусть клиентский комп тоже напрягается - сделайте ему хороший javasсriрt.
URL

27.10.2005 в 15:03

27.10.2005 в 15:03
вот.вот. юзер посылает на сервер запрос - избранное (свое или чужое). Есть же список избранных. к примеру к юзеру номер 376 избранными являются юзера 678, 3469, 53479 и тд. зачем же шерстить всю базу?
URL

27.10.2005 в 15:07

27.10.2005 в 15:07
складывать записи за последние N дней (N=1...7?) в табличку recent_posts и в три часа ночи мёржить её с остальной базой? с перестроением индексов итп.

и побить базу на таблички по месяцам.
URL

27.10.2005 в 15:10

27.10.2005 в 15:10
может вам нужна помощь в программировании... а?
URL

27.10.2005 в 15:10

27.10.2005 в 15:10
th , а дневники, поди, на SQL сервере лежат?
URL

27.10.2005 в 15:12

27.10.2005 в 15:12
А нельзя сделать показ ф-ленты с "момента последнего посещения"? Нечто подлобное делается на том же job.ru, например, где объем инфы всяко больше...
URL

27.10.2005 в 15:18

27.10.2005 в 15:18
несколько глупых идей:

от лица человека, несколько раз в час обновляющего страницу избранного



1. Идет обращение к базе - выбирается группа тех, кто есть в избранном у данного пользователя (с проверкой права на доступ к дневнику).

Не совсем понятна фраза «Причем проверка шарашит по всей базе пользователей». Индекса нет, что ли?

список избранных - в куку. 7 символов на человека => 4 Кб хватит примерно так на 500 избранных.



2. Затем у обнаруженных избранных выбираются записи, сделанные после даты Х. При этом проверяется еще и право доступа к кажой конкретной записи.

Объясните глупому сакральный смысл даты Х, а то никаких мыслей по этому поводу



3. Наконец все это разбивается на страницы (учитывая выбранное число вывода для конкретного юзера).

Опять-таки, число вывода - в куку (-1 запрос)

На страницы разбивать перед вторым шагом (уверен, что так и делается, только криво сформулировано)
URL

27.10.2005 в 15:22

27.10.2005 в 15:22
Кстати, а сделать стандартное число вывода для всех юзеров? Чтобы вообще убрать этот шаг? Конечно, тоже будут возмущаться, но... главное взять не слишком большое для удобства тех, у кого медленный диал-ап. Либо просто выбрать среднее по дайри, если это не слишком геморно.
URL

27.10.2005 в 15:26

27.10.2005 в 15:26
И еще одно - опубликуйте официальный интерфейс (API) обязательно! Ваши почитатели вас порадуют, право же.
URL

27.10.2005 в 15:29

27.10.2005 в 15:29
Кукисы не спасут отца русской демократии. За время прошедшее после последнего сохранения, пользователь мог стереть или изменить запись. Показывать её в первоначальном виде - наршать права писавшего и вводить в заблуждение смотрящего.
URL

27.10.2005 в 15:31

27.10.2005 в 15:31
Возможно "шарить по всей базе пользователей" станет проще, если ее предварительно отфильтровать по признаку "были записи за последние Х дней".
URL

27.10.2005 в 15:34

27.10.2005 в 15:34
Караидель а в куках хранить только список избранных. 111,222,333 - и т.д. естественно, если нет куки - впаять, если выкинул кого из избранного или добавил - перепаять. в большинстве случаев минус запрос.



одно но: всё портит функция «выкинуть себя из чужого избранного», это надо как-то бороть
URL

27.10.2005 в 15:43

27.10.2005 в 15:43
кстати, вопрос. чем же будет отличаться так нагрузка при пользовании программой от простого серфинга?



да и ведь в настройках дайрика можно сделать такой пункт - количество дней для показа избранного, а то и вообще количество страниц избранного с жестким максимумом. Причем новичкам сделать минимальное, а если надо больше - пусть идут в настройки. Вроде идея неплохая. нет?



А насчет пользователей - что-то мне кажется что пользователи ищутся не по ключу, а по нику. Ведь мы вводим в черно-белые листы именно ники, хотя должны бы были выбирать пользователя, а храниться все должно было по первичному ключу...

Могу ошибаться, конечно.
URL

27.10.2005 в 15:46

27.10.2005 в 15:46
.silent ето уже сделали. с месяц назад.
URL

27.10.2005 в 15:47

27.10.2005 в 15:47
Встречный вопрос по кукам: а как быть тем, у кого они отключены. У меня они не отключены, но есть же персонажи с отключёнными куками...

2Администрация: хотя бы приблизительно структуру базы пользователей можно? Проще было бы понять, в каком направлении можно провести оптимизацию...

URL

27.10.2005 в 15:48

27.10.2005 в 15:48
.silent

Ники уникальны - значит, тоже могут быть ключом.
URL

27.10.2005 в 15:48

27.10.2005 в 15:48
А можно вообще френд ленту сделать по принципу "прочитал/не прочитал", тогда будут показываться только те записи, что не прочел еще пользователь. Разве не удобно?

Продумывать такой вариант, конечно, долго надо...
URL

27.10.2005 в 15:49

27.10.2005 в 15:49
Караидель не очень хорошее решение - ники меняются, а ключит не должен бы по идее.
URL

27.10.2005 в 15:53

27.10.2005 в 15:53
Пишите, пишите. Мы все передадим кому следует.



tven, здесь таких пользователей нет, кроме "гостей". Если куки отключены, то вообще нельзя работать в дневниках.
URL

27.10.2005 в 15:53

27.10.2005 в 15:53
tven а как они на дневник свой с отключенными куками зайдут-то?



.silent ... и добавится время на обработку флага прочитал/не прочитал, да? а если к тому же с первого раза не понять? лучше подсветку сделать.



Караидель что-то мне подсказывает, что по шестизначному цифровому айдишнику индекс побыстрее будет, чем по варчару...
URL

27.10.2005 в 16:01

27.10.2005 в 16:01
rushills

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



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



Связь "Избранные - Записи" - типовое M к N - разводится введение дополнительной сущности. в которуй атрибутами станут уникальные идентификаторы с первого и второго, если и дополнять сразу полем "открыта" с соответствующими параметрами, то поиск уже будет далеко не по всей базе, а разбит только вот в такие подиндексные блоки.
URL

27.10.2005 в 16:01

27.10.2005 в 16:01
Хм.



1) добавляем табличку с содержимым типа ID UID MSGID TIME

ID - ид записи, UID - ид усера, чью френдленту собираем, MSGID - ид какой-то мессаги (как у вас посты хранятся, я не знаю. если может быть сообщение с одинаковым идом у двух разных усеров, можно добавить PID - Poster ID).



Френдленту собираем из нее простым поднятием сообщений по MSGID (и, возможно, PID).



Посты в табличку заносятся при посте - проверяется, кто читает запостившего, и добавляются соответствующие записи согласно прав. Та же операция происходит при смене списка избранных и при смене прав доступа на дневник/пост/самилучшезнаетечто.



2) вешаем периодический процесс, который регулярно бьет из таблички старые записи по TIME.



3) (опционально) Выносим ее на отдельный сервер, куда по вкусу можно скинуть что-нибудь еще - например, тяжелое, но редкотаскаемое.



Как насчет такого варианта?
URL

27.10.2005 в 16:01

27.10.2005 в 16:01
А не пробовали замерять по времени, на что уходит больше всего?



1. Выбор группы избранных.

2. Выбор записей, сделанных после даты Х.

3. Разбивка на страницы.



:)
URL

27.10.2005 в 16:03

27.10.2005 в 16:03
Если все дело в sql-запросе, тогда я не понимаю, как клиент решит эту проблему?

или вы расчитываете таким образом уменьшить количество народа пользующего эту функцию?

но ведь это не решение проблемы, это опять же уход от нее.
URL

27.10.2005 в 16:04

27.10.2005 в 16:04
Как хранятся данные? Применяется ли индексация?
URL

27.10.2005 в 16:09

27.10.2005 в 16:09
Завулон, я и писал о его логичной выделенности, если Вы заметили :).



URL

27.10.2005 в 16:13

27.10.2005 в 16:13
А если держать базу записей за последние сутки? Можно же автоматизировать удаление из неё старых записей. И вести поиск только по ней. Да, жёсткое ограничение глубины, но насколько уменьшится время поиска!

Да хотя бы держать список тех, кто обновлял дневник за последние Х дней - уже даст хороший прирост скорости, учитывая тонны мёртвых дневников.
URL

27.10.2005 в 16:13

27.10.2005 в 16:13
А еще хорошо бы портировать будущую программу сразу на JME(2) платформу, чтобы можно было @дневниками с телефонов пользоваться. Ибо сколько ни пробовал, ни через один мобильный эмулятор или веб-браузер нельзя залогиниться на дневники. Это все куки. На софтинах пишут, что есть поддержка кук, а вот фиг.
URL