教你在SQL Server 2000数据库中使用分区(4)
作者:Alizze 发布时间:2008-11-25 11:55:00
如何设计日期键?数据仓库最好对矢量表和事实表使用代理键,这是得到广泛认可的。对于按日期分区的事实表,建议的做法为使用 yyyymmdd 形式的“智能”整数代理键。作为整数,与 8 字节的 datetime 相比较,该键仅使用 4 个字节。许多数据仓库使用 datetime 类型的自然日期键。
如何确定分区的大小?尽管上面的示例使用年分区,但大多数系统会划分得更细致,例如月、星期或天。尽管我们会注意到用户查询通常是按月或周进行的,但最重要的因素还是系统总体规模和可管理性。您可能还记得,任何一个 SQL 查询最多可以引用 256 张表。对于维护多于一个月的数据的数据仓库,按天来分区的 UNION ALL 视图会超过该界限。作为一个好的规则,如果事实表仅按日期分区,那么最好按星期分区。
定义分区的范围
BETWEEN 语法最直接、可读性最强、执行效率最高。以下述形式的按月分区为例:
date_key < 19990101
date_key BETWEEN 1990101 AND 19990131
date_key BETWEEN 19990201 AND 19990229
...
date_key BETWEEN 19991201 AND 19991231
date_key > 19991231
请注意其中的第一个和最后一个分区:即使您认为决不会有数据进入这些分区,这仍是一个定义分区的好方法,这样可以覆盖所有可能的日期值。同时,请注意尽管 1999 年不是闰年,但二月分区仍覆盖 2 月 29 日。该结构使设计创建分区和约束的应用程序时不需要判断是否为闰年。
随着时间流逝,要合并分区吗?为了使活动分区的数量最小,创建分区应用程序时,数据库管理员可以选择将日分区合并为星期分区或月分区。我们将在下面有关填充和维护分区的一节中详细讨论这种方法。
关于如何按日期分区的详细讨论同样适用于采用其他可能的分区键时的情形。
数据加载:如果新的数据具有与其他矢量对齐的明显倾向,或者例如,如果每个存储或附件是由不同的系统分发的,这些就是自然的分区键。
多维数据集数据查询:尽管并没有技术原因要求以相同的方式对关系型数据库和分析服务多维数据集进行分区,但这是通常采用的做法。如果做出这个假设,维护应用程序将得以简化。这样,即使关系型数据库的存在仅是用于填充分析服务多维数据集,在选择分区键时也应该考虑到一般的查询模式。
命名约定:命名水平分区事实表的成员表的规则应该从分区设计自然地引出。为获得最大的通用性,请在标题中使用完整的分区开始日期:即使分区每年进行一次,[sales_fact_yyyymmdd] 也比[sales_fact_yyyy] 好。
如果数据库支持多个大小的分区,命名约定应该反映每个分区的时间范围。例如,月分区使用 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、获取模板表定义(通常为最新的分区);
猜你喜欢
- 一、前言:当数据库服务器建立好以后,我们首先要做的不是考虑要在这个支持数据库的服务器运行哪些受MySQL提携的程序,而是当数据库遭到破坏后,
- 我们平常用 IE 打开一个普通的本地 xml 文件,其形式通常都是如下图: 默认样式看得多了就不觉得有什么特别。但对于少接触 xml 的人来
- 一般我们是利用Session对象来防止通过“刷新”增加计数器的访问量的,看看下面的做法;<%If IsEmpty(Sessi
- 根据Nicholas的说法,有四种代码会拖慢脚本的运行,并最终导致脚本失控。分别是次数过多的同步循环、庞大的函数体、不恰当的递归和不合理的D
- 1,exists和in的理解exists:如果子查询中包括某一行,那么就为TRUE in:如果操作数为TRUE等于表达式列表中的一个,那么就
- ASP访问数据库的方式有哪些?在ASP中可以通过三种方式访问数据库:1、IDC(Internet Database Connec
- CSS入门很简单,规则不多,写法也比较灵活,因此也带来了很多有创意的写法。跟IE一样,很好的容错性,像《 边框样式写法总结 》所说的bord
- ASP实例代码,利用SQL语句动态创建Access表。留作参考,对在线升级数据库有用处.<% nowtime = now()
- Microsoft SQL Server 2008通过与Microsoft Office的深度集成,为所有人提供了可用的商业智能,以合适的价
- 在blueidea上看到movoin转的一个动态加载include文件代码,接着dnawo又修改了下,我用了dnawo修改后的版本,感觉挺好
- (1)、back_log:要求 MySQL 能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程
- 解决方法:1。 改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql
- 在CSS样式中,dl部分只是简单的把内外边距设置为0,dd部分有一个clear属性需要特别注意。当某个元素的属性设置float浮动时,它所在
- Window.Open详解 一、window.open()支持环境:JavaScript1.0+/JScript1.0+/Nav2
- 这是份总结,有不恰达的地方欢迎一同讨论联系方式 : 龙藏 longzang@taobao.com点击这里全幅围观或者点下面大图去 slide
- SQL Server有两种备份方式,一种是使用BACKUP DATABASE将数据库文件备份出去,另外一种就是直接拷贝数据库文件mdf和日志
- 这个弹出层的登录界面挺好看,很清爽所以转了过来给大家分享,要实现这个功能很简单:首先设计一个登录界面,使用css中的display=&quo
- 很久以前写过如何成为优秀的设计师,近半年来经常做设计评审,有很多感触,顺便写一点下来,我们的Blog也应该有更高的更新频率。言归正传,我认为
- 在使用SQL Server 的过程,中由于经常需要从多个不同地点将数据集中起来或向多个地点复制数据,所以数据的导出,导入是极为常见的操作.我
- 磁盘搜索是性能的很大瓶颈。这个问题在数据大量增长以至于无法使用有效的缓存时尤为明显。或多或少随即访问大数据库时,就必然会有至少一次磁盘搜索来