MySQL Table Setup на сегодня, вчера, ежемесячные логи - PullRequest
2 голосов
/ 02 апреля 2012

Я работаю над программой ведения статистики PHP / MySQL и пытаюсь найти для нее наилучшую структуру БД MySQL.

Есть часть, где посетители смогут видеть статистику за дату (т.е. последние 20 записей), но также смогут видеть общую статистику за сегодня, за вчерашний день, за последние 7 дней и за последние 30 дней.

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

Правильна ли моя логика для настройки двух таблиц ... одна для использования в качестве "сегодняшней" статистики, а другая для общего архива ... например:

todays_stats
ID
from_url
entry_date

overall_stats
ID
from_url
entry_date

Затем дважды вставлять для каждой новой записи, а каждую ночь сокращать todays_stats в задании cron?

Или есть более эффективный способ сделать это?

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Зависит от количества записей в вашей ежедневной статистике, от того, нужно ли удалять исторические данные и от того, сколько у вас индексов. Нам нужно удалить исторические данные и иметь 7 ~ 8 индексов с большим количеством статистических данных, поэтому мы разделяем данные на ежедневные таблицы и пишем хранимые процедуры для извлечения данных (последний день, последние 7 дней, последние 30 дней и т. Д.). Стол сбрасывает намного быстрее чем DELETE FROM table WHERE index=6-month-old-data

0 голосов
/ 02 апреля 2012

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

INSERT INTO `overall` SELECT * FROM `current`

запрос.Затем вы будете усекать текущую таблицу после успешного копирования данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...