1. Dyadya Zed

    22.10.2009

    0 ↑
    0 ↓
    Здравствуйте!

    Есть задача написать внутреннюю статистику для сайта. Учитывать количество просмотров новостей, блогов, профиля пользователя, кол-во записей в блогах, комментариев и т.д.
    С развитием статистики, количество параметров будет расти (без фанатизма).

    Скорее всего это будут денормализованные поля. Где лучше хранить поля: в той же таблице или создать отдельную? Как сделать так чтобы сбор статистики не убил производительность?

    Как я понимаю, есть 2 подхода к сбору статистики: 1) пишем лог событий во временную таблицу, по крону ее разбираем, считаем нужные параметры. 2) собираем данные напрямую в реальном времени.

    Мне больше нравится второй вариант, но как не заблудиться в таком кол-ве параметров?

    Буду рад любым идеям.
    Спасибо
  2. marazmiki

    22.10.2009

    0 ↑
    0 ↓
    Меня сейчас, конечно, закидают помидорами, но самая точная (НМВЗ, конечно) статистика - это access.log :)

    Я бы статистику делал именно на основе его парсинга. Простой и не очень оптимизированный перловый скрипт парсит гигабайтные логи в считанные минуты. А ведь если они (логи) ротируются, то те жэе гигабайты будут на весьма и весьма загруженных проектах.

    (обновлено) Я невнимательный человек, оказывается. Про количество записей\блогов и комментариев не дочитал. Посыпаю голову пеплом :(
  3. master

    22.10.2009

    0 ↑
    0 ↓
    Мне кажется, что временная таблица здесь ни к чему.

    Нужна одна таблица, в которой будут храниться данные со столбцами:
    тип-параметр (количество блогов, например) - значение - датаивремя.

    Из такой таблицы можно будет, кстати, рисовать диаграммы с ростом данных во времени.

    А формировать таблицу, наверно, по крону. Хоть раз в минуту.
    Тут ведь запросы простые должны быть.
    Причем для каждого параметра будет своя функция, ну и пусть.
    И добавлять в будущем таких параметров можете сколько угодно.
  4. astur.net.ru

    22.10.2009

    0 ↑
    0 ↓

    Скорее всего это будут денормализованные поля.

    Это нормальный вариант, но это также и хрестоматийный пример на RC. Соответственно, нужно будет мудрить со всякими блокировками и транзакциями. Это не страшно, просто об этом стоит помнить. Как это скажется на производительности - зависит от конкретной бд.

    пишем лог событий во временную таблицу, по крону ее разбираем, считаем нужные параметры.

    Это намного быстрее. разбирать можно даже не по крону, а по обращению за статистическими данными. Конечно, это вариант для рабочей статистики, когда обращения за данными происходят намного реже считаемых событий. Если же статистика дёргается на каждой странице (счётчик-пузомерка), то выигрыш теряется.

  5. Anonymous

    22.10.2009

    0 ↑
    0 ↓
  6. Dyadya Zed

    24.10.2009

    0 ↑
    0 ↓
    @Anonymous: sanestat не подходит. Мне нужна статистика, больше нацеленная на подсчет внутренних объектов, чем просто посещений и парсинга логов.
  7. Lord Daedra

    24.10.2009

    0 ↑
    0 ↓
    Всё зависит от того, что именно надо ..

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

    Собственно, что именно вам в ней не хватает? Количество объектов на сайте можно собирать и кэшировать в какой-нибудь таблице скриптом по крону. Или собирать в режиме реального времени - в зависимости от того, как часто вы смотрите статистику и за какое время она вам нужна. Согласитесь, если в базе данных много записей и вы будете их дергать для создания отчетов всякий раз - это вызовет большую нагрузку на сервер. Логичнее скриптом из крона ночью обновлять. Разумеется, если вам нужна оперативная информация за последние 15 минут и вы весь день планируете следить за каким-то показателем, то так не получится..

    Если вы планируете сравнивать статистику чего-либо за разные временные интервалы и делать какие-нибудь интересные сложные запросы - сразу подумайте о внедрении простенькой OLAP.

    Например, есть Palo http://www.jedox.com/en/home/video.html или
    Pentaho Analysis Services: Mondrian Project + Pentaho Reporting

    Например, если вы владелец хабра и внедрите эту систему, она позволит вам получать красивые отчёты (включая диаграммы, графики), скажем, как сильно изменяется карма у женщин по ночам за период с 11 января 2005 по 16 июля 2009 года, которые состоят в друзьях у Васи Путечкина и имеют как минимум 100 комментариев по сравнению с мужчинами (за тот же период и с теми же условиями отбора). А потом, сравните с другим периодом, или, скажем сравните показатели по разным месяцам между собой...

    Вообщем, можно выдернуть абсолютно любую статистику по вашей базе. Ограничение тут пожалуй только такое: 1 поле - 1 значение (есть всякие ETL, чтобы получить данные в нужном виде и прочее, но это лишние заморочки, проще джангу заставить продублировать в нужном виде в отдельную связанную таблицу, к которой вы потом будете обращаться для получения данных для генерации отчетов/анализа).
  8. Lord Daedra

    24.10.2009

    0 ↑
    0 ↓
    То есть как бы три уровня:
    1. access.log
    2. google
    3. отчёты на основе ваших запросов к таблицам БД

    3 уровень занимается только тем, что не могут первые два
  9. которые состоят в друзьях у Васи Путечкина

    Ой, как бы политику не припаяли...

    Извините:-)

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.