扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:tech.ddvip.com 来源:天新网 2008年4月28日
关键字: 数据库 Mssql SQL SQL Server
关于如何按日期分区的详细讨论同样适用于采用其他可能的分区键时的情形。
数据加载:如果新的数据具有与其他矢量对齐的明显倾向,或者例如,如果每个存储或附件是由不同的系统分发的,这些就是自然的分区键。
如果数据库支持多个大小的分区,命名约定应该反映每个分区的时间范围。例如,月分区使用 sales_fact_20001101m,日分区使用 sales_fact_20001101d。
成员表的名称对通过视图访问数据的最终用户是隐藏的,因此成员表的名称应该面向执行维护的应用程序。
下行数据流多维数据集的分区
如果关系型数据库仅用于支持分析服务多维数据集,就不必定义 UNION ALL 视图。这种情况下,该应用程序就不会受 256 个表的限制,但是建议您不要以这种无法定义 UNION ALL 视图的方式来对关系型数据仓库进行分区。
管理分区事实表
假设分区是按日期进行
元数据
稳定的分区管理系统应由元数据驱动。只要确保能够编程访问元数据,就可以把元数据存储在任何位置。大多数数据仓库系统使用在数据仓库 SQL Server 或 Microsoft SQL Server Meta Data Services 上定义的自定义元数据表。
不论元数据的存储机制是什么,元数据的内容必须包括每个分区的以下信息:
分区名称;
1、创建分区的日期;
2、分区中数据的日期范围;
3、分区开始联机的日期(加入 UNION ALL 视图);
4、分区不再联机的日期(从视图中丢弃);
5、丢弃分区的日期。
作为数据仓库整个管理系统的一部分的其他元数据表,应该跟踪何时以及有多少数据被加载到每个分区。
创建新分区
分区管理系统的首要任务是创建新分区。应该安排周期性运行的任务,来创建用作下一个分区的新表。
执行该任务有许多有效的方式。建议的方法为使用 SQL-DMO(分布式管理对象)来创建与现有分区具有相同结构和索引的新表,但新表具有新的表名、索引名、分区键约束定义、文件组等等:
1、获取模板表定义(通常为最新的分区);
2、修改表和索引的 Name 属性,检查约束 Text 属性和其他属性;
使用 ADD 方法对表进行实例化,使用智能命名约定,用几行代码即可完成这项任务。
填充分区
相反,数据仓库应用程序的设计必须使每一个周期都可以把数据快速加载到相应的目标表。如果数据分阶段应用程序在 SQL Server 数据转换服务 (DTS) 中实现,动态属性任务可以很容易地更改数据泵任务或批量插入任务的目标表的名称。
只要新分区没有加入 UNION ALL 视图,就不需要在系统停机时间加载数据。
数据仓库分阶段应用程序应该设计为可以处理不属于当前分区的新数据。如果数据仓库加载进程不是在一个夜晚完成,就可能发生这种特殊情况。其他系统要处理不断到来的旧数据。系统的设计必须考虑到这些例外情况的可能性、频率和数据量。
如果旧数据以足够低的量到达,最简单的设计就是使用可更新的 UNION ALL 视图来加载所有不属于当前分区的数据。
定义 UNION ALL 视图
一旦渐变加载成功完成,就必须重新修订 UNION ALL 视图。仍然建议使用 SQL-DMO 完成本任务:使用 ALTER 方法更改 VIEW 对象的 TEXT 属性。从上面所述的元数据表中导出视图定义中要包括的分区列表是最佳途径。
合并分区
表面上看来,将若干分区合并至单个较大分区似乎是多余的。不过,对于日加载量巨大同时加载窗口很小的数据仓库,通过下列措施可以显著改善加载性能:
1、用要加载的数据创建文本文件,按簇索引的顺序排序;
2、批量加载到空的日分区;
3、创建所有的非簇索引。
通过重新创建 UNION ALL 视图,使新分区保持联机。
通过自日分区插入、重新创建索引和重新生成 UNION ALL 视图,每周创建和填充新的周分区。然后就可以丢弃日分区。
数据变得陈旧后就移动至周甚至月分区,这样更多的分区可以联机保留在 UNION ALL 视图中。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者