За последние 24 часа нас посетили 30474 программиста и 1809 роботов. Сейчас ищут 820 программистов ...

Теория правильного кэширования

Тема в разделе "Прочие вопросы по PHP", создана пользователем eaglenix, 28 окт 2008.

  1. eaglenix

    eaglenix Активный пользователь

    С нами с:
    12 июл 2006
    Сообщения:
    47
    Симпатии:
    0
    Приветствие!
    Писал я как то чат, и остановился над оптимизацией выдаче сообщений в чате. Долго мысля я придумал такую теорию, но как ее реализовать я не пойму, вернее хорошобы что бы было готовое решение :D

    ТАк вот сама теория: Мессаги помещаются в кеш и берутся оттуда, если появилась новая мессага кеш сравнивается с БД и вместе с кэшом выдается только измененная часть(кэш+новые мессаги), а не все с БД!
    Помогите пожалуйста реализовать!
     
  2. kostyl

    kostyl Guest

    eaglenix
    главное чтобы время сравнения было меньше времени выборки, что является сомнительным
     
  3. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    Код (Text):
    1.  
    2. $last_time = (int)get_file_contents('update_time.dat');
    3. $buffer = get_file_contents('buffer.cache');
    4.  
    5. $query = "SELECT update_time, message, ... FROM messages WHERE update_time > $last_time ORDER BY update_time";
    6. $result = mysql_query($query);
    7. while($row = mysql_fetch_assoc($result))
    8. {
    9.     $buffer .= "$row['message'] .... <br>\n";
    10. }
    11. $last_time = $row['update_time'];
    12.  
    13. file_put_contents('buffer.cache', $buffer);
    14. file_put_contents('update_time.dat', $last_time);
    что-то очень приблизительно вот так
     
  4. eaglenix

    eaglenix Активный пользователь

    С нами с:
    12 июл 2006
    Сообщения:
    47
    Симпатии:
    0
    file_get_contents!
    Ну мысль понятна спасибо, буду развивать.
     
  5. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Если реально хочешь оптимизировать, то надо избавляться от БД и использовать оперативную память для хранения сообщений.
     
  6. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    хотя не так )

    > unixtime - не есть гуд.. в ту же секунду могут добавляться записи уже после выборки
    так что пиши в файл последний уникальный id
     
  7. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    и от файлов за одно кстати

    именно
     
  8. eaglenix

    eaglenix Активный пользователь

    С нами с:
    12 июл 2006
    Сообщения:
    47
    Симпатии:
    0
    Как вы считаете memcached для чата подойдет?
    Как я знаю он там при изменение БД, не дополняет кэш а заменяет сразу все!
     
  9. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Самый правильный вариант - это сетевой демон, что-то типа очень лёгкого http сервера. Сообщения хранишь в двунаправленном стеке. Отдаёшь и пишешь в один конец, удаляешь с другого. Как-то так.
     
  10. Sergey89, ты щас с кем разговаривал? )
     
  11. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    пока что с автором топика)
     
  12. eaglenix

    eaglenix Активный пользователь

    С нами с:
    12 июл 2006
    Сообщения:
    47
    Симпатии:
    0
    Ну с сокетами я еще не знаком!)
     
  13. kostyl

    kostyl Guest