За последние 24 часа нас посетили 15507 программистов и 1645 роботов. Сейчас ищут 1096 программистов ...

Совет в написании чата, уменьшении нагрузки БД

Тема в разделе "PHP для новичков", создана пользователем Dmitr, 30 июн 2008.

  1. Dmitr

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

    С нами с:
    30 июн 2008
    Сообщения:
    2
    Симпатии:
    0
    Доброго вам время суток,
    Проблема такова, вообщем хочу написать чат на пхп.
    Слышал, что чат сделаный на пхп кушает 3-5Мб оперативки на человека,+ моментальное обновление не слишком красиво там делается... чат будет каждую секунду обращаться с запросом к серверу....

    Вообщем нужен Ваш совет, как это все красиво и аккуратно реализовать, и самое главное что бы нагрузка на БД была как можно меньше,
    заранее спасибо.
     
  2. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Не обязательно, если грамотно продумать то вовсе не обязательно
    Не знаю точных цифр, но можно стараться снизить её до минимума
     
  3. Dmitr

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

    С нами с:
    30 июн 2008
    Сообщения:
    2
    Симпатии:
    0
    Вот по этому, мне и нужны советы..[/quote]
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Сделай на файлах :)
    Вообще, пользователей и всякие конфигурации можно хранить в БД, но вот список сообщений ИМХО целесообразно хранить в файле.
     
  5. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Ты бы ещё предложил "убить себя ап стену", на форумах обычно помогать должны а не ржать над нубами...

    Это типа шутка такая ?
     
  6. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Vladson, почему? у меня так.. сообщения на файлах... а юзеры в БД :)
     
  7. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Dmitr
    IRC и веб-клиент на Джаве. Например, www.pjirc.com.
    Ну не сделаете вы удобнее/быстрее/экономнее/красивее при помощи ПХП/другого серверного языка.
     
  8. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Я всё-таки склоняюсь к мнению, что 10 раз за секунду прочитать файл быстрее, чем 10 раз в секунду подключаться к БД и делать запрос (конечно тогда надо чтобы в чате было хотя-бы 70 человек (тогда вероятность такой секунды вполне высока), и обновление списка сообщений у них было каждые 10 секунд)
    Если я чего-то не догоняю, объясни пожалуйста :)
     
  9. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    ммм..

    1) про постоянные соединения ты не слышал?:) да и мускул соединяется с базой почти мгновенно

    2) а если у тебя человек 300 активно чатится, то с записью в файл возникнет проблема. ну и приваты само собой тебе придется своим движком разбирать.. да и память у тебя может закончиться, файл то огромный выйдет

    3) а сообщения вообще можно хранить не в базе, а в memcache. Ничего более быстрого, чем обращение напрямую к оперативной памяти, не придумано.
     
  10. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Ты не догоняешь одного, данные надо не только читать но и выбирать из них нужную информацию, и БД справится с этим в 10 раз быстрее, и потратит в 10 раз меньше оперативки чем РНР

    Много есть разных вариантов тот-же APC например, но если они недоступны то просто MySQL будет вполне достаточно (всё равно активно используемые данные кешируются, так что проблем с быстродействием быть не должно)
     
  11. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Хм а разве кэширование сообщений не будет мешать обновлению? Кроме того, при записи файл можно лочить, а чтобы не разрастался - хранить в нем последние Н сообщений... Хотя конечно вариант не идеальный, имхо браузерный чат на РНР идеальным быть не может :)
     
  12. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    нет, не будет.
     
  13. lexa

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

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Предлогают не кэшировать сообщения, а отправлять их в память. Потом каждые n секунд/минут их собирать и слать в БД. Memcached пишет всё в оперативную память сервера.

    Э, а при чём тут PHP то? Ты не знаешь куда сообщения собирать, а виноват PHP.
     
  14. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    +100
    Полностью поддерживаю.
    (хотя не отрицаю что РНР далеко не самый экономный по ресурсам язык)
     
  15. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Всё, разобрался с memcached, спасибо.
     
  16. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    я бы записывал сперва в базу затем - в memcache. Все таки база - основное хранилище. Хотя, в большинстве чатов информация не столь ценна, и потери сообщений за несколько секунд / минут - не существенны...
     
  17. XRewancer

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

    С нами с:
    29 июн 2008
    Сообщения:
    20
    Симпатии:
    0
    Можно сделать проверку, на размер файла. Например если файл весит 2 мб, тогда очистить его.
     
  18. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    по поводу файлов... а как сделать защиту от двойнной записи в файл?? Что бы в один момент времени нельзя было дважды записать... и что будет с запросом если в тот же момент уже идет запись в этот файл... с защитой...
     
  19. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
  20. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Спасибо!