|
|
|
Таблицы для статистики
|
|||
|---|---|---|---|
|
#18+
Необходимо создать для сайта систему статистики, в которой для любого периода и любого раздела можно узнать а) кол-во кликов б) со скольки уникальных хостов эти клики были совершены в) общее число уникальных хостов для всего периода Посоветуйте, как это все хранить в базе. Не а одну же все таблицу записывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.03.2006, 22:02 |
|
||
|
Таблицы для статистики
|
|||
|---|---|---|---|
|
#18+
Посмотрите, как решаются OLAP-подобные задачи в вашей БД. Первое, что приходит в голову - Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 01:37 |
|
||
|
Таблицы для статистики
|
|||
|---|---|---|---|
|
#18+
База данных MySQL. То есть вы предлагаете все хранить в одной таблице? Так в принципе сейчас и делается, но объем таблицы этой года через три будет весьма внушителен (миллионы записей), отчего тормозить будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 17:15 |
|
||
|
Таблицы для статистики
|
|||
|---|---|---|---|
|
#18+
Я планировал делать так: 1) в одной таблице хранить полную информацию о кликах (ip, раздел, дата-время) в определенный последний период (скажем, за последние 30 дней). Через указанный срок старые данные из таблицы удаляются. 2) в другой таблице хранить все уникальные ip пользователей 2) в третей таблице для каждой пары "день-раздел" хранить общее число кликов, со скольки хостов эти клики были произведены и число хостов, с которых в этот день на сайт зашли первый раз (их ip не находился в таблице ip-шек). Тогда при каждом клике значение соостветствующего поля увеличивается на единицу, число уникальных пользователей в текущий день увеличивается, в случае если в таблице а) не было за сегодня клика с данным ip число уникальных хостов увеличивается, если в таблице с ip данное ip еще не встречалось. Однако если мы, например. захотим посмотреть статистику по месяцам, то появятся трудности. Число кликов за месяц это сумма кликов по его дням, то же самое с уникальными (до этого не встречавшимися) хостами, но вот суммировать поля с общим числом хостов, откуда эти клики производились мы не можем. Ведь, например, если с одного и того же хоста каждый день заходили на сайт, то в поле хостов каждого дня месяца будет стоять 1. Фактически, заходил на сайт за весь месяц только один пользователь (пусть даже соверживший миллион кликов), но если просуммировать, получится 30, что действительность не отражает. Как поступить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 17:44 |
|
||
|
Таблицы для статистики
|
|||
|---|---|---|---|
|
#18+
Я совершенно не знаю MySQL, но вообще говоря не считаю миллионы записей непременным условием для торможения :) 1. Хранить полную информацию о кликах - в общем случае дорогое и имхо не особо нужное удовольствие. При тысяче кликов в день, конечно, непринципиально, но и не понятно зачем. 2. Неаддитивные показатели - большая и неприятная вещь. Я бы таки советовал хранить сводную таблицу типа показанной мной, и возможно на ее основе время от времени перерасчитывать вторичные таблицы типа показанной Вами - при расчете раз в сутки несколько минут торможения не особо принципиальны. 3. Альтернативно, можно подумать о той или иной форме партиционирования, например разбиении на таблицы по годам. 4. Крутиться с целью обойтись без общей таблицы можно, но это задача с экспоненциально возрастающей сложностью; чем больше хочется (а требования всегда растут), тем более задача начинает напоминать тришкин кафтан, достаточно скоро оказывается, что уже не разрабатывается новое, а постоянно судорожно собирается разваливающееся старое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2006, 18:30 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=33577950&tid=1545388]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
145ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 207ms |
| total: | 420ms |

| 0 / 0 |
