DB2面向OLTP环境的物理数据库设计:数据类型

为一个数据库设计表,这涉及到选择一个合适的">数据模型和数据类型。数据类型是一个列属性定义,它指示了应该将什么类型的数据存储在一个表列中。 根据所存储的数据的性质小心选择正确的数据类型,这有助于最大限度地减少存储需求。

最大限度地减少数据行消耗的空间,这有助于将更多行放在一个数据页面中。如果一个数据页面中有更多的行,那么这样可以提高缓冲池命中率,减少 I/O 成本,并实现更好的查询性能。DB2 支持各种内置的数据类型和用户定义的数据类型 (UDT)。UDT 是内置数据类型的扩展,可以将它创建为 distinct、structured、reference 和 array。

数据类型选择

在为 OLTP 工作负载设计物理数据库时,选择适当的数据类型非常重要。通常情况下,可以使用缩写或直观的代码来表示列中较长的值,或轻松地识别代码所代表的内容。例如,代码是 OPN、CLS 和 INA 的帐户状态列,代表可以打开、关闭或失效的帐户。从查询处理的角度来看,数字值比字符值的处理效率高一些,在联接两个值的时候尤其如此。因此,使用数字数据类型可以提供多一点的好处。 虽然使用数字数据类型可能意味着更难以解释存储在列中的值,但在适当的地方存储的数字值定义可以供用户检索,例如:

 在 Rational® Data Architect 等数据建模工具中,会将该定义存储为一个域值,通过使用元数据报告,可以将这些值发布给更大型的团队。

 将值的定义存储在数据库的一个表中,可以在该表中将定义与值联接,从而提供上下文,比如名称或描述。存储列值及其描述的表通常被称为引用表或查找表。对于大型数据库,在表中存储定义可能会导致引用表扩散。虽然在您选择对存储代码值的每一列都使用引用表的情况下,这是事实,但您可以将引用表合并成一个或几个引用表。通过这些整合的引用表,您可以创建虚拟视图,用它们表示每一列的查找表。

CHAR 数据类型与 VARCHAR 数据类型

一般原则是,如果每行的列长度都有很大差异,那么应使用 VARCHAR 数据类型,以便尽量减少页面中每一行所使用的空间。

DECFLOAT 数据类型

浮点数据类型(REAL、DOUBLE 或 FLOAT)代表实数的近似值。DECIMAL 数据类型代表包含了一个隐含小数点的组合式十进制数。 对于银行和金融应用程序,数字数据的精度和准确性非常重要,这些数据类型可能无法满足应用程序的需要。对于这样的应用程序,DECFLOAT 是合适的数据类型。 DECFLOAT 代表一个有小数点的 IEEE 754r 十进制浮点值。小数点的位置存储在每个十进制浮点值中。它可以表示最多 34 位。可以用两种方式来定义列:

 将列定义为 DECFLOAT(16),获得 16 位的精度,其指数范围是 10-383 到 10+384。
 将列定义为 DECFLOAT(34),获得 34 位的精度,其指数范围是 10-6143 到 10+6144。

大对象 (LOB) 数据类型

大对象 (LOB) 指任何 DB2 大对象数据类型。这些类型包括二进制大对象 (BLOB)、字符大对象 (CLOB) 和双字节大对象 (DBCLOB)。在 Unicode 数据库中,您可以使用国际字符大对象 (NCLOB) 作为 DBCLOB 的同义词。 LOB 数据类型存储大量非结构化数据,如文本、图形图像、音频和视频剪辑,它们都不能以 CHAR、VARCHAR、GRAPHIC 或 VARGRAPHIC 等常规字符或图形数据类型进行储存。

BLOB 数据类型与 CLOB 数据类型

在存储不需要与代码页面关联的二进制数据时,可以使用 BLOB 数据类型。可以使用 CLOB 数据类型来存储必须与代码页面有关联并能从一个字符集转换成另一个字符集的大文本数据。如果在 CLOB 中存储大文本数据,那么您可以在查询中选择文本,并在 CLOB 列上建立索引,从而加快查询的访问。

