Greenplum数据库设计开发规范

合集下载

数据库设计规范

数据库设计规范

数据库设计规范
数据库设计是一项重要的任务,一个好的数据库设计可以提高系统的性能、可靠性和可维护性。

以下是一些数据库设计规范的要点:
1. 数据库命名规范:使用有意义的、可读性强的名称,避免使用缩写和无意义的短名称,使用下划线或驼峰命名法。

2. 数据表命名规范:使用单数形式的名词,避免使用复数形式,使用名词描述表的内容,不要使用数字和特殊字符。

3. 列命名规范:使用有意义的、可读性强的名称,避免使用缩写和无意义的短名称,使用名词或形容词描述列的内容。

4. 主键规范:每个表都应该有一个主键,并确保主键的唯一性和稳定性,通常使用自增长整数或全局唯一标识符(GUID)
作为主键。

5. 外键规范:在需要关联的表中添加外键,确保外键的一致性和正确性。

6. 索引规范:根据查询的需求和性能需求创建适当的索引,避免创建过多的索引,否则会降低数据的插入和更新性能。

7. 数据类型规范:选择适当的数据类型来存储数据,避免浪费存储空间和降低性能。

8. 一致性规范:确保数据表的结构一致性和命名一致性,可以使用数据库设计工具来辅助设计和维护。

9. 安全性规范:对敏感数据进行保护,设置合适的访问权限和加密措施,确保数据的安全。

10. 性能规范:优化查询性能,合理设计数据库的关系和索引,避免数据冗余和数据不一致等问题。

总之,数据库设计规范的目标是保证数据库的结构合理、性能高效、数据安全,同时提高开发和维护的效率。

数据库设计规范

数据库设计规范

数据库设计规范数据库设计是软件开发过程中的关键环节,为确保软件的可靠性、安全性和可维护性,必须设计一个不仅支持所有需求功能,而且还能灵活应变的数据库系统。

但是现有的数据库系统存在一定的缺陷,如不够灵活,存在冗余数据或缺乏标准规范等。

因此,要提高数据库设计的质量,必须遵循一些规范。

本文的目的是介绍数据库设计规范,以期达到更高的可靠性和可维护性。

首先,在数据库设计中,一定要正确地完成实体关系建模(ERM),确定各实体之间的属性和关系。

实体关系建模是数据库设计的基础,可以帮助确定各实体间的依赖关系,以及数据表之间的关系。

这能够有效地降低系统实现过程中可能出现的错误。

其次,应遵循一定的命名规范。

使用统一的命名方法可以增强数据库表结构的可见性,减少维护成本,提高数据库设计的可维护性。

要遵循的规范包括:字段名称应该见名知意;命名的关键字不应该以系统关键字开头;字段命名应该区分大小写;字段名称应该简短明了,不要超过30个字符。

再次,数据库设计中必须根据业务需求确定数据类型,而且不能仅仅局限于业务需求。

在数据类型中,采用不同的数据类型可以改善数据表的可靠性和可维护性,同时显著提升应用性能。

例如,存储货币类型的字段应使用货币类型数据,而不是字符串。

此外,数据库表的索引也是重要的组成部分,是提高查询性能的关键所在。

索引可以提高查询的效率,但也要注意添加适当的索引,不要滥用,以免降低数据库写入性能。

最后,应定期检查数据库设计,以检查可能存在的冗余或脱节数据,并采取必要的索引等措施,以改进数据库系统的可维护性和可靠性。

综上所述,数据库设计规范是对数据库设计过程中的指导原则,它可以提高数据库设计的质量,确保软件的可靠性、安全性和可维护性。

因此,在数据库设计过程中必须充分遵循这些规范,以确保最终的系统成功实施。

数据库设计原则与规范

数据库设计原则与规范

数据库设计原则与规范数据库是现代信息系统的核心组成部分,用于存储和管理大量结构化数据,以支持组织内部各种业务和决策需求。

数据库设计的质量直接关系到系统的性能、可靠性和可扩展性。

为了确保数据库的高效运行,我们需要遵循一些设计原则和规范。

下面将介绍数据库设计的基本原则和规范。

一、规范化数据库设计原则规范化是数据库设计过程中的关键步骤,它通过将数据分解为逻辑上的表来减少数据冗余、提高数据一致性和完整性。

以下是常用的规范化原则:1. 第一范式(1NF):每个表中的每个字段都是原子的,不可再分。

不能将多个值存储在一个字段中,例如在电话号码字段中存储多个电话号码。

2. 第二范式(2NF):每个非主键字段完全依赖于主键字段。

如果一个表中有多个候选键,必须将其分解为多个表,确保每个非主键字段只与一个主键相关。

3. 第三范式(3NF):消除了非主键字段之间的传递依赖关系。

即非主键字段之间不可存在依赖关系,数据更新时不会导致数据不一致。

4. 次范式(BCNF):基于第三范式,进一步消除了主键字段之间的传递依赖关系。

它要求每个非主键字段只依赖于候选键。

二、数据模型设计原则数据模型是数据库设计的核心,它定义了数据库中的实体、属性和关系。

下面是数据模型设计的原则:1. 选择合适的数据模型:常用的数据模型包括层次模型、网状模型和关系模型。

关系模型是当前最流行和应用最广泛的数据模型,它以关系表的形式存储数据。

2. 确定实体和属性:实体是现实世界中的对象,属性是实体的特征。

在定义实体和属性时,需考虑实体的属性是否唯一标识该实体。

3. 定义关系:关系是实体之间的联系,通过表之间的键值关联实现。

在定义关系时,需考虑关系的类型(一对一、一对多、多对多)以及参照完整性约束。

三、命名规范与标准良好的命名规范和标准是数据库设计的基础,它有助于提高代码的可读性和可维护性,并减少开发人员之间的沟通成本。

以下是常用的命名规范与标准:1. 表和字段命名:使用具有描述性的名称,避免使用缩写、重复和模糊的词汇。

数据库标准化设计与开发规范

数据库标准化设计与开发规范

数据库标准化设计与开发规范数据库是企业信息化建设的重要组成部分,而标准化设计与开发规范是确保数据库有效性、可靠性和可维护性的基石。

在本文中,我们将介绍数据库标准化设计与开发规范的重要性,并提供一些实践经验和指导原则。

一、数据库标准化设计的重要性数据库标准化设计是指在设计数据库时遵循一系列规范和准则,以达到数据一致性、完整性和可扩展性的目标。

标准化设计的重要性体现在以下几个方面:1. 数据一致性:标准化的数据库设计可以确保数据在不同表中的存储方式一致,避免数据冗余和不一致的情况。

这能提高数据的准确性和可靠性,避免数据的重复录入和更新等问题。

2. 数据完整性:通过定义合适的关系约束、主键和外键,标准化设计可以确保数据的完整性。

在插入、更新和删除数据时,数据库系统会自动进行参照完整性检查,从而避免数据关联错误和损坏。

3. 数据可扩展性:标准化的数据库设计可以灵活地扩展和调整,使数据库结构能够适应业务的变化和增长。

在标准化设计下,数据库模式的修改和扩展更加方便,不会对现有的数据和应用程序造成影响。

二、数据库标准化设计的原则和规范在进行数据库标准化设计时,我们应该遵循以下几个原则和规范:1. 第一范式(1NF):确保每个表中的数据项是原子化的,即不可再分的。

每个字段只应该包含一个数据项,避免多值依赖和重复分组。

这可以减少数据的冗余和不一致性。

2. 第二范式(2NF):在满足1NF的基础上,确保每个非主键属性完全依赖于主键,而不是依赖于主键的一部分。

通过拆分表、引入外键等方式,可以消除部分依赖和更新异常。

3. 第三范式(3NF):在满足2NF的基础上,确保每个非主键属性直接依赖于主键,而不是依赖于其他非主键属性。

这样可以消除传递依赖和冗余数据,提高数据的存储效率和查询性能。

4. 索引设计:合理的索引设计是提高查询性能和应用效率的关键。

应该根据业务需求和查询频率设计适当的索引,避免创建过多或过少的索引。

此外,重要的字段应该优先考虑添加索引。

greenplum sql 参数

greenplum sql 参数

Greenplum SQL 参数1. 什么是Greenplum SQL参数?Greenplum SQL参数是指用于配置和调整Greenplum数据库性能的设置。

Greenplum数据库是一个基于开源的大规模并行处理(MPP)数据库,专为处理海量数据而设计。

通过调整SQL参数,可以优化查询性能,提高数据库的吞吐量和响应时间。

2. Greenplum SQL参数的分类Greenplum SQL 参数分为两类:全局参数和会话参数。

2.1 全局参数全局参数是对整个Greenplum数据库实例生效的参数。

全局参数的配置对所有连接到数据库的会话都起作用。

2.2 会话参数会话参数是对于单个会话生效的参数。

会话参数的配置只对当前会话有效,不会影响其他会话。

3. 常见的Greenplum SQL 参数下面列举了一些常见的Greenplum SQL参数及其作用:3.1 全局参数3.1.1 gp_enable_query_metrics•作用:启用或禁用查询指标收集。

•默认值:false。

•可选值:true/false。

3.1.2 gp_autostats_mode•作用:启用或禁用自动收集统计信息。

•默认值:none。

•可选值:none, build, analyze, force。

3.1.3 gp_max_connections•作用:设置最大并发连接数。

•默认值:800。

•可选值:任意整数。

3.2 会话参数3.2.1 gp_workfile_limit_files•作用:限制每个操作实例工作文件的数量。

•默认值:-1(表示没有限制)。

•可选值:任意整数。

3.2.2 gp_hashagg_broadcast_index_threshold•作用:设置哈希聚合操作使用广播策略的行数阈值。

•默认值:1000000。

•可选值:任意整数。

3.2.3 gp_enable_preunique•作用:启用或禁用预去重优化。

•默认值:true。

greenplum实施方案

greenplum实施方案

greenplum实施方案Greenplum实施方案在当今大数据时代,企业面临着海量数据的存储、管理和分析挑战。

为了更好地应对这些挑战,越来越多的企业开始采用Greenplum作为他们的大数据解决方案。

本文将介绍Greenplum实施方案,帮助企业更好地理解和应用Greenplum。

首先,要实施Greenplum,企业需要进行需求分析和规划。

在这一阶段,企业需要明确自己的数据存储和分析需求,以及未来的发展方向。

同时,还需要评估现有的IT基础设施和人员技术水平,以确定是否具备实施Greenplum的条件。

其次,企业需要进行Greenplum的部署和配置。

在部署阶段,企业需要选择合适的硬件设备,并进行相应的网络和安全设置。

在配置阶段,企业需要根据自身需求对Greenplum进行参数设置和优化,以确保系统的稳定性和性能。

接下来,企业需要进行数据迁移和导入。

在这一阶段,企业需要将现有的数据迁移到Greenplum中,并进行相应的数据清洗和转换工作。

同时,企业还需要建立数据导入的定时任务,确保数据的及时更新和同步。

然后,企业需要进行应用开发和优化。

在这一阶段,企业需要根据自身业务需求开发相应的数据分析应用,并对应用进行性能优化和调整,以提高数据分析的效率和准确性。

最后,企业需要进行监控和维护。

在这一阶段,企业需要建立完善的监控系统,对Greenplum的运行状态和性能进行实时监控,并及时进行故障排除和性能调优。

总的来说,Greenplum的实施方案涉及到需求分析、部署配置、数据迁移导入、应用开发优化以及监控维护等多个方面。

企业在实施Greenplum时,需要充分考虑自身的实际情况,合理规划和安排每个阶段的工作,以确保整个实施过程顺利进行,并达到预期的效果。

通过本文的介绍,相信读者对Greenplum的实施方案有了更深入的了解。

希望企业可以根据自身需求和实际情况,合理选择和应用Greenplum,从而更好地应对大数据挑战,提升企业的竞争力和发展潜力。

数据库建设规范

数据库建设规范数据库作为存储、管理和处理数据的重要工具,在现代信息化建设中起着至关重要的作用。

为了提高数据库的质量和效率,确保数据的安全性和准确性,需要制定一套数据库建设规范。

本文将从数据库设计、数据规范、性能优化和安全保障四个方面详细介绍数据库建设规范。

一、数据库设计在数据库建设的初期阶段,良好的数据库设计能够为后期的开发和维护工作奠定基础。

数据库设计应遵循以下几点规范:1. 数据库表命名规范表名应具有具体的描述性,能够准确表达其所存储的数据内容,并采用小写字母与下划线组合的方式命名,例如"order_info"。

2. 字段命名规范字段名应有明确的含义,避免使用缩写和数字等模糊的命名方式。

同时,字段名也应采用小写字母与下划线组合的方式命名,例如"create_time"。

3. 主键和外键规范每个表应有主键,并使用自增长或唯一性约束来保证主键的唯一性。

同时,在设计关联表时,外键应与关联的主键类型一致。

4. 索引规范为常用作查询条件的字段创建索引,以提高查询效率。

在创建索引时,需要根据实际情况进行选择,避免过多的索引对性能造成负面影响。

二、数据规范数据库中的数据质量对于后续的数据分析和决策产生重要影响。

为了保证数据的一致性和准确性,需要制定以下数据规范:1. 数据类型规范在对字段进行设计时,需要选择合适的数据类型,以节省存储空间,并确保数据的正确性。

例如,对于存储日期时间的字段,应选择合适的日期时间类型。

2. 数据录入规范为了避免数据录入错误,需要制定数据录入规范。

规定数据录入格式、校验规则和必填字段,同时提供数据录入的帮助文档和提示信息,以减少错误的发生。

3. 数据清洗规范对于已有的大规模数据,需要进行数据清洗,剔除重复、错误、缺失和异常数据,以保证数据库中的数据质量。

三、性能优化数据库的性能直接关系到系统的响应速度和用户体验。

为了提高数据库的性能,需要进行以下优化措施:1. 查询优化使用合适的查询方式、优化复杂查询语句、减少不必要的连接和子查询,以提高查询效率。

数据库设计的规范与范式

数据库设计的规范与范式数据库设计是构建一个稳定、高效、可维护的数据库系统的基础。

采用规范的数据库设计方法和范式化的数据结构,可以确保数据库的一致性、完整性和可扩展性。

本文将探讨数据库设计的规范性要求以及范式化的设计原则。

一、数据库设计的规范性要求1. 数据模型的选择与设计在数据库设计之前,首先需要选择合适的数据模型。

常见的数据模型包括层次模型、网状模型和关系模型等,其中关系模型是最常用的模型。

在选择关系模型后,需要进一步设计关系的结构和属性。

2. 实体关系图的构建实体关系图(ER图)是数据库设计的基础工具,用于描述实体之间的关系。

在构建ER图时,需明确实体的属性和关系的类型,规定每个实体的主键和外键,并保证图形的可读性和图例的规范性。

3. 数据命名的规范化数据库对象(表名、列名、约束名等)的命名应该遵循统一的规范,以提高代码的可读性和维护性。

常见的命名规范包括使用小写字母和下划线、避免使用保留字和特殊字符等。

4. 数据类型和长度的定义在数据库设计中,根据实际需求和数据特点,需要正确定义各个列的数据类型和长度。

不同的数据类型有不同的存储需求和限制条件,合理的数据类型定义可以减小存储空间并提高查询效率。

5. 约束和索引的使用约束和索引是数据库设计中的重要概念。

通过定义主键、唯一约束、外键约束等可以保证数据的完整性和一致性;而通过创建适当的索引可以提高查询的速度和效率。

6. 数据库文档和注释的编写在数据库设计完成后,应及时编写数据库文档和注释,记录各个表、列、约束和索引的含义和用途。

这对于日后的维护和改进非常重要,可以提高开发人员的工作效率。

二、范式化的设计原则范式化是数据库设计中的一项基本原则,用于规范化数据结构,减少数据冗余并提高数据一致性。

1. 第一范式(1NF)第一范式要求数据库中每个属性都是原子的,即不可再分。

每个属性都只包含一个值,不允许多值属性、复合属性和重复属性的存在。

2. 第二范式(2NF)第二范式要求数据库中的非主键属性都完全依赖于主键,即要求表中的每个非主键属性都与主键直接相关。

Greenplum数据库优秀实践

-` ❖ 介绍 本文介绍Pivotal Greenplum Database数据库(以下简称:Greenplum数据库,或GPDB)的最佳实践。

最佳实践是指能持续产生比其他方法更好结果的方法或者技术,它来自于实战经验,并被证实了遵循这些方法可以获得可靠的预期结果。本最佳实践旨在通过利用所有可能的知识和技术为正确使用GPDB提供有效参考。

本文不是在教您如何使用Greenplum数据库的功能,而是帮助您在设计、实现和使用Greenplum数据库时了解需要遵循哪些最佳实践。关于如何使用和实现具体的Greenplum数据库特性,请参考 http://gpdb.docs.pivotal.io 上的Greenplum数据库帮助文档以及 http://greenplum.org 上的Sandbox和实践指南。

本文目的不是要涵盖整个产品或者产品特性,而是概述GPDB实践中最重要的因素。本文不涉及依赖于GPDB具体特性的边缘用例,后者需要精通数据库特性和您的环境,包括SQL访问、查询执行、并发、负载和其他因素。

通过掌握这些最佳实践知识,会增加GPDB集群在维护、支持、性能和可扩展性等方面的成功率。

第一章 最佳实践概述

本部分概述了Greenplum数据库最佳实践所涉及的概念与要点。 数据模型 GPDB 是一个基于大规模并行处理(MPP)和无共享架构的分析型数据库。这种数据库的数据模式与高度规范化的事务性SMP数据库显著不同。通过使用非规范化数据库模式,例如具有大事实表和小维度表的星型或者雪花模式,GPDB在处理MPP分析型业务时表现优异。

跨表关联(JOIN)时字段使用相同的数据类型。 详见数据库模式设计(后续章节) -` 堆存储和追加优化存储(Append-Optimized,下称AO) 若表和分区表需要进行迭代式的批处理或者频繁执行单个UPDATE、DELETE或INSERT操作,使用堆存储。

若表和分区表需要并发执行UPDATE、DELETE或INSERT操作,使用堆存储。 若表和分区表在数据初始加载后更新不频繁,且仅以批处理方式插入数据,则使用AO存储。

数据库开发设计规范

数据库开发设计规范1基本命名规范对象名统一使用大写字母,形成混合拼写的格式+下划线+后缀名(对象类型)命名尽量采用富有意义的英文词汇,不准采用汉语拼音,如:订单ORD_USER_571 当前表ORD_USER_F_571_201009 订单已竣工表ORD_USER_H_571_201009 订单历史表实例INS_PROD_571 实例当前表INS_PROD_H_571_201009 实例历史表资源RES_SIM_CARD_ORIGIN_571 未用表RES_SIM_CARD_USED_571 已用表工单表PS_PROVISION_571 当前表PS_PROVISION_571_ERR 处理错误表PS_PROVISION_H_571_201009 已经完成表2实体表命名规则前几位代表模块英文缩写,后面代表该对象的英文名称:如:INS_PROD_571 杭州产品实例表模块划分:3字段类型使用规则Oracle常用的字段类型如下:表设计时对字段类型使用应遵循以下规则:1、对于字符型字段,字段类型选择时尽可能的使用varchar2字段类型,避免使用char字段类型,因char类型字段在字符长度不足位的情况下Oracle会自动补空格,存在一定的开发隐患;2、对于需要存储的字符串长度超过varchar2字段类型规定的最大长度(4000字节)的情况,模型设计时原则上禁止使用blob/clob字段类型,建议采用定义多个varchar2类型字段的方式设计,应用开发在存储字符串时对字段串分割后进行存储,获取字符串时对多个字段存储的字符串查询后进行拼接。

如特定情况下需要使用blob/clob字段类型,必须向架构组和平台组提交申请,审核后方可使用;3、时间类型的数据选择date类型,避免使用timestamp类型;4、整数类型字段使用number(p)定义,浮点类型字段使用number(p,s)定义。

对于金额类的字段,除特定场景下,系统均是使用分为单位,在字段类型选择时优先使用整数类型。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录第一章前言 (2)1.1文档目的 (2)1.2预期读者 (2)1.3参考资料 (2)第二章设计规范 (3)2.1数据库对象数量 (3)2.2表创建规范 (3)2.3表结构设计 (4)2.3.1字段命名 (4)2.3.2数据类型 (4)2.3.3数据分布 (5)2.3.4分区 (7)2.3.5压缩存储 (8)2.3.6索引设计 (9)2.4其他数据库对象设计 (10)2.4.1schema (10)2.4.2视图 (11)2.4.3临时表和中间表 (11)第三章SQL开发规范 (12)3.1基本要求 (12)3.2WHERE条件 (12)3.3分区字段使用 (13)3.4表关联 (13)3.5排序语句 (16)3.6嵌套子查询 (16)3.7UNION/UNION ALL (16)3.8高效SQL写法的建议 (18)第一章前言1.1 文档目的随着Greenplum数据库的正式上线使用。

为了保证Greenplum 数据仓库系统平台的平稳运行,保证系统的可靠性、稳定性、可维护性和高性能。

特制定本开发规范,以规范基于Greenplum数据库平台的相关应用开发,提高开发质量。

1.2 预期读者Greenplum数据仓库平台应用的设计与开发人员;Greenplum 数据仓库平台的系统管理人员和数据库管理员;Greenplum 数据仓库平台的运行维护人员;1.3 参考资料参考Greenplum4.3.x版本官方指引:《GPDB43AdminGuide.pdf》《GPDB43RefGuide.pdf》《GPDB43UtilityGuide.pdf》第二章设计规范2.1 数据库对象数量数据库对象类型包括数据表、视图、函数、序列、索引等等,在Greenplum 数据库中,系统元数据同时保存在Master 服务器和Segment服务器上,过多的数据库对象会造成系统元数据的膨胀,而过多的系统元数据造成系统运行逐步变慢;同时,类似数据库的备份、恢复、扩容等较大型的操作都导致效率变慢。

因此,依据GreenplumDB产品的最佳时间,单个数据库的对象数量,应控制在10万以内。

GP数据库的对象包括:表、视图、索引、分区子表、外部表等。

如果数据表的数量太多,建议按应用域进行分库,尽量将单个数据库的表数量控制在10万以内,可以在一个集群中创建多个数据库。

【备注】:在Greenplum数据库中,一张分区表,在数据库中存储为一张父表、每张分区子表都是一张独立的库表;例如:一张按月进行分区的存储一年数据的表,如果含默认分区,共14张表。

2.2 表创建规范为了避免数据库表数量太多,避免单个数据表的数据量过大,给系统的运行和使用带来困难,在Greenplum数据库中需遵循如下的表创建规范:1、GP系统表中保存的表名称都是以小写保存。

通常SQL语句中表名对大小写不敏感。

但不允许在建表语句中使用双引号(“”)包括表名,这样会影响系统表中存储的名称,使得表名存在大小写或特殊字符。

表命名也不允许出现中文字。

2、单个数据库的数据表数量建议不要超过10万张;3、禁止使用二级分区表,因为二级分区表会造成表对象数量的急剧膨胀;4、由于过多的数据文件会导致操作系统对文件的操作效率降低,直接影响到数据库的管理效率。

如果数据文件数量过多,建议增加多个表空间,把数据表均匀分布到不同的表空间。

每个表空间目录下的数据文件数量,应控制在80万以内。

文件数统计可以直接到某个Segment实例目录下指定的表空间目录下统计。

5、创建数据表(DDL)的时候(不含临时表和程序中使用的中间表),必须使用tablespace 子句指定用于存储的表空间,而不是把所有表都存储在默认表空间;例如:6、对于数据量超过1TB的大表,需从应用设计方面,考虑对大表进行优化,例如是否可划分为历史数据表和当前数据表,并分开存放;是否应采用压缩存储节省空间;是否合理分区;是否应定期清理数据等等。

2.3 表结构设计2.3.1 字段命名表字段的命名,与表名类似。

在GP系统表中保存的表名称都是以小写保存。

通常SQL语句中字段名称对大小写不敏感。

但不允许在建表语句中使用双引号(“”)包括字段名,这样会影响系统表中存储的名称,使得表名存在大小写或特殊字符。

字段命名也不允许出现中文字。

2.3.2 数据类型数据类型的定义与相关数据的加载和使用紧密相关,数据类型的定义决定了数据所占用的空间大小,因此,必须慎重设计GP数据仓库数据表的字段类型。

数据仓库的数据来自于多个异构的业务应用系统,通常情况下,业务应用系统的字段类型选择较为随意,不同的业务系统数据类型定义存在多样化,彼此之间差异较大;因此,在数据仓库中,需在参考源系统字段类型定义的情况下,结合Greenplum 数据仓库平台的特点和要求,对字段数据类型进行设计。

Greenplum数据库的数据类型定义需遵循以下原则:1、在满足业务需求的条件下,尽可能选择空间占用最小的数据类型;以节省数据存储空间;2、在GP系统中,CHAR、VARCHAR和TEXT之间不存在性能差异,在其他的DB系统中,可能CHAR会表现出最好的性能,但在GPDB中是不存在这种性能优势的。

在多数情况下,应该选择使用VARCHAR而不是CHAR;3、定长字符串类型使用varchar,而不使用char.4、对于数值类型来说,应该尽量选择更小的数据类型来适应数据;比如,选择BIGINT类型来存储SMALLINT类型范围内的数值,会造成空间的大量浪费。

5、用来做Table Join的Column来说,应该考虑选择相同的数据类型。

如果做Join的Column具有相同的数据类型(比如主键PrimaryKey与外键ForeignKey),其工作效率会更高。

6、一般情况下,应尽量使用上述规范数据类型,避免出现诸如:Address,INET,ARRAY等特殊类型字段。

2.3.3 数据分布基于Greenplum 数据仓库平台的特点,每张数据表都必须指定分布键DK,Greenplum 数据库根据数据分布键(Distributed Key,简称DK,后同)值来决定记录存储在哪一个segment 上,DK不仅决定了数据在集群节点上的分布,还严重影响数据查询和处理操作的执行效率,需要非常慎重的选择数据表的分布键。

对于Greenplum 数据仓库平台,DK的选择需要遵循以下原则:1、数据均匀分布原则为了尽可能达到最好的性能,所有的Instance应该尽量储存等量的数据。

若数据的分布不平衡或倾斜,那些储存了较多数据的Instance在处理自己那部分数据时将需要耗费更多的工作量。

为了实现数据的平坦分布,可以考虑选择具有唯一性的DK,如主键。

2、本地操作原则在处理查询时,很多处理如关联、排序、聚合等若能够在Instance本地完成,其效率将远高于跨越系统级别(需在Instance之间交叉传输数据)的操作。

当不同的Table使用相同的DK时,在DK上的关联或者排序操作将会以最高效的方式把绝大部分工作在Instance本地完成。

3、均衡的查询负载原则在一个查询正被处理时,我们希望所有的Instance都能够处理等量的工作负载,从而尽可能达到最好的性能。

通过合理的DK设计,尽量使得查询处理的负载均匀分布在每个节点上,并且尽量保证where条件产生的结果集在各个节点上也是均匀的。

4、关联一致原则当表于表之间存在关联时,各表应选择相同字段作为DK,并且做关联查询时,使用DK作为连接字段,尽可能使连接包含全部DK字段;5、DK一致原则总分父子表的DK应保持一致;中间过程表、临时表的DK应尽可能保持和源表的DK一致;6、DK精简原则DK字段不宜过多,DK字段越少越好。

基于以上原则,Greenplum 数据仓库平台的数据表DK 设计规范如下:✓每个数据表必须通过Distribiuted子句显式指定分布键,不允许使用默认DK 的方式创建数据表;✓分布键字段原则上为1个,应尽量不要超过3个;✓分区的父子表的分布键应完全一致;✓中间过程表、临时表、派生表的DK应尽可能保持和源表一致;✓具有关联关系的数据表,应尽可能使用关联字段作为分布键;✓分布键字段不可执行Update操作;✓为了保证数据分布均匀,在没有合适字段作为分布键的情况下,应选择数据表的主键作为分布键;✓对于没有逻辑主键,又没有其他合适字段作为分布键的数据表,才建议设置其分布策略为Distributed Randomly,这只应该为最后的选择;✓随机分布的适合使用场景:查询时不需要和其它表关联、或只与小表关联的数据表,使用随机分布策略。

2.3.4 分区表分区用以解决特别大的表的问题,分区表在执行给定的查询语句时,扫描相关的部分数据而不是全表的数据从而提高查询性能。

分区表对于数据库的管理也有帮助。

并不是任何数据表都适合做分区,应从如下几个方面判断是否应进行分区:1、表是否足够大?只有非常大的事实表才适合做表分区。

若在一张表中有数亿条记录,从逻辑上把表分成较小的分区将可以改善性能。

而对于只有数万条或者更少记录的表,对分区预先进行的管理开销将远大于可以获得的性能改善。

2、对目前的性能不满意?作为一种调优方案,应该在查询性能低于预期时再考虑表分区。

3、查询条件是否能匹配分区条件?检查查询语句的WHERE条件是否与考虑分区的COLUMN一致。

例如,如果大部分的查询使用日期条件,那么按照月或者周的日期分区设计也许很有用,而如果查询条件更多的是使用地区条件,可以考虑使用地区将表做列表类型的分区。

4、按照某个规则数据是否可以被均匀的分拆?应该选择尽量把数据均匀分拆的规则。

若每个分区储存的数据量相当,那么查询性能的改善将与分区的数量相关。

例如,把一张表分为10个分区,命中单个分区条件的查询扫表性能将比未分区的情况下高10倍。

如果以上几个方面的回答都是Yes,这样的表可以通过分区策略来提高查询性能。

如上面章节所述,在Greenplum 中,每个分区子表都对应一张独立的数据表,系统通过父子表之间的继承关系来维护分区定义信息。

如果过多的数据表进行了分区,会造成表对象数量过多,系统元数据急剧膨胀,给系统的运行和维护带来很大负担。

因此,还要综合考虑系统的表数据量情况,才可决定是否对数据表进行分区。

基于以上原则,Greenplum 数据库数据分区的使用规范如下:✓在性能可以满足的情况下,尽量不使用数据分区;✓因会造成表对象数量过多,增加执行计划生成的复杂性,禁止使用二级分区;✓数据量在亿级别以下,建议不要使用分区;✓表的数据在单个实例的数据量在100万级别以下,不需要分区;✓分区字段不可以UPDATE,需要用delete + insert或者truncate + insert 替代实现。

相关文档
最新文档