JIEXA
Новичок
Учет статистики, как лучше организовать при большой нагрузке
Имеем таблицы MySQL тип innoDB
stat_tizers
stat_id
stat_date
tiz_id
tiz_hits
tiz_clicks
stat_sites
stat_id
stat_date
site_id
site_hits
site_clicks
Есть скрипт, скажеж view.php
К котрому может быть до 1 тыс обращений в секунду.
При его запуске должно в таблице stat_tizers обновится значение поля tiz_hits на +1 у нескольких полей. (все зависит от того, сколько тизеров запрошено)
И у таблицы stat_sites должно обновится значение site_hits на +N (N - кол-во запрошеных тизеров)
Покажу запрос для наглядности
UPDATE stat_tizers SET tiz_hits=tiz_hits+1 WHERE stat_date = NOW() AND tiz_id IN ('4', '7', '9')
UPDATE stat_sites SET site_hits=site_hits+3 WHERE stat_date = NOW() AND site_id = '1'
Также есть скрипт clicks.php
К нему обращения происходят намного реже, не больше 50-100 в секунду
Его действия примерно теже, что и у view.php, только обновляет он поле site_clicks
Суть вопроса:
При таком большом кол-ве запросов, серверу будет трудновато.
Поэтому я думаю над тем, как можно увеличить производительность.
Есть вариант 1.
Создать копии этих тоблиц, но уже с типом MEMORY и раз в минуту синхронизировать их скриптом, который будет запускаться по крону
Тут тоже есть свои минусы - в момент синхронизации, в MEMORY таблицы нельзя будет писать, так как иначе нарушится целостность данных.
Вариант 2.
Писать тупо лог в 2 файла
В первый - по четным минутам, во второй по нечетным
И раз в четную минуту запускать скрипт, который бует парсить лог нечетной минуты, а в нечетную наоборот парсить лог четной минуты.
То есть пока один парсится, в другой инфа сохраняется.
Решение мне впринципе нравится, но с маштабированием его будут проблемы, на несколько серверов данную операцию не расскидаешь.
Вобщем я в тупике. Ребят, подскажите, может я не с той стороны смотрю на вопрос. Как лучше реализовать это?
Заранее огромное спасибо.
Имеем таблицы MySQL тип innoDB
stat_tizers
stat_id
stat_date
tiz_id
tiz_hits
tiz_clicks
stat_sites
stat_id
stat_date
site_id
site_hits
site_clicks
Есть скрипт, скажеж view.php
К котрому может быть до 1 тыс обращений в секунду.
При его запуске должно в таблице stat_tizers обновится значение поля tiz_hits на +1 у нескольких полей. (все зависит от того, сколько тизеров запрошено)
И у таблицы stat_sites должно обновится значение site_hits на +N (N - кол-во запрошеных тизеров)
Покажу запрос для наглядности
UPDATE stat_tizers SET tiz_hits=tiz_hits+1 WHERE stat_date = NOW() AND tiz_id IN ('4', '7', '9')
UPDATE stat_sites SET site_hits=site_hits+3 WHERE stat_date = NOW() AND site_id = '1'
Также есть скрипт clicks.php
К нему обращения происходят намного реже, не больше 50-100 в секунду
Его действия примерно теже, что и у view.php, только обновляет он поле site_clicks
Суть вопроса:
При таком большом кол-ве запросов, серверу будет трудновато.
Поэтому я думаю над тем, как можно увеличить производительность.
Есть вариант 1.
Создать копии этих тоблиц, но уже с типом MEMORY и раз в минуту синхронизировать их скриптом, который будет запускаться по крону
Тут тоже есть свои минусы - в момент синхронизации, в MEMORY таблицы нельзя будет писать, так как иначе нарушится целостность данных.
Вариант 2.
Писать тупо лог в 2 файла
В первый - по четным минутам, во второй по нечетным
И раз в четную минуту запускать скрипт, который бует парсить лог нечетной минуты, а в нечетную наоборот парсить лог четной минуты.
То есть пока один парсится, в другой инфа сохраняется.
Решение мне впринципе нравится, но с маштабированием его будут проблемы, на несколько серверов данную операцию не расскидаешь.
Вобщем я в тупике. Ребят, подскажите, может я не с той стороны смотрю на вопрос. Как лучше реализовать это?
Заранее огромное спасибо.