在表行中存储 LOB 和内联 XML 列

LOB 和 XML 列的存储位置一般与引用它们的表行不同。如果 LOB 或 XML 列被频繁访问,并且它们的数据可以与其余的列一起放在数据页面中,那么用表行存储内联数据可以提供更好的性能。为 LOB 或 XML 列存储内联数据,可以减少 I/O 并简化数据访问和数据的操纵。您可以选择将低于指定大小阈值的 LOB 或 XML 数据包括为内联数据。然后,可以将这些 LOB 或 XML 列作为基表行的一部分进行操纵,这可以简化在缓冲池间移动等操作。此外,如果启用了行压缩,内联数据将具有使用行压缩的资格。CREATE 和 ALTER TABLE 语句的 INLINE LENGTH 选项使小于指定内联长度的 LOB 或 XML 数据可以包含在基表行中。

下图显示了基表行内的 LOB 描述符,它们是 LOB 位置的引用:

图 2. 基表行内的多个 LOB 描述符指向不同 LOB 位置上的 LOB

下图说明了 LOB 如何作为内联数据包含在基表行中:

图 3. 包含在基表行内的小 LOB

最佳实践

使用以下设计最佳实践来选择数据类型:

 考虑到以下因素时,始终尝试使用数字数据类型,而不是使用字符数据类型:
– 在创建包含布尔值(“YES”或“NO”)的列时,使用 DECIMAL(1,0) 或类似的数据类型。使用 0 和 1,而不是“N”或“Y”作为列的值。
– 使用整数来表示代码。
– 如果一个列中少于 10 个代码值,则适合使用 DECIMAL(1,0) 数据类型。如果有超过 9 个代码值要存储在列中,则使用 SMALLINT。
 在 InfoSphere Data Architect 等数据建模工具中将数据定义存储为一个域值,其中的值可以通过使用元数据报告来发布。
 在数据库的表中存储值的定义,其中的定义可以与值联接,以提供上下文,如“text name”或“description”。

时间: 2014-12-19

DB2面向OLTP环境的物理数据库设计:数据类型的相关文章

DB2面向OLTP环境的物理数据库设计:数据库操作和维护

在数据库系统进入生产环境之后,工作重点会转向对数据库系统的日常维护.日常运营方面包括性能管理.问题诊断和维护,它们必须继续满足业务http://www.aliyun.com/zixun/aggregation/14189.html">服务水平协议. 面向 OLTP 环境的物理数据库设计应包括运营和维护任务的时间表.本节提供了此类活动的总结. 恢复策略 作为 RAS 整体策略的一部分,恢复策略在满足您的 RAS 目标中发挥着重要作用.虽然事实上在许多层次上都存在冗余,但在定义恢复点目标 (R

DB2面向OLTP环境的物理数据库设计:表空间和缓冲池

在设计表空间和物理设备上的容器位置时,我们的目标是最大限度地提高 I/O 的并行度,增加缓冲区利用率和缓冲池命中率.为了实现这一目标,您需要透彻了解数据库设计和应用程序. 了解表空间和缓冲池的工作原理以及它们影响数据库的整体性能的方式,这可以帮助您确定一些问题,例如,将两张表分隔到不同的设备是否会导致并行 I/O,或者是否应在一个单独的表空间中创建一个表,使该表可以被完全缓冲. 您的设计中要考虑的两个主要存储领域是: 1. 表空间.表空间的类型和设计可以决定对该表空间所执行的 I/O 效率. 2

DB2面向OLTP环境的物理数据库设计:查询设计

在最基本的层面,包括选择.插入.更新和删除在内的 SQL 操作是应用程序与 DB2 数据库进行交互的方式.应用程序的总体性能和体验受到该应用程序所用的 SQL 操作的影响. 设计.维护.监视和调优 SQL 查询的完整处理超出了本文的范围.然而,我们从较高层次概述了查询设计的工具和一般准则,因为查询设计和物理数据库设计彼此密切相关. 大多数物理数据库设计的特征对 SQL 语句并不明显,但为了更好地使用 DB2 特性,在编写查询时需要考虑到数据库的物理特征,如索引.例如,使用范围分区表时,选择查询即

