Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: приватные чаты в MAMBA
 
 автор: sd607   (01.11.2006 в 00:49)   письмо автору
 
 

Искал решение своей проблемы по форуму, возможно плохо искал, есть похожее, но все же не то.

Столкнулся с задачей написания небольшого сайта знакомств и сразу уперся как мне казалось в простую проблему, а именно организация общения между пользователями, и если уж совсем честно, принцип хранения истории сообщений.
Наверняка многие знакомы с таким проектом как МАМBA (http://www.corp.mamba.ru/) и их знакомствами. Например: (lov.ru или love.rambler.ru, и многие другие). Очень хотелось бы узнать, каким образом у них организована система переписки. Хотя бы приблизительно. Или иное мудрое решение этого.
Основные условия задачи таковы:
1. История сообщений не удаляется до тех пор пока пользователь не удалит свой аккаунт, при этом копия истории остается у пользователя (-ей) который с ним общался.
2. Если пользователь решит удалить из своей контактной книги собеседника, история остается у собеседника, но стирается у пользователя. Таким образом если пользователь решит возобновить общение с собеседником, то все будет выглядеть так, как буд-то до этого со стороны пользователя, переписки с собеседником не было.
3. Пользователю должно сообщаться общее кол-во новых сообщений от всех контактов и кол-во новых по каждому пользователю.

В общем все просто, но. Все это НЕ должно убить сервер при кол-ве пользователей в несколько тыс. и кол-ве сообщений в истории свыше 1 млн. и далее.

Была мысль создать несколько таблиц с сообщениями и раскидывать по ним историю в зависимости от ID пользователя. Все бы хорошо, но запрос на выборку выглядит как-то дико.
Была мысль просто создать доп. таблицу, куда скидывались бы старые сообщения. Тоже не вариант, все равно получится 1 к 2, 2 к 3 и так далее. Основную таблицу будет уверенно раздувать.

Можно так же тексты сообщений выносить в отдельную таблицу, а в головной держать только строки вида:

id | from_id | to_id | owner_id | msg_id | read_status
1 | 100 | 10 | 100 | 123 | 0
2 | 100 | 10 | 10 | 123 | 0

id | message
123 | 'Hello world'

Но тоже как то... Хотя может, что-то можно выжать из этого. Но все равно две таблицы.... нет. не вариант.

Задавал подобный вопрос на нескольких форумах и IRC канале. То ли все такие умные, то ли спасение утопающего, дело рук самого утопающего.... Но кроме флейма в свой адрес я ничего интересного не услышал. Очень надеюсь, что у кого-то найдется немного свободного времени поразмышлять со мной по этой проблеме. Или я буду уже рад хотя бы ссылочке по этой теме. Я уже где только не искал.

ps В работе используется PHP 4.4.3, mysql 4.1. Сервер Apache 2.

ps Пожелания вида: "Иди в школу" и "Иди с этим Г в и на...", просьба не писать. Начитался уже сполна.

В общем как говорится ПЛИЗ ХЭЛП. Буду ОЧЕНЬ признателен!

   
 
 автор: Trianon   (01.11.2006 в 01:24)   письмо автору
 
   для: sd607   (01.11.2006 в 00:49)
 

А чем не подошел вариант

id | from_id | to_id | owner_id | msg_id | read_status
1 | 100 | 10 | 100 | 123 | 0
2 | 100 | 10 | 10 | 123 | 0

id | message
123 | 'Hello world'

?

Можно еще подумать, какие поля куда раскидать, но в принципе не так уж и плохо.

   
 
 автор: sd607   (01.11.2006 в 20:02)   письмо автору
 
   для: Trianon   (01.11.2006 в 01:24)
 

Объясняю. Был у меня когда-то ресурс примерно с такой же структурой таблицы по сообщениям. Так вот. На, где-то 30 тыс. пользователей выходило свыше 1 млн. сообщений (хранил до 10-20 сообщений по каждой паре собеседников) в основной таблице и около 2-х млн. в таблице истории. Админ постоянно ругался, что мол обращения к этой таблице грузят мускл. Мол: "Делай, что хочешь, а снизь кол-во записей". Ну и плюс время от времени, приходлось запускать REPAIR TABLE, в силу падения таблы. Потому и терзаюсь мыслью, что делаю не так.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования