Для моего текущего проекта мы хотим представить статистические данные и оценить их. В моем случае я говорю о «Избранности» исполнителя, подсчете времени воспроизведения трека исполнителя, отображении подсчета того, сколько плейлистов трек исполнителя был добавлен в плейлист ... Это все зависит от конкретной области. проблемы, но это конкретный пример моей проблемы.
Основная проблема заключается в том, что я собираюсь возвращать наборы результатов, которые возвращаются для всех этих статистических атрибутов.
Вот несколько примеров:
- На целевой странице Music должны отображаться 5 наиболее популярных исполнителей.
- На странице Landing Music должны отображаться 5 самых популярных треков.
Моя первая мысль определила, что мне нужен вычисляемый столбец совокупности. Поскольку я хочу упорядочить эти значения, это означает, что индекс CLUSTERED будет оптимальным для каждого агрегата, по которому я хочу упорядочить. Во-вторых, поскольку DML для столбцов CLUSTERED INDEX может быть дорогостоящим, если они не являются последовательными при вставке, мне нужно сделать это запланированным заданием.
Итак, для любимой статистики художника, вот DDL, который я придумал. Заметил, что мой T-SQL может быть ужасно отключен, но я думаю, что намерения ясны.
CREATE TABLE Stats_ArtistFavourites (
FavouriteCount INT DEFAULT 0,
ArtistId INT PRIMARY KEY NONCLUSTERED,
FOREIGN KEY (ArtistId) REFERENCES Artists
)
CREATED CLUSTERED INDEX IDX_Favourites
ON Stats_ArtistFavourites (FavouriteCount, ArtistId) DESC
Итак, как вы можете видеть, мне нужно было бы создать отдельную таблицу для каждой статистики, которую я хочу отслеживать, в противном случае мне пришлось бы заказывать столбцы ORDER BY, которых нет в индексе CLUSTERED. Тот факт, что это кажется уродливым, заставляет меня думать, что я все делаю неправильно.
Должен ли я начать думать об интеграции OLAP (у меня очень мало опыта работы с кубами OLAP)? Или, может быть, Lucene?