За последние 24 часа нас посетили 17618 программистов и 1588 роботов. Сейчас ищут 1425 программистов ...

Ведение статистики количества просмотренных страниц

Тема в разделе "Решения, алгоритмы", создана пользователем pr0n1x, 2 июн 2015.

  1. pr0n1x

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

    С нами с:
    30 мар 2006
    Сообщения:
    486
    Симпатии:
    2
    Адрес:
    Киев
    Здравствуйте.
    Подскажите, может кто сталкивался с такой проблемой.
    Есть сайт, со средней нагрузкой, приблизительно 25000-30000 посещений в сутки.
    Нужно вести статистику количества просмотренных страниц и отображать их пользователю.
    Сейчас эта функция реализована следующим образом:
    Перед каждый запросом на открытие страницы идет запрос в базу данных UPDATE который увеличивает счетчик (определенное поле) на +1, потом идет второй запрос SELECT где получаем все нужные данные и показываем их пользователю.
    Так как тип таблицы MYISAM при каждом запросе UPDATE происходит блокировка базы, эта операция при средней нагрузке довольно сильно грузит систему.
    Как можно решить эту проблему?

    Может есть какой-то сервис, который просто показывает счетчик для каждой страницы или может количество просмотренных страниц писать не в базу, а в файл?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а почему бы мускул рэдисом не заменить?
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.108
    Симпатии:
    1.243
    Адрес:
    там-сям
    По тем же причинам, по которым вообще редис не заменяет мускул: он не SQL.

    Добавлено спустя 48 секунд:
    А в статистике важна гибкость отчетов. Типично сиквельная задача.
     
  5. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    А ещё лучше миллион китайцев нанять и дать им по кнопке? ;)

    Поменять дижок на InnoDB, настроить - потянет 100 млн. update+select в сутки на поток на среднем сервере.
     
  6. mirosas

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

    С нами с:
    17 июл 2015
    Сообщения:
    236
    Симпатии:
    5
    Если отказаться от запросов UPDATE, заменив их на систему из INSERT+DELETE+OPTIMIZE, то можно заметно ускориться в некоторых случаях.

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

    Еще я бы рекомендовал отказаться от VPS/VDS и выделенных серверов с дешевыми SATA дисками. Вместо них лучше хороший хостинг с SAS дисками (не рекламирующий что у него SAS диски), там вполне можно вытягивать 200 тысяч UPDATE в сутки.