DB2面向OLTP环境的物理数据库设计:数据建模

收集需求并创建逻辑模型,这是良好的物理数据库设计的关键. 数据建模的第一步是收集需求.该步骤涉及识别需要维护的关键业务工件.数据和信息.这些业务工件被称为实体.对于http://www.aliyun.com/zixun/aggregation/7976.html">在线购物目录,有关客户.产品和定价的信息都是业务关键信息,即实体. 可以通过利益相关者的输入来收集需求.需求和数据模型通过迭代方式向对方输送数据而得到进一步完善,从而创建一个逻辑模型. 图 1 显示了迭代数据建模范例: 收集需求

DB2面向OLTP环境的物理数据库设计:表

DB2 数据库将数据存储在表中.有几种类型的表可以存储永久性数据,如多维集群表.分区表和范围集群表.除了用于存储永久性数据的表之外,也有一些表可用来展示结果.汇总表.临时表. 根据数据的显示形式和事务类型,您可能会找到一个表类型,提供可以为您的环境优化存储和查询性能的特定功能. 选择合适的表类型 表类型的选择取决于业务和应用程序的需求.表中存储的数据的性质和查询的性能要求.下节描述了每种表类型适合在何时使用. 基表 基表可以保存永久性数据.DB2 数据库的基表有以下几种类型: 常规表 有索引的常

DB2面向OLTP环境的物理数据库设计:索引

在 DB2 数据库中,索引是按一个或多个键的值进行逻辑排序的一组指针.指针可以引用表中的行.MDC 表中的块,或在 XML 存储对象中的 XML 数据. 索引通常用于加快对表中的行的访问.若在表上定义了良好的索引,查询就可以更快地访问行. 索引是数据库对象.它们是物理对象,而不是逻辑对象(如,视图).因此,索引也占用http://www.aliyun.com/zixun/aggregation/17325.html">存储空间,需要那些会占用系统资源的必要维护.一组精心设计的索引可以提高

DB2面向OLTP环境的物理数据库设计:数据和索引压缩

您可以通过使用内置在 DB2 for Linux, UNIX and Windows 数据库中的压缩功能来减少表.索引和备份映像的大小,从而减少数据所需的存储量. 表和索引通常包含重复信息.这种重复可能是单独或合并的列值,也可能是列值的共同前缀,或者是在 XML 数据中的重复模式.压缩方法可以使用短字符串或符号来代替重复的信息. 您可以使用一些压缩功能来减少存储表和索引功能所需的空间,同时也可以采用一些功能来确定压缩可以提供的节省.您还可以使用备份压缩来减少备份的大小. DB2 Version

DB2面向OLTP环境的物理数据库设计:可靠性、可用性和可伸缩性

为了跟上如今全球化程度不断增加且日益竞争激烈的市场,您的http://www.aliyun.com/zixun/aggregation/10145.html">企业架构必须有足够的灵活性,能够随着未来战略性需求的变化而一起成长,并在计划内和计划外停机中确保业务连续性. 对于任务关键型的 24x7 企业,一个小时的停机时间可以转化为数百万美元的收入损失,更不用说商业信誉的损害和潜在的客户流失.全球化企业都是跨时区运营的,提供全天候的业务服务.系统维护和升级的定期维护窗口已不复存在.分布式企业

DB2面向OLTP环境的物理数据库设计:数据库事务日志

数据库事务日志对于数据库恢复至关重要,也是设计高度可用的数据库解决方案的一个重要组成部分. 数据库日志使得从故障中恢复成为可能.它们还可以在 HADR 环境中同步主数据库和备用数据库. DB2 对每个数据库使用一组独立的日志文件. 所有数据库都有与自己有关联的日志.这些日志保留数据库变更的记录.如果数据库需要还原到最后一次完整离线备份之前的某个点,日志需要将数据前滚到故障点.DB2 数据库支持两种类型的数据库的日志:循环日志和归档日志. 循环日志 循环日志仅支持崩溃恢复,也就是说,如果 DB2