GaussDB表设计最佳实践

这篇具有很好参考价值的文章主要介绍了GaussDB表设计最佳实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

如何选择存储模型

如何选择数据分布方式

如何选择分布列

其他最佳设计建议

使用局部聚簇

使用分区表

选择数据类型


如何选择存储模型

进行数据库设计时,表设计上的一些关键项将严重影响后续整库的查询性能。表设计对数据存储也有影响:好的表设计能够减少I/O操作及最小化内存使用,进而提升查询性能。

表的存储模型选择是表定义的第一步。客户业务属性是表的存储模型的决定性因素,依据下面表格选择适合当前业务的存储模型。

存储模型

适用场景

行存

点查询(返回记录少,基于索引的简单查询)。

增删改比较多的场景。

列存

统计分析类查询 (group , join多的场景)。

如何选择数据分布方式

复制表(Replication)方式将表中的全量数据在集群的每一个DN实例上保留一份。主要适用于记录集较小的表。这种存储方式的优点是每个DN上都有该表的全量数据,在join操作中可以避免数据重分布操作,从而减小网络开销,同时减少了plan segment(每个plan segment都会起对应的线程);缺点是每个DN都保留了表的完整数据,造成数据的冗余。一般情况下只有较小的维度表才会定义为Replication表。

哈希(Hash)表将表中某一个或几个字段进行hash运算后,生成对应的hash值,根据DN实例与哈希值的映射关系获得该元组的目标存储位置。对于Hash分布表,在读/写数据时可以利用各个节点的IO资源,大大提升表的读/写速度。一般情况下大表定义为Hash表。

范围(Range)和列表(List)分布是由用户自定义的分布策略,根据分布列的取值落入满足一定范围或者具体值的对应目标DN,这两种分布方式便于用户灵活地进行数据管理,但对用户本身的数据抽象能力有一定的要求。

策略

描述

适用场景

Hash

表数据通过hash方式散列到集群中的所有DN实例上。

数据量较大的事实表。

Replication

集群中每一个DN实例上都有一份全量表数据。

小表、维度表。

Range

表数据对指定列按照范围进行映射,分布到对应DN。

用户需要自定义分布规则的场景。

List

表数据对指定列按照具体值进行映射,分布到对应DN。

用户需要自定义分布规则的场景。

如图1所示,复制表如图中的表T1,哈希表如图中的表T2。

图1 复制表和哈希表

GaussDB表设计最佳实践

如何选择分布列

Hash分布表的分布列选取至关重要,需要满足以下原则:

  1. 列值应比较离散,以便数据能够均匀分布到各个DN。例如,考虑选择表的主键为分布列,如在人员信息表中选择身份证号码为分布列。
  2. 在满足上述条件的情况下,考虑选择查询中的连接条件为分布列,以便Join任务能够下推到DN中执行,且减少DN之间的通信数据量。

对于Hash分表策略,如果分布列选择不当,可能导致数据倾斜,查询时出现部分DN的I/O短板,从而影响整体查询性能。因此在采用Hash分表策略之后需对表的数据进行数据倾斜性检查,以确保数据在各个DN上是均匀分布的。可以使用以下SQL检查数据倾斜性

select 
xc_node_id, count(1) 
from tablename 
group by xc_node_id 
order by xc_node_id desc;

其中xc_node_id对应DN,一般来说,不同DN的数据量相差5%以上即可视为倾斜,如果相差10%以上就必须要调整分布列

GaussDB支持多分布列特性,可以更好地满足数据分布的均匀性要求。

Range/List分布表的分布列由用户根据实际需要进行选择。除了需选择合适的分布列,还需要注意分布规则对数据分布的影响。

其他最佳设计建议

使用局部聚簇

局部聚簇(Partial Cluster Key)是列存下的一种技术。这种技术可以通过min/max稀疏索引较快的实现基表扫描的filter过滤。Partial Cluster Key可以指定多列,但是一般不建议超过2列。Partial Cluster Key的选取原则:

  1. 受基表中的简单表达式约束。这种约束一般形如col op const,其中col为列名,op为操作符 =、>、>=、<=、<,const为常量值。
  2. 尽量采用选择度比较高(过滤掉更多数据)的简单表达式中的列。
  3. 尽量把选择度比较高的约束col放在Partial Cluster Key中的前面。
  4. 尽量把枚举类型的列放在Partial Cluster Key中的前面。 

使用分区表

分区表是把逻辑上的一张表根据某种方案分成几张物理块进行存储。这张逻辑上的表称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是存储在分区上的。分区表和普通表相比具有以下优点:

  1. 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索效率。
  2. 增强可用性:如果分区表的某个分区出现故障,表在其他分区的数据仍然可用。
  3. 方便维护:如果分区表的某个分区出现故障,需要修复数据,只修复该分区即可。

GaussDB支持的分区表为范围分区表。

范围分区表:将数据基于范围映射到每一个分区。这个范围是由创建分区表时指定的分区键决定的。分区键经常采用日期,例如将销售数据按照月份进行分区。

选择数据类型

