Это хороший способ отслеживать ежедневные просмотры? - PullRequest
2 голосов
/ 29 декабря 2011

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

id, post_id, day, month, year, count. 

Что означает для каждого поста 365 просмотров (в год). Это значит, если у меня 1000 постов. У меня было бы 365 000 записей в таблице просмотров. У нас есть несколько постов и подсчета. Иногда 10 постов в день.

Я поставил индекс на post_id, day, month и year.

Обеспокоен ли это, что это может привести к проблемам с производительностью дБ, так как таблица растет в геометрической прогрессии? Должен ли я быть обеспокоен? Или я должен быть в порядке?

1 Ответ

3 голосов
/ 29 декабря 2011

Я думаю, что вы делаете вещи для себя сложнее, чем вам нужно. Почему бы вам просто не определить таблицу следующим образом:

create table daily_views
( post_id int not null
, view_date date not null
, count int not null
, primary key (post_id, view_date)
, foreign key (post_id) references post(post_id)
)

Если у вас нет дочерней таблицы, которая ссылается на таблицу daily_views, нет особого преимущества в том, чтобы иметь идентификатор автоинкремента на daily_views. Фактически, вы бы просто потратили место на индекс, который менее полезен, чем естественный ключ, который равен post_id и view_date.

.

Нет смысла разбивать день, месяц и год на отдельные столбцы. Если вы храните дату в виде одного поля, это более эффективно, и вы можете легко агрегировать данные по любому диапазону дат, а не только по дням месяца, месяцам и годам.

Используя этот формат таблицы, вы оптимизируете используемое пространство и доступ к записям, что уменьшит ваши опасения по поводу производительности и масштабируемости. Что касается количества строк, которые вы генерируете, я не думаю, что вам нужно беспокоиться об этом. Многие базы данных имеют таблицы с миллионами строк. Вы просто хотите убедиться, что каждый ряд максимально компактен.

...