Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Переписка на сайте, организация
Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
[+]
Как лучше организовать переписку на сайте? Например где будет много народа, то таблица в mysql messages не вариант, слишком много записей в одной таблице.
Тогда делаем переписку с записью в файл. У каждого зарегистрированного юзера на проекте есть своя папка, в которой хранится переписка с другими юзерами, т.е. если заходим в скрипт messages.php то обращение идет в 1 конкретный файл, что в разы ниже нагрузка. Как лучше организовать такую переписку? В отдельном одном файле, или придется создавать один и тот же файл у каждого юзера в его папке? т.е. переписка между 2мя юзерами - это 2 одинаковых файла, которые лежат в его папке с его идишником... Иначе ведь никак? Как это лучше организовать подскажите..?
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
nomak_suntown пишет:
таблица в mysql messages не вариант, слишком много записей в одной таблице
А при каком количестве по вашему наступит "слишком много"?
nomak_suntown
Отправлено: 06 Сентября, 2013 - 09:11:48
Гость
Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
[+]
Не в этом дело! Уже есть реализация через 1 бд, уникальные идишники и тп все есть, но хочется разобраться ИМЕННО в данном методе и ИМЕННО так. Например в соцсетях явно не через 1 бд это дело сделано)))
imya
Отправлено: 06 Сентября, 2013 - 09:14:41
Участник
Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012 Откуда: Запорожье, Украина
Помог: 19 раз(а)
Вы удивитесь, но именно через БД. С файлами они вряд ли работают в таком контексте.
Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
nomak_suntown
Отправлено: 06 Сентября, 2013 - 09:17:41
Гость
Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
[+]
Как реализовать переписку между пользователями, с записью в файл? Или в 2 файла?
Примерная структура папок на сайте:
-css
-images
-userfiles/$id/messages/
Могу сделать так:
-userfiles/$id/messages/$messid/messages.dat
Тогда переписка между юзерами 1 и 2 будет выглядеть так:
-userfiles/1/messages/2/messages .dat
-userfiles/2/messages/1/messages.dat
И все чудесно работает, но 2 файла.. Может какнибудь намыслить с такой структурой но в 1 файл? Есть варианты? )) (Добавление)
imya пишет:
Вы удивитесь, но именно через БД. С файлами они вряд ли работают в таком контексте.
О да, очень смешно. Соцсеть вконтакте, 40 с лишним лямов юзеров, все переписываются в одной БД.. ага.. Или нет, скриптом создаются дополнительные миллионы бд для каждого юзера! Конечно в это я не поверю.
Stierus
Отправлено: 06 Сентября, 2013 - 09:22:52
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Цитата:
О да, очень смешно. Соцсеть вконтакте, 40 с лишним лямов юзеров, все переписываются в одной БД.. ага.. Или нет, скриптом создаются дополнительные миллионы бд для каждого юзера! Конечно в это я не поверю.
Вы, видимо, просто не слышали еще о шардинге данных. Погуглите
ps
А в миллиарды файлов, в которых лежит каждая переписка (у каждого из этих 40млн пользователей не один же чат, правда?) вам верится лучше?
nomak_suntown
Отправлено: 06 Сентября, 2013 - 09:23:54
Гость
Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
[+]
Или тот, кто начал переписку, тот и создает у себя в папке файл с перепиской, а тот кто собеседник, получает к себе в БД в поле какойнибудь ярлычек в виде идишника того, кто начал, и уже читает переписку с файла с пути того кто начал.. Тыща мыслей как сделать это, а вот как лучше и правильно не могу определить)) (Добавление)
Уже гуглю. Но блин не каждый пользователь перепсиывается ПРЯМ С КАЖДЫМ пользователем на проекте! Переписка обычно ведется только между друзьями, верно? (Добавление)
На счет шардинга почитал, тоже самое и делается в файлах, не обязательно использовать БД. Хочу реализовать именно так! Мне проще это сделать, нежели делить БД по нескольким серверам)))
Регистрация: Как только прошла проверка, юзер зарегился, сразу создаются его папки, включая папку с messages. Вот и все. У каждого такая папка, в ней хранятся переписки в разных файлах, к примеру
-userfiles/1/messages/2/messages _id_1.dat
и
-userfiles/2/messages/1/messages _id_2.dat
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Цитата:
Но блин не каждый пользователь перепсиывается ПРЯМ С КАЖДЫМ пользователем на проекте! Переписка обычно ведется только между друзьями, верно?
Верно. Мне видится, что у каждого пользователя, в среднем около 40 -50 чатов (учитывая групповые)
Беря вашу цифру в 40млн пользователей (я эту цифру не знаю, будем считать, что вы говорите правлу), получаем 40млн * 50 чатов на каждого = 2млрд чатов, в каждом чате от двух, до хз скольки человек ... пусть, в среднем их будет 3 ... для чего я про людей? - вам же к этому файлу надо выставить права доступа, что бы его могли читать только участники (Добавление)
Цитата:
Но нужно как то сделать одним файлом.
Симлинки, вас спасут симлинки ))
nomak_suntown
Отправлено: 06 Сентября, 2013 - 09:33:35
Гость
Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
[+]
Stierus пишет:
Цитата:
Но блин не каждый пользователь перепсиывается ПРЯМ С КАЖДЫМ пользователем на проекте! Переписка обычно ведется только между друзьями, верно?
Верно. Мне видится, что у каждого пользователя, в среднем около 40 -50 чатов (учитывая групповые)
Беря вашу цифру в 40млн пользователей (я эту цифру не знаю, будем считать, что вы говорите правлу), получаем 40млн * 50 чатов на каждого = 2млрд чатов, в каждом чате от двух, до хз скольки человек ... пусть, в среднем их будет 3 ... для чего я про людей? - вам же к этому файлу надо выставить права доступа, что бы его могли читать только участники (Добавление)
Цитата:
Но нужно как то сделать одним файлом.
Симлинки, вас спасут симлинки ))
Все верно, да. Но намного в скрипте Messages.php когда юзер переходит по нему, проще сделать запрос к пути к себе в папку и открыть файлик с мессагами, нежели делать тоже самое, но через БД...
Симлинки?? Я опять гуглить... Реализовать могу, но хочется сделать одним файлом
Stierus
Отправлено: 06 Сентября, 2013 - 09:40:10
Рекордсмен по количеству сообщений за 7 дней
Покинул форум
Сообщений всего: 2132
Дата рег-ции: Дек. 2008 Откуда: Москваль
Помог: 52 раз(а)
Идея с файлами жизнеспособна, проблема файлов только в одном - по ним нельзя делать выборки. Рано или поздно, вы захотите статистику - кто с кем переписывается, сколько пользователей имеет более 3 чатов, например и тд. Или там найти чаты всех людей, который меньше 18. + если тебен ужно будет добавить свойства чатов (ну там каким цветом раскрашивать или ввести открытые чаты, к которым могут присоединяться кто угодно - не важно, ккие-то свойства именно чатов) - то вам придется к каждому чату добавлять описывающий его свойства отдельный файл, либо внедрять системные символы для описания этих свойств комнат. Сложно расширять, собирать статистику и тд. А так, ничто не мешает писать чаты на файлах, оно работать будет.
nomak_suntown
Отправлено: 06 Сентября, 2013 - 09:51:15
Гость
Покинул форум
Сообщений всего: 65
Дата рег-ции: Июль 2013
Помог: 0 раз(а)
[+]
нет это излишества, простая обычная информативная переписка. Этого достаточно.
А выбрать юзеров, которые имеют более 3х переписок-это выбрать тех, у кого сколько файлов самой переписки. Переписка юзера с другим-это один отдельный файл. Я же говорю вот структура:
-userfiles/1/messages/messages_i d_1.dat
-userfiles/1/messages/messages_id_2.dat
-userfiles/1/messages/messages_i d_3.dat
это 3 рызные переписки одного юзера с другими юзерами. Ну вы поняли. Но нужно ведь чтобы переписку видели оба, верно? )) Поэтому и приходится создавать эти же файлы в папке получателя. В том то и проблема, как можно организовать переписку между юзеров, но чтобы она хранилась в 1м файле. (между юзером 1 и 2 - переписка в одном файле, где е хранить, как ее хранить, может у того кто начал переписку, а как собеседнику на на этот файл выйти и тп короче)
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.