OLAP Indexes
对于传统的分析数据库结构大致如下
OLTP数据库保持相互独立,然后将需要的数据传输到OLAP数据库。
OLAP Schemas
决策支持系统(DECISION SUPPORT SYSTEMS)
为组织的管理,运营和计划层面提供帮助的人通过分析历史数据来帮助人们做出有关未来问题和问题的决策的应用程序。
大数据的起源就是这儿。
STAR SCHEMA
一种数据库模式。
以沃尔玛的购物系统设计为例。中间的表是Fact表,每次购物刷一次单就会产生一个这样的记录。但是它自己本身的属性只有价格和数量,其余都是外键。
外键约束来自于其他表,这些表被称为Mentioned表。
这种模式设计非常类似一棵树。
SNOWFLAKE SCHEMA
和上一个模式是同样场景的另一种模式。
在上一个模式中,mentioned表只有一层,这个模式用了更严格的规范化(在这儿是BC范式),相当于将mentioned表变成了多层的表。
两个模式的比较
这两种模式的优缺点可以参考范式的规范程度深浅的优缺点。
- 规范化
- Snowflake schema占用较少的存储空间
- 非规范化数据模型可能会破坏完整性和一致性(integrity and
consistency violations)。
- 查询复杂度
- Snowflake schema需要更多的Join次数
- Star schema的查询速度一般来说会更快
索引
在Fact表上使用B+树索引会导致大量浪费的存储空间,如果这些值是重复的而且数量很低的话。
对于如下的两个表的声明
CREATE TABLE location_dim (
id INT PRIMARY KEY,
⋮
zip_code INT
);
CREATE TABLE sales_fact (
id INT PRIMARY KEY,
⋮
location_fk INT
REFERENCES location_dim (id)
);
我们需要进行这样的查询。
SELECT COUNT(*)
FROM sales_fact AS S
JOIN location_dim AS L
ON S.location_fk = L.id
WHERE L.zip_code = 15217
假设我们在location_dim的zip_code有一个UNclustering索引,使得我们可以用 O(