对于我目前的项目,我们想要展示统计数据并对其进行排名。就我而言,我正在谈论艺术家的“收藏”,计算艺术家曲目的播放次数,显示艺术家曲目已添加到播放列表中的播放列表的计数......这些都是非常特定于域的问题,但这是我的问题的一个具体例子。
主要问题是我将返回按顺序返回的所有这些统计属性的结果集。
这里有些例子:
- 音乐登陆页面应显示最受喜爱的前 5 位艺术家。
- 音乐登陆页面应显示播放次数最多的前 5 首曲目。
我的第一个想法是确定我需要一个计算聚合列。由于我想对这些值进行排序,这意味着对于我想要排序的每个聚合,一个 CLUSTERED INDEX 将是最佳的。其次,由于 CLUSTERED INDEX 列上的 DML 在插入时不连续时可能代价高昂,因此我需要将此作为计划作业。
所以,对于艺术家最喜欢的统计数据,这是我想出的 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
如您所见,我需要为我想要跟踪的每个统计信息创建一个单独的表,否则我将不得不对不在 CLUSTERED INDEX 中的列进行排序。这看起来很丑陋的事实让我觉得我做错了。
我是否应该开始考虑集成 OLAP(我对 OLAP 多维数据集的经验很少)?或者也许是 Lucene?