Как сохранить количество кликов в день за более длительный период? - PullRequest
1 голос
/ 20 марта 2011

Мне нужно хранить статистику: количество кликов по некоторым элементам (более 1000 элементов). Мне нужно хранить клики ежедневно: например: день 1: 1234 кликов по элементу 1 день 2: 12312 кликов по пункту 1 день n: 13123 клика по пункту 1

У меня дешевый сервер, поэтому мне нужен оптимальный способ хранения всех этих данных. Позже мне нужно сгенерировать графики из этих данных

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 20 марта 2011

Почему бы не создать таблицу с 3 столбцами (вы можете добавить основной столбец, если хотите).

Мне кажется, вам нужно следующее:

  1. Столбец с именем, скажем, «день», с типом DateTime
  2. Столбец с именем, скажем, «itemId», с типом Int, то есть как вы узнаете, по какому элементу был нажат
  3. Столбец с именем, скажем, «клики», с типом Int, который будет вашим счетчиком

Итак, допустим, наша таблица была названа, «clickTracking».

Вы можете сделать следующее: «вставить в clickTracking set day = date_format (now (),«% Y-% m-% d »), itemId = 1, кликов = кликов + 1 при повторном обновлении ключа clicks = кликов + 1;"

Ниже приведен пример mySQL с первичным ключом.Мне легче работать с данными, если у меня есть поле auto_increment, но это не является обязательным требованием.

mysql> create table clickTracking (id int unsigned not null primary key auto_increment,day datetime not null, itemId int unsigned not null, clicks int unsigned not null);
Query OK, 0 rows affected (0.00 sec)

mysql> create unique index item on clickTracking (day,itemId);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> insert into clickTracking set day = date_format(now(),"%Y-%m-%d"), itemId = 1, clicks = clicks + 1 on duplicate key update clicks = clicks + 1;
Query OK, 1 row affected (0.00 sec)

mysql> insert into clickTracking set day = date_format(now(),"%Y-%m-%d"), itemId = 1, clicks = clicks + 1 on duplicate key update clicks = clicks + 1;
Query OK, 2 rows affected (0.00 sec)

mysql> insert into clickTracking set day = date_format(now(),"%Y-%m-%d"), itemId = 1, clicks = clicks + 1 on duplicate key update clicks = clicks + 1;
Query OK, 2 rows affected (0.00 sec)

mysql> insert into clickTracking set day = date_format(now(),"%Y-%m-%d"), itemId = 2, clicks = clicks + 1 on duplicate key update clicks = clicks + 1;
Query OK, 1 row affected (0.00 sec)

mysql> select * from clickTracking;
+----+---------------------+--------+--------+
| id | day                 | itemId | clicks |
+----+---------------------+--------+--------+
|  1 | 2011-03-20 00:00:00 |      1 |      3 |
|  2 | 2011-03-20 00:00:00 |      2 |      1 |
+----+---------------------+--------+--------+
2 rows in set (0.00 sec)

Есть несколько способов сделать это.Я предоставил одно возможное решение.Я предпочитаю этот метод, потому что он упрощает создание отчетов и имеет минимальный объем памяти на сервере.

Я бы порекомендовал создать дополнительную таблицу «items», которая соответствует itemId здесь.

2 голосов
/ 20 марта 2011

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

EDIT: если вы хотите, чтобы за каждый элемент в день отслеживался только клик, логическая структура была бы:

raport_date - date
item_id     - reference to table stored info about items
hits        - number of calculated hits

все зависит от того, какие отчеты / графики вам понадобятся

...