01 数据项标准化 大部分企业仍有一些系统是独立建设,独立建模,不能很好地复用模型。模型不能复用的最大障碍是各系统对于同一业务概念,命名存在不相同的情况,或者虽然命名相同但数据类型定义不相同的情况。 例如对于一个实体中的“币种”属性,这个属性存储的是什么样的数据?可能各系统不同,有的系统存储币种是2位数字代码,有的存储国标的3位数字代码,有的存储国标的3位字母代码,有的可能直接存储币种的中文名称。这就是所谓“同义不同字,同字不同义,义同字不同,字同义不同”的状况。 这种状况给各系统的开发人员理解模型和系统间数据消费带来了困惑,因此,减少开发人员之间的沟通成本,提升模型复用的第一步就是进行数据项的标准化,使之命名规范、定义精确、业务含义明确。 一个数据项通常由多个英文单词组成,因此需要将英文单词的缩写进行标准化。英文缩写的标准化是数据项标准化的基础。 2、数据项类别管理 目前,各系统物理模型中各数据项的命名或者没有规范,或者有规范也仅仅是在该系统内使用,从其名字上无法准确判断其存储的数据的类型,例如前文提到的币种(CCY)这个数据项,从其名字难以看出存储的是什么类型的数据,因此在标准化数据项的同时需要对数据项进行分类。 在新建数据项时,必须选择其所属的数据项类别,并且数据项类别是数据项名称的前缀。对于存量的各应用的数据项,应指定这个数据项的数据项类别,但不强制数据项类别作为数据项的前缀。 通过分析研究,数据项类别可分为如下的12类: 3、敏感信息管理 在现有的数据模型设计过程中,并不标识一个字段是否保存敏感数据,因此从物理模型中并不能识别该表是否保存有敏感数据,从而提前做好应对措施。 因此在数据项设计时,应考虑敏感数据的管理。数据项应有三个跟敏感数据相关的属性:脱敏标识、脱敏级别和脱敏函数。 在进行表设计时,如果表关联了有脱敏标识的数据项,则在物理模型中很容易识别,因此可以在设计阶段考虑对存储的敏感数据的处理方式。 4、数据项标准化 标准化的数据项与数据标准、数据项取值、数据项类别、英文缩写并不是各自孤立的,而是相互有联系的。例如币种代码名称为COD_ISO_CCY,其中COD表明是编码类的,后面的英文缩写ISO表明是国际标准,CCY表示货币,整个数据项的含义就是国际标准货币编码。 标准化的数据项与数据标准、数据项取值、数据项类别、英文缩写的关系如下图: 5、数据项取值标准化 目前,各系统对于同一业务含义的数据项的取值,并没有进行统一。同一业务含义的数据项,取值范围不同的话,给后续系统间的数据交换带来了困扰。因此数据项标准化的同时,需要对其取值进行标准化。 如果企业有已发布的企业数据标准,在设计和标准化数据项时,将这些企业数据标准以基础数据项取值的方式进行管理。若一个基础数据项的取值范围是某个数据标准所规定的取值范围,则这个基础数据项与承载这个数据标准的数据项取值进行关联,通过这种方式实现企业数据标准的落地。 应用级的一般数据项并不能直接关联基础数据项取值。应用的表中字段若想引用基础数据项取值,只有如下两个方式:
02 数据模型管理与设计 应用系统模型设计人员在构建应用级逻辑数据模型(C级)时,应按如下流程进行设计:
物理模型必须源自一个本应用的应用级逻辑模型。在设计物理模型时需要对表的管理参数、表的属性及存储参数进行全面的考虑和设计。若已有所需的物理模型,则可以在原有的基础上进行修改。 在设计物理模型时,需要输入表使用方式、表的清理策略、表的备份策略、表数据预期增长数、是否热表等信息,满足中心对表的管理需求。同时还要输入与表的性能密切相关的物理属性信息和物理存储信息,例如是否VOLATILE表、APPEND标识、表组织方式等表属性信息,首次分配空间大小、二次分配空间大小、PCTFREE和FREEPAGE、PADDED等物理存储参数信息。表的属性信息和物理存储参数信息将会成为投产脚本的一部分。 因此一个应用的物理模型设计流程如下:
在传统的数据模型设计中,主要考虑物理模型的表结构、主键的设计,从其数据模型设计中看不到运维相关的信息,例如表的组织方式、表是否清理和清理策略相关信息、是否备份及备份策略相关信息、表访问方式信息、物理存储相关信息等。但是这些信息跟表的访问速度,系统的整体性能息息相关,通常一个表的访问速度下降会直接影响到整个系统的响应速度和整体吞吐量。 对于在运行时,新产生的数据都是插入表的末尾的,不会插入已有数据中间的表,可以指定该表的APPEND属性为YES,让数据库直接把数据插入表的末尾,避免从已有数据块中查找可用空闲空间,从而加快该表数据的插入速度。 对于表数据大起大落,并且对该表的数据的访问方式总是通过主键访问的表,对这种类型表,通过主键访问是最优的。但在程序投产时,程序执行BIND时,由于该表几乎没有数据,数据库优化器认为全表扫描是最优的方式,就会给程序BIND为全表扫描。 对于这种类型的表,由于全表扫描不是最优的访问方式,因此在该表数据较多时,全表扫描会严重影响访问性能。因此可以设置该表的VOLATILE属性为YES,这可以强制数据库系统总是通过主键访问该表,即便对于非BIND的程序的SQL语句,数据库系统也直接按主键进行访问,避免分析这些SQL的执行计划的开销,从而提高访问速度。 表的组织方式,通常有行组织、列组织和哈希组织方式。表的组织方式,对表的访问性能有较大的影响。联机交易系统通常按行组织数据,联机分析系统按列组织数据。对于联机交易系统中,数据量较大,表数据不增长或增长缓慢,且主要是按照主键访问的表,除了传统的按行组织数据外,还有一种更好的哈希组织方式。 访问哈希组织数据的表时,DBMS先根据主键计算出一个哈希值,根据哈希值直接定位记录的物理地址,就可以访问一条记录,只需要两个GETPAGE操作,比起传统的通过主键索引访问表的方式,大大减少了GETPAGE次数,提升了表的访问性能。 下面几个问题跟表结构无关,但在进行物理模型设计时,提前进行考虑,并做好设计,才会从容应对生产运维问题。
对于主要是批量访问的表,则可以考虑给表多建几个索引以提升批量程序的性能,但如果主要是联机访问的表,过多的索引则会影响联机交易的性能,因此给表建立索引时,提前考虑表的访问方式很重要。 对于联机访问并发度高的热表,如果其数据修改频率较低,且数据增长量缓慢,如果这个表还满足表数据较少,例如少于一万条,则可以考虑将该表设计为内存表,让DBMS系统将该表数据都加载到缓冲区中,并且不会被替换出缓存,通过减少对物理磁盘的访问次数,来提升访问性能。 表中的数据如果仅仅保存保证满足业务运行所需的数据,将不需要的数据从表中清除,让表轻装上阵,也会提升表的访问性能。如果数据可以清理,则要考虑清理频次,如果每天产生的数据量较多,则可以考虑每天进行清理一次。 如果每天产生的数据不多,也可以考虑其它的清理频率,例如每月清理一次。如果表中数据不能清理且表中数据较多,则可以考虑进行分区或者分表。 对于表中的业务数据,如果是相对固定,即便丢失也对业务的影响较小,并且也很容易恢复,例如币别表、国别表等数据,则可以不备份表中数据。若表中数据丢失,会对业务产生较大影响的表的数据,则应考虑合适的备份策略和备份周期。 表空间参数值设置的是否合适,也会影响表的访问性能。对于表数据很大的表,单个分区的表可能满足不了性能,就需要考虑分区。如果分区,则需要考虑如何分区,确定分区键字段,分区个数,每个分区的大小等等。 表的数据增量方式和聚簇索引字段的顺序,也会影响表空间的参数设置。若增加的表数据主要增加在表的末尾,则可以考虑将FREE PAGE的参数设置成较大的值,将PCTFREE参数的值设置为较小的值,以充分利用存储空间。 若表增长的数据是分散在表中的,则可以考虑将FREE PAGE的参数设置成较小的值,将PCTFREE参数的值设置为较大的值,减少对表进行REORG的操作,以保证DBMS在预取数据时,尽可能一次将相关数据都读入内存,减少磁盘IO次数,提升表访问性能。 建立表空间时,还需考虑磁盘分配的策略。对于表数据增加很快的表,可以考虑将每次分配的空间设置为较大的值,以避免频繁的分配空间操作。对于表数据增长缓慢的表,可以将每次分配的空间设置为较小的值,以避免空间浪费。 同时表空间的页大小也会影响表的性能。若表的记录很大,例如达到1.5KB,若将页大小设置为4K则不合适,因为每页数据存储的记录数太少,会让系统访问该表时产生较多的GETPAGE操作。 若表的记录很小,才几十字节,将页大小设置为8KB,也可能会有性能问题,因为一页中存储过多的记录,在某些数据库中也会由于产生锁竞争而影响性能。 在传统的物理数据模型设计中,可能只会考虑建立表的主键索引。在数据架构管理系统中,在对运维参数进行管理之后,会让设计人员在考虑表的运维参数的过程中,若发现对表有针对性的新的索引需求,则在模型设计时,提前设计相应的索引。 并且表数据的增量大小、聚簇索引字段的顺序、表空间存储参数的设置,都是互相影响的,因此需要综合权衡考虑。 目前进行数据模型设计时,不能使用工具进行图形化的ER图设计,只能在系统中录入表的属性信息、表的主键和索引信息,对于表之间的关系,并不能直观地展现出来。 如果一个模型中表的数量较少,尚能通过描述信息理解表之间的关系,若模型中表的数量较多,通过描述信息来梳理表之间的关系,很容易迷失在表之间的关系之中,让人对该模型有一种只见树木不见森林的感觉,而且不能图形化表示的数据模型让数据模型的使用人员难以对模型产生一种总体上的理解,并且在后续查漏补缺时也不易发现遗漏的表之间的关系。 因此在进行数据模型设计时,需要系统提供一个图形化的ER图设计工具。使用ER图设计工具,可以很方便地在模型中建立实体和实体的属性,标识实体的主键,建立实体之间的主外键关系,并且可以标识关系的类型(1:1,1:n或m:n)。 使用ER图工具来设计模型,既可以提高设计的效率,也很容易让模型使用人员理解模型,降低了设计人员与使用人员的沟通成本,提高总体的工作效率。即便后续需求发生变更,需要调整模型时,也很容易把模型中相关的表一起修改,避免了目前修改模型时,由于修改一处表结构而遗漏对相关的表结构的同步变更而反复修改模型的问题。 03 总结与展望 |
|
来自: 新用户16606013 > 《数据仓库建设》