我对数据库内部有点了解。我之前实际上已经实现了一个小而简单的关系数据库引擎,使用磁盘上的ISAM结构和BTree索引以及所有类似的东西。这很有趣,也很有教育意义。我知道我更认识到仔细设计数据库模式和编写查询,因为我对RDBMS如何工作有了更多了解。
但是我对多维OLAP数据模型一无所知,而且我很难在互联网上找到任何有用的信息。
如何将信息存储在磁盘上?多维数据集包含哪些数据结构?如果MOLAP模型不使用表,列和记录,那么......什么?特别是在高维数据中,哪种数据结构使MOLAP模型如此高效? MOLAP实现是否使用类似于RDBMS索引的东西?
为什么OLAP服务器在处理即席查询时要好得多?可以在OLTP多维数据集中以毫秒为单位处理可能需要小时在普通关系数据库中处理的相同类型的聚合。该模型的基本机制是什么使这成为可能?
答案 0 :(得分:19)
我已经实现了一些模仿OLAP多维数据集所做的系统,这里有一些我们为使它们工作而做的事情。
1)核心数据保存在n维数组中,全部存储在内存中,所有密钥都是通过指向底层数组的指针层次结构实现的。通过这种方式,我们可以为同一数据提供多组不同的密钥。数组中的数据相当于事实表,通常它只有几个数据,在一个例子中,这是售出的价格和数量。
2)底层数组通常是稀疏的,所以一旦它被创建,我们就会删除所有空白单元以节省内存 - 大量的硬核指针算法但它有效。
3)由于我们有密钥的层次结构,我们可以很容易地编写例程来轻松地向下/向上钻取层次结构。例如,我们将通过查看月份键来访问年份数据,而这些键又映射到数天和/或数周。在每个级别,我们将聚合数据作为构建多维数据集的一部分 - 更快地进行计算。
4)我们没有实现任何类型的查询语言,但我们确实支持在所有轴上向下钻取(在我们最大的多维数据集中最多7个),这与用户喜欢的UI直接相关。
5)我们在C ++中实现了核心内容,但是现在我认为C#足够快,但是我担心如何实现稀疏数组。
希望有所帮助,听起来很有趣。
答案 1 :(得分:5)
本书Microsoft SQL Server 2008 Analysis Services Unleashed详细阐述了SSAS 2008的一些特殊性。它不是“这就是SSAS如何在引擎盖下工作”,但它非常具有启发性,特别是在数据结构方面。 (它对于确切的算法并不那么详细/具体。)作为这个领域的业余爱好者,我从本书中收集了一些东西。这就是SSAS MOLAP:
无论如何,这些都是SSAS中的一些因素。我不能说没有其他重要的东西。