高效数据类型,主要包括以下三方面:

  1. 尽量使用执行效率比较高的数据类型

    一般来说整型数据运算(包括=、>、<、≧、≦、≠等常规的比较运算,以及group by)的效率比字符串、浮点数要高。比如某客户场景中对列存表进行点查询,filter条件在一个numeric列上,执行时间为10+s;修改numeric为int类型之后,执行时间缩短为1.8s左右。

  2. 尽量使用短字段的数据类型

    长度较短的数据类型不仅可以减小数据文件的大小,提升IO性能;同时也可以减小相关计算时的内存消耗,提升计算性能。比如对于整型数据,如果可以用smallint就尽量不用int,如果可以用int就尽量不用bigint。

  3. 使用一致的数据类型

    表关联列尽量使用相同的数据类型。如果表关联列数据类型不同,数据库必须动态地转化为相同的数据类型进行比较,这种转换会带来一定的性能开销。文章来源地址https://www.toymoban.com/news/detail-406828.html

到了这里,关于GaussDB表设计最佳实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云计算:从基础架构原理到最佳实践之:云计算网络与存储

    作者:禅与计算机程序设计艺术 云计算作为一种新型的服务方式,无疑将会成为下一个发展阶段的计算模式。很多企业或个人都认为云计算将改变传统IT的格局。传统的IT环境主要面临以下三个问题: 1.硬件成本高 云计算需要大量的服务器、存储设备和带宽等资源,因此价格

    2024年02月07日
    浏览(35)
  • Elastic Stack最佳实践系列:Beats->ES,一个更轻型的架构选择

    说起开源的日志分析系统,ELK几乎无人不晓,这个生态并非是Elastic特意而为,毕竟Elasticsearch的初心是分布式的搜索引擎,被广泛用作日志系统纯粹一个“美丽的意外”,这是社区使用者推动而成。而现在各大云厂商推广自己的日志服务时,也往往将各种指标对标于ELK,可见

    2023年04月12日
    浏览(31)
  • 云计算:从基础架构原理到最佳实践之:云计算大数据处理与存储

    作者:禅与计算机程序设计艺术 云计算(Cloud Computing)是一种新的计算模型、服务方式、资源体系结构和应用策略,它将计算、存储和网络服务从中心机房扩展至“无限”的分布式地点,通过对计算机集群进行动态分配资源的方式提高资源利用率和可靠性。其核心特征包括按

    2024年02月07日
    浏览(35)
  • 如何选择最佳的实时聊天软件

    在客户服务和支持领域,实时聊天正在改变游戏规则已不是什么秘密。从推动销售到提升客户体验和提高保留率,实时聊天已成为与客户互动和支持的一种全新的方式。客户和支持专业人员都注意到了这一点。 研究发现,高达41%的消费者更喜欢实时聊天,这就是为什么近十分

    2023年04月27日
    浏览(29)
  • 一文了解函数设计的最佳实践

    良好设计的函数具有清晰的职责和逻辑结构,提供准确的命名和适当的参数控制。它们促进代码复用、支持团队协作,降低维护成本,并提供可测试的代码基础。通过遵循最佳实践,我们能够编写出高质量、可读性强的代码,从而提高开发效率和软件质量。下面我们将一一描

    2024年02月10日
    浏览(23)
  • 软件架构设计最佳实践(课程大纲)

    课程介绍: 1、深入阐述软件架构设计的思想、方向及趋势; 2、剖析软件架构的全景视图; 3、结合实际案例分析架构设计过程及需求对架构的影响; 4、如何实用设计模式来实现好的架构; 5、实践分享多种类型架构设计的实现; 6、SOA架构、企业集成系统架构、企业门户架

    2023年04月21日
    浏览(35)
  • 延迟队列的设计与最佳实践

    在现代分布式系统中,延迟任务是一种非常重要的概念。它们可以用来处理需要特殊关注或执行的任务,如发邮件、推送消息或生成报告等。为了实现这些任务,我们需要一种强大而可靠的工具,即延迟队列。 在本博客中,我们将介绍延迟队列的设计和最佳实践。我们将使用

    2023年04月13日
    浏览(24)
  • 物联网架构:设计与实现最佳实践

    物联网(Internet of Things, IoT)是指通过互联网技术将物体、设备、车辆等实体对象与互联网联网互联,使之能够互相传递信息、协同合作,从而实现智能化管理和控制。物联网技术已经广泛应用于各个行业,如智能家居、智能城市、智能交通、智能能源、医疗健康等。 物联网架

    2024年02月22日
    浏览(29)
  • 精通代码复用:设计原则与最佳实践

    在你开始设计的所有层次上,从单一函数、类,到整个库和框架,都需要从一开始就考虑到代码复用。在接下来的文本中,所有这些不同的层次都被称为组件。以下策略将帮助你合理地组织你的代码。注意,所有这些策略都专注于使你的代码具有通用性。设计可复用代码的第

    2024年02月08日
    浏览(29)
  • 【Microsoft Azure 的1024种玩法】三十四.将本地数据文件快速迁移到Azure Blob云存储最佳实践

    AzCopy 是一个Azure提供的一款命令行工具,我们可通过简单命令将本地的数据快速复制到 Azure Blob 存储中,本文主要讲述了如何通过AzCopy 工具将本地数据文件快速迁移到Azure Blob云存储 【Microsoft Azure 的1024种玩法】一.一分钟快速上手搭建宝塔管理面板 【Microsoft Azure 的1024种玩法

    2024年02月09日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包