Куда это сообщение записывается, где хранится и как удаляется?
Спустя 6 минут, 45 секунд (14.10.2009 - 19:10) Gabriel написал(а):
наверное создаеться:
1. таблица: лс.
2. поля: отправитель, получатель, сообшение, тема, сообшения, дата отправки.
водь гдето так
1. таблица: лс.
2. поля: отправитель, получатель, сообшение, тема, сообшения, дата отправки.
водь гдето так
Спустя 8 минут, 45 секунд (14.10.2009 - 19:19) SunSet написал(а):
Gabriel
Ну, это понятно. А как осуществляется доставка нового сообщения. В базу оно записалось, а дальше то что.. при каждом обновлении страницы юзера смотреть в базу, нету ли для такого то ид нового сообщения...
Ну, это понятно. А как осуществляется доставка нового сообщения. В базу оно записалось, а дальше то что.. при каждом обновлении страницы юзера смотреть в базу, нету ли для такого то ид нового сообщения...
Спустя 54 минуты, 50 секунд (14.10.2009 - 20:14) sergeiss написал(а):
Цитата (SunSet @ 14.10.2009 - 20:19) |
при каждом обновлении страницы юзера смотреть в базу, нету ли для такого то ид нового сообщения... |
А что, есть другие варианты?
Спустя 1 минута, 27 секунд (14.10.2009 - 20:15) SunSet написал(а):
sergeiss
так для того и спрашиваю, чтоб узнать
так для того и спрашиваю, чтоб узнать
Спустя 2 часа, 35 минут, 58 секунд (14.10.2009 - 22:51) Nikitian написал(а):
Есть вариант сразу доставлять, если пользователь онлайн. Скажем клиент держит постоянное соединение с сервером, а демон на серваке шлёт данные тем, кому нужно. Подробнее тут
Спустя 15 часов, 48 минут, 24 секунды (15.10.2009 - 14:39) SunSet написал(а):
Не могу вот понять одной штуки. Как полагаю, все сообщения не гуманно держать в одной таблице.
1. Значит, каждому юзеру отдельную таблицу или как (для личных сообщений)?
2. Когда юзер 1 отправляет сообщение юзеру 2, где хранится вот это непрочитанное сообщение? И куда оно потом попадает? Да и как вообще происходит проверка на то, есть ли новые сообщения юзеру 2 или нет..
1. Значит, каждому юзеру отдельную таблицу или как (для личных сообщений)?
2. Когда юзер 1 отправляет сообщение юзеру 2, где хранится вот это непрочитанное сообщение? И куда оно потом попадает? Да и как вообще происходит проверка на то, есть ли новые сообщения юзеру 2 или нет..
Спустя 6 часов, 46 минут, 44 секунды (15.10.2009 - 21:26) SunSet написал(а):
Ну хоть бы подсказку какуюто..
Спустя 33 минуты, 59 секунд (15.10.2009 - 22:00) twin написал(а):
Цитата |
1. Значит, каждому юзеру отдельную таблицу или как (для личных сообщений)? |
как раз не гуманно. В одной и надо. Просто можно старые архивировать в другую таблицу или вообще сносить. Предупредить, что сохраняются месяц к примеру. Или как тут - лимит поставить. 100 штук в одни руки. Чтоб сильно таблица не пухла.
Цитата |
2. Когда юзер 1 отправляет сообщение юзеру 2, где хранится вот это непрочитанное сообщение? И куда оно потом попадает? Да и как вообще происходит проверка на то, есть ли новые сообщения юзеру 2 или нет.. |
Тут кто во что горазд. Я делаю все в кучу, чтоб оба могли читать на одной странице, не как тут. А кто читал нечитал - флагами. Делаешь поля в таблице и ставишь флаги.
Спустя 2 минуты, 2 секунды (15.10.2009 - 22:02) twin написал(а):
Да, кстати. На флэшке можно сделать онлайн оповещалку. Если интересно как работает вся эта кухня снаружи, вот тут можно посмотреть.
Спустя 52 минуты, 38 секунд (15.10.2009 - 22:55) SunSet написал(а):
twin
С первым вопросом более-менее понятно, старые или вне лимита 100 сообщений - удалять.
А с флагами чтото не очень понял.. смутно представляю себе таблицу для всех сообщений. Допустим, записывается сама месага, ид отправителя, ид получателя. Что дальше? Как получатель узнает о том что там для него сообщение?
Флеш не катит..
С первым вопросом более-менее понятно, старые или вне лимита 100 сообщений - удалять.
А с флагами чтото не очень понял.. смутно представляю себе таблицу для всех сообщений. Допустим, записывается сама месага, ид отправителя, ид получателя. Что дальше? Как получатель узнает о том что там для него сообщение?
Флеш не катит..
Спустя 9 минут, 16 секунд (15.10.2009 - 23:04) vagrand написал(а):
AJAX. Каждые несколько минут запрос к скрипту который проверяет наличие новых месаг для юзера
Спустя 2 минуты, 20 секунд (15.10.2009 - 23:06) SunSet написал(а):
vagrand
Может, когдато в будующем, когда пхп нормально освою Пока без аякса буду мудрить. Куча сайтов где доставка без аякса производится. Черт с обновлением страницы, это нормально, интерисует принципиальная схема отправки/доставки сообщений.
Может, когдато в будующем, когда пхп нормально освою Пока без аякса буду мудрить. Куча сайтов где доставка без аякса производится. Черт с обновлением страницы, это нормально, интерисует принципиальная схема отправки/доставки сообщений.
Спустя 5 минут, 4 секунды (15.10.2009 - 23:11) vagrand написал(а):
SunSet
Месаги никуда не "доставляються". Они в базе уже сразу после сохранения. А если получатель сидит и читает какую-то увлекательную статью а не гоняет по сайту как угарелый то он не узнает о том что для него кто-то месаг в базу сохранил если ты не будеш реквесту к php посылать. Лично я знаю только 3-и способа посылки реквестов к серверу без перезагрузки всей страницы: AJAX, IFrame и Flash
Месаги никуда не "доставляються". Они в базе уже сразу после сохранения. А если получатель сидит и читает какую-то увлекательную статью а не гоняет по сайту как угарелый то он не узнает о том что для него кто-то месаг в базу сохранил если ты не будеш реквесту к php посылать. Лично я знаю только 3-и способа посылки реквестов к серверу без перезагрузки всей страницы: AJAX, IFrame и Flash
Спустя 4 минуты, 11 секунд (15.10.2009 - 23:16) twin написал(а):
Цитата |
Что дальше? Как получатель узнает о том что там для него сообщение? |
Флаааг. Проверяй, если юзер запрашивал скрипт, ставь галочку. и по этой ячейке ориентируйся. нет галочки - не читал. Есть - прочитано.
Спустя 1 минута, 25 секунд (15.10.2009 - 23:17) SunSet написал(а):
vagrand
та забудь уже об обновлении, с этим уже решил - обновил страницу- увидел месагу. Я про другое спрашиваю - представь что есть такая таблица для всех сообщений. Представим что у нас 1000 юзеров, а это мелочи, если сравнивать с однокласниками и им прочей фигней. Вот эта тысяча юзеров наговорила аж по 100 сообщений. Всего в базе 100000 сообщений. При каждом обновлении страницы для любого пользователя производить полный поиск по такой таблице в 100000 записей? Ресурсов так не напастись если сразу хотя б человек 30 нажмут "обновить"
twin
Начинаю понемногу понимать
та забудь уже об обновлении, с этим уже решил - обновил страницу- увидел месагу. Я про другое спрашиваю - представь что есть такая таблица для всех сообщений. Представим что у нас 1000 юзеров, а это мелочи, если сравнивать с однокласниками и им прочей фигней. Вот эта тысяча юзеров наговорила аж по 100 сообщений. Всего в базе 100000 сообщений. При каждом обновлении страницы для любого пользователя производить полный поиск по такой таблице в 100000 записей? Ресурсов так не напастись если сразу хотя б человек 30 нажмут "обновить"
twin
Начинаю понемногу понимать
Спустя 9 минут, 6 секунд (15.10.2009 - 23:26) twin написал(а):
Цитата |
Ресурсов так не напастись если сразу хотя б человек 30 нажмут "обновить" |
Для этого делается другая таблица. для зуммера. в неё пишутся иды непрочитанных и удаляются когда прочитают.
Спустя 3 минуты, 2 секунды (15.10.2009 - 23:29) vagrand написал(а):
SunSet
> При каждом обновлении страницы для любого пользователя производить полный поиск по такой таблице в 100000 записей?
Это еще зачем? Чтобы узнать что у конкретного пользователя появилось N-ое количество непрочитаных месаг "полный поиск" не нужен.
> При каждом обновлении страницы для любого пользователя производить полный поиск по такой таблице в 100000 записей?
Это еще зачем? Чтобы узнать что у конкретного пользователя появилось N-ое количество непрочитаных месаг "полный поиск" не нужен.
Спустя 1 минута, 50 секунд (15.10.2009 - 23:31) SunSet написал(а):
twin
эээ..то есть дублировать сообщение в две таблицы: основная и вот эта для проверки новых? И при обновлении проверяется только вторая, для непрочитанных?
vagrand
Выслушаю все варианты
эээ..то есть дублировать сообщение в две таблицы: основная и вот эта для проверки новых? И при обновлении проверяется только вторая, для непрочитанных?
vagrand
Выслушаю все варианты
Спустя 1 минута, 53 секунды (15.10.2009 - 23:33) vagrand написал(а):
SunSet
twin тебе уже выдал наилучший вариант
twin тебе уже выдал наилучший вариант
Спустя 1 минута, 53 секунды (15.10.2009 - 23:35) twin написал(а):
Цитата |
эээ..то есть дублировать сообщение в две таблицы: основная и вот эта для проверки новых? |
это если для онлайн оповещалки. чтоб облегчить частые запросы. А если как ты хочешь, то придется искать по всей.
Хотя можно посмотреть, что лучше. Делать большой запрос по условию - впринципе тоже вариант.
Спустя 1 минута, 19 секунд (15.10.2009 - 23:36) sergeiss написал(а):
Можно попробовать немного пооптимизировать БД
Делаем дополнительное поле в таблице с юзерами. Как только появляется новое сообщение для юзера, так сразу же там ставится TRUE. А после прочтения юзером сообщений ставится FALSE.
Если юзер зашел на сайт, или просто обновил какую-то страницу, то только проверяется одно поле в таблице юзеров.
Собственно выборка/анализ новых (старых) сообщений пусть делается только тогда, когда юзер зашел на соответствующую страницу. Это будет происходить все-таки реже, чем просто обновление страницы или другие перемещения по сайту.
PS. Пока писал, уже что-то похожее ответили... Но все равно не то же самое.
Делаем дополнительное поле в таблице с юзерами. Как только появляется новое сообщение для юзера, так сразу же там ставится TRUE. А после прочтения юзером сообщений ставится FALSE.
Если юзер зашел на сайт, или просто обновил какую-то страницу, то только проверяется одно поле в таблице юзеров.
Собственно выборка/анализ новых (старых) сообщений пусть делается только тогда, когда юзер зашел на соответствующую страницу. Это будет происходить все-таки реже, чем просто обновление страницы или другие перемещения по сайту.
PS. Пока писал, уже что-то похожее ответили... Но все равно не то же самое.
Спустя 8 минут, 9 секунд (15.10.2009 - 23:44) SunSet написал(а):
twin
Что за онлайн оповещалка? Как я планирую - там не будет некого рода чата, но доставка сообщений - да, как тут например.
sergeiss
Вариант интересен. Даже если заносить такую запись "есть или нету сообщение", можно сразу в строку юзера (его имя, ид и прочее). Вроде и не так требовательно к ресурсам будет
Что за онлайн оповещалка? Как я планирую - там не будет некого рода чата, но доставка сообщений - да, как тут например.
sergeiss
Вариант интересен. Даже если заносить такую запись "есть или нету сообщение", можно сразу в строку юзера (его имя, ид и прочее). Вроде и не так требовательно к ресурсам будет
Спустя 15 минут, 8 секунд (15.10.2009 - 23:59) SunSet написал(а):
sergeiss
И твой вариант предполает только две таблицы - для юзеров (общая) и для всех сообщений, так?
И твой вариант предполает только две таблицы - для юзеров (общая) и для всех сообщений, так?
Спустя 9 минут, 59 секунд (16.10.2009 - 00:09) sergeiss написал(а):
Цитата (SunSet @ 16.10.2009 - 00:59) |
И твой вариант предполает только две таблицы - для юзеров (общая) и для всех сообщений, так? |
Ну да, так. А куда больше-то?
Я тут посмотрел...
То, что twin написал
Цитата (twin @ 16.10.2009 - 00:16) |
Флаааг. Проверяй, если юзер запрашивал скрипт, ставь галочку. и по этой ячейке ориентируйся. нет галочки - не читал. Есть - прочитано. |
и то, что я сказал - одно и то же, вобщем-то Только разными словами сказано, я чуть подробнее расписал. Но суть одна и та же.
И насчет ресурсов - для того этот вариант и предлагается, что ресурсов будет меньше затребовано. Причем существенно меньше.
Спустя 38 секунд (16.10.2009 - 00:10) twin написал(а):
sergeiss
Цитата |
Делаем дополнительное поле в таблице с юзерами. |
Это не вариант. У меня на одном сайте около 400 000 юзеров зарегано. И у каждого куча данных. Если дергать эту таблицу при каждом заходе на страницу - мускул падает. Я дергаю её только при первом заходе, потом сессия.
Так что отдельная таблица для зуммера - оптимальное решение.
Спустя 3 минуты, 18 секунд (16.10.2009 - 00:13) SunSet написал(а):
Зуммер.... новая строка... или зуммер.. или новая строка...
Как же делать тогда?:
Как же делать тогда?:
Спустя 15 минут, 17 секунд (16.10.2009 - 00:29) kirik написал(а):
У меня реализован вариант похожий на тот, что написал sergeiss. Только вместо true и false записываются сообщения +1 когдя юзер получает сообщение, -1 когда читает непрочитанное сообщение. Сообщения лежат в отдельной таблице с полем status которое может принимать одно или несколько значений из (прочитано|удалено отправителем|удалено получателем). Например когда получатель пытается удалить сообщение, проверяется бит "удалено отправителем", если он 1, то просто удаляем сообщение из таблицы (по такой же схеме и с отправителем).
Спустя 4 минуты, 9 секунд (16.10.2009 - 00:33) SunSet написал(а):
kirik
Трудно для моего понимания Сколько у тебя таблиц участвуют в этой порнографии? )))
Трудно для моего понимания Сколько у тебя таблиц участвуют в этой порнографии? )))
Спустя 4 минуты, 18 секунд (16.10.2009 - 00:37) twin написал(а):
Цитата |
Зуммер.... новая строка... или зуммер.. или новая строка... Как же делать тогда? |
Блин, я же написал как... Делаешь отдельную таблицу, куда при добавлении сообщения пишешь ид получателя. при заходе смотришь по ней, если такой есть - выдаешь оповещение. Если юзер зашел на страницу с сообщением - стираешь ид из таблицы зуммера. и все. он будет трещать, пока не прочитает. и в таблице будет записей ровно столько, сколько непрочитанных сообщений. то есть пшик. можно сильно перегрузками не париться.
Спустя 9 минут, 45 секунд (16.10.2009 - 00:47) SunSet написал(а):
twin
Мдя.. теперь уяснил. Более-менее понимаю.
Еще вопрос волнует, но не по теме - когда юзер заходит в свой аккаунт, запись в сессию происходит. И в строке браузера как бы ничего не отображается. Но иногда вижу что к строке прибавляется ид его или как назвать.. ну типа такого index.php?any=3527352527529875298572093580295.
Это что?
Мдя.. теперь уяснил. Более-менее понимаю.
Еще вопрос волнует, но не по теме - когда юзер заходит в свой аккаунт, запись в сессию происходит. И в строке браузера как бы ничего не отображается. Но иногда вижу что к строке прибавляется ид его или как назвать.. ну типа такого index.php?any=3527352527529875298572093580295.
Это что?
Спустя 4 минуты, 41 секунда (16.10.2009 - 00:51) kirik написал(а):
Цитата (SunSet @ 15.10.2009 - 16:33) |
Сколько у тебя таблиц участвуют в этой порнографии? |
Две: таблица юзеров и таблица сообщений
Спустя 2 минуты, 8 секунд (16.10.2009 - 00:54) twin написал(а):
Цитата |
Это что? |
Это SID. идентификатор сессии. Лепится тогда, когда не получается поставить сессионную куку.
Спустя 2 минуты, 3 секунды (16.10.2009 - 00:56) SunSet написал(а):
kirik
Спасиб, с таблицами уже по полкам все разложили Могу спать спокойно)
Еще про вот этот sessionid или что оно понять... mod_rewrite потом както буду разбирать..
twin
Автоматом лепится или требует вмешательства десяти пальцев? То есть если собираюсь "вести" пользователя по его сессии ($_SESSION) то этот индификатор не понадобится?
Спасиб, с таблицами уже по полкам все разложили Могу спать спокойно)
Еще про вот этот sessionid или что оно понять... mod_rewrite потом както буду разбирать..
twin
Автоматом лепится или требует вмешательства десяти пальцев? То есть если собираюсь "вести" пользователя по его сессии ($_SESSION) то этот индификатор не понадобится?
Спустя 5 минут, 1 секунда (16.10.2009 - 01:01) twin написал(а):
Цитата |
индификатор не понадобится? |
идентификатор...
Нет. не понадобится. автоматом все...
Анекдот вспомнил про автомат и десять пальцев.
разговаривают два импотента. один говорит - поставил японский автомат. кнпку нажал - встало. другую - легло. А второй - а у меня полуавтомат. Поднимаю рукой, падает автоматически.
Спустя 4 минуты, 18 секунд (16.10.2009 - 01:05) SunSet написал(а):
twin
Быстро набирал - опечатался. Понятное дело что идентификатор. Я это еще зазубривал, когда пытался запомнить "идентификационный код"
Быстро набирал - опечатался. Понятное дело что идентификатор. Я это еще зазубривал, когда пытался запомнить "идентификационный код"
_____________
... и помните! Каким бы ни был PHP, главное - чтобы он был защищенным! :) (PHP с Анфисой Чеховой)