Приветствие! Писал я как то чат, и остановился над оптимизацией выдаче сообщений в чате. Долго мысля я придумал такую теорию, но как ее реализовать я не пойму, вернее хорошобы что бы было готовое решение ТАк вот сама теория: Мессаги помещаются в кеш и берутся оттуда, если появилась новая мессага кеш сравнивается с БД и вместе с кэшом выдается только измененная часть(кэш+новые мессаги), а не все с БД! Помогите пожалуйста реализовать!
Код (Text): $last_time = (int)get_file_contents('update_time.dat'); $buffer = get_file_contents('buffer.cache'); $query = "SELECT update_time, message, ... FROM messages WHERE update_time > $last_time ORDER BY update_time"; $result = mysql_query($query); while($row = mysql_fetch_assoc($result)) { $buffer .= "$row['message'] .... <br>\n"; } $last_time = $row['update_time']; file_put_contents('buffer.cache', $buffer); file_put_contents('update_time.dat', $last_time); что-то очень приблизительно вот так
Если реально хочешь оптимизировать, то надо избавляться от БД и использовать оперативную память для хранения сообщений.
хотя не так ) > unixtime - не есть гуд.. в ту же секунду могут добавляться записи уже после выборки так что пиши в файл последний уникальный id
Как вы считаете memcached для чата подойдет? Как я знаю он там при изменение БД, не дополняет кэш а заменяет сразу все!
Самый правильный вариант - это сетевой демон, что-то типа очень лёгкого http сервера. Сообщения хранишь в двунаправленном стеке. Отдаёшь и пишешь в один конец, удаляешь с другого. Как-то так.