Здравствуйте, я имею ввиду без использования фреймворка, где можно хранить такое и отображать новые сообщения? Первая идея которая у меня была, это таблица messages в базе данных, где хранятся текст сообщения, кому, от кого, прочитано или нет. Как человек заходит на сайт, проверяем все сообщения в этой таблице и ищем те, которые адресованы лично ему, затем полученный список проверяем, прочитано или нет, все сообщения помеченные как непрочитанные пихаем в блок Новые сообщения на сайте и все. Но мне такая система кажется жутко геморной и ресурсозатратной, есть другие выходы?
select * from messages where to_user_id = :user_id and is_read = :is_read
:user_id - id пользователя
:is_read - прочитано сообщение или нет
Не забываем foreighn key для user_id.
Можно хоть в таблице из 10 миллионов выбирать, все быстро работает. Если появятся проблемы после 50 миллионов - решаемо. (Партиционирование, секционирование или отдельное хранилище для горячих данных)
мне такая система кажется жутко геморной и ресурсозатратной, есть другие выходы?
Если тебе такая система кажется слишком сложной, то попробуй свои силы в чем-то другом. Поучись выводить текст в браузер, или там делать запросы в базу данных.
Со временем у тебя наберется достаточно опыта, чтобы сделать систему входящих сообщений
Сегодня, похоже, день гениального вопроса. один другого краше..
Такая система мне не кажется сложной, я лишь спросил, есть ли менее ресурсозатратные системы, так как каждую загрузку страницы проверять все сообщения в базе данных - а их там могут быть тысячи - это не подход программиста. Если ты не можешь ответить по существу, зачем было высирать свой ответ?
Для правильного вопроса надо знать половину ответа
проверяем все сообщения в этой таблице и ищем те, которые адресованы лично ему, затем полученный список проверяем, прочитано или нет, все сообщения помеченные как непрочитанные пихаем в блок Новые сообщения на сайте
Судя по вопросу, вы не понимаете, как работает база данных. Научитесь правильно работать с БД и ваш вопрос о ресурсозатратности сам отпадёт.
eternal_blue, Слушай дружище, ты не прав.
Ты реально сам не знаешь как это должно работать и при этом огрызаешься на дельные советы опытных товарищей. Тебе еще до того что бы такая система жрала ресурсы расти и расти. Такую систему любой опытный программист запустит без всякий фреймворках за один вечер даже на хостинге за 30 рублей, а то и на бесплатном. Даже если там будут миллионы таких сообщений.
Нужен реальный совет? Послушай что тебе говорят другие участники, и в частности Rsa97. Сделай структуру таблицы запиши туда пару-тройки тестовых сообщений и попробуй поменять статус своего сообщения, для начала.
Боишься о ресурсах(хотя навряд ли) замерь, сколько жрет памяти твой скрипт, приятно удивись и пили дальше свою систему.
Задавай грамотные вопросы, например: вот мой код (вставляешь свой код), почему он медленно работает./или почему не меняется статус.
Я должен для таких как вы расписывать все по действиям, так вы не поймете?
Это ты сюда пришел за советом, ты и будь добр расписать свою задумку, что бы тебе помогли и тебя поняли.
Если не хочется с базой данных возится, просто создавайте под каждого юзера отдельную папку и внутри папки уже в виде файлов храните сообщения. Один текстовый файл - одно сообщение.
Надим Закиров а как ты будешь отмечать прочитанное или не прочитанное письмо?
А поиск? Файлы далеко не самая удобная структура хранения для такой задачи....
Кирилл Горелов, в названии файла пишешь дату получения или отправки, а также любые другие отметки, которые необходимы. Например, прочитано сообщение или нет. Также можно хранить информацию непосредственно внутри текстового файла уже в виде JSON, но тогда придется перезаписывать файл, при добавлении отметок. Вариант с переименованием проще и надежнее.
Надим Закиров, не, я представляю как это сделать на файлах.
Я к тому, что не самый удобный вариант с файлами.... Особенно если записей будет мало, бд легко справится.
А так, да, вполне рабочий вариант можно сделать, никто не спорит)
Кирилл Горелов, рабочий да, но нужно обязательно проверять файлы после перезаписи, иначе возможна потеря данных. Функция file_put_contents() не дает гарантий сохранения файла, иногда она может сохранить пустоту, удалив все, чтобы было в текстовой файле (это из личного опыта), поэтому обязательно надо для него писать обёртку, которая будет проверять результат.
P. S. Это я не сколько для вас, сколько заметка автору вопроса)