数据库性能优化之分布式数据库结构设计优化(一)

article/2025/10/17 3:00:23

Gauss是MPP数据库,MPP指大规模并行处理架构,在非共享集群中,各独立节点通过网络进行数据通信协同计算,非共享集群有完全可伸缩性、高可用、高性能等优势。Gauss采用了Share Nothing架构,即集群各节点相互独立有独立内存、CPU、磁盘,各节点通过专用网络协议通信,节点下的处理结果将向上层汇总或在节点间流转,在物理存储上的水平分割可以大幅提升数据库的处理能力和容量,主要介绍下相关的调优手段及优化常识。

表结构设计

对于数据量较大的数据结构设计来讲,主要从水平拆分和垂直拆分来考虑对数据库进行拆分来降低表数据量,一般较为常用的为水平拆分,分库分表分区为主要的拆分手段,水平拆分的实现是通过物理分割,将同一单元内的数据量降低突破单机数据库瓶颈极限。

水平分库: 一般是将数据量到达极限的数据库中的数据拆分到新建立的其他服务器的新库中,逻辑上两个库的数据为连续,实际存储分离。

水平分表:一般是将单表数据量极大的大表拆分到多个表中,减少单表的数据量,提升扫描性能,在全表扫描的场景下可以大幅度提高性能。

水平分区:一般是将表数据进行分区,相关的数据文件和索引会存储在不同磁盘上,分区一般分为哈希分区、范围分区、列表分区、数值分区。常用的一般为范围分区和哈希分区,范围分区根据指定字段将元组分为多个范围,范围在不同分区内没有重叠,使用where条件对分区列进行数据筛选时,将会根据条件在指定分区进行扫描,大大减少了扫描的数据量。哈希分区根据字段的散列值将数据均匀地分布在多个分区中,一般使用范围分区较多,将记录的值按时间范围或者数据的数值范围分区,有选择性的对字段较为集中的值进行分区大大提高查询效率。

垂直拆分在数据库优化中比较少,垂直拆分主要是将表数据中的字段进行拆分,将表字段较多的大表中不常用数据拆分成多张表,数据查询通过关联的方式将数据整合到一起,所以垂直拆分主要是通过业务逻辑将数据拆分,有效减少大表的实际数据。

Gauss的数据处理能力依托于MPP大规模并行处理,也就是分布式集群的计算能力,对于分布式数据库而言,最为重要的是数据分布、负载均衡,对于数据处理而言需要考虑的就是如何防止数据倾斜导致的单机极限瓶颈,Gauss可以通过节点表来查询表在每个节点存储的数据量,来判断是否存在数据倾斜,我们对于数据倾斜的标准判断为10%即数据节点最大值-最小值/节点数据平均值 > 10%,判定为表数据倾斜,表数据倾斜会使Gauss需要在节点流转的处理上花费更长时间,还有可能因为任务并发执行导致的通信阻塞,影响集群的正常运行甚至宕机。Gauss新建表需要选择表分布方式,hash分布和replication复制两种,hash分布指定一个或多个字段按照其散列值将数据均匀分布在多个数据节点,这就要求指定的分布列的值尽可能离散,尽量选择数据基值较高的列作为分布列,可以保证数据分布较为均匀避免出现严重的散列冲突,对于全表扫描、数据关联等场景会提供较好的节点数据流转能力,eg:选择条码、ID号等唯一识别的数据,或当不具有唯一键时选择多个列作组合分布列进行数据分布。当数据量较小时,没有必要将数据分布到所有节点,可以选择建立复制表的方式,复制表指由于节点数据不共享会将表数据在各份节点进行存储即以空间换时间,集群节点较多且数据较大会造成空间浪费的情况,复制表的好处是当用到复制表时不需要从其他节点获取对应数据扫描当前节点就可获取所需数据,减少了数据流动可能造成的阻塞、延迟的情况。
然后就是存储方式的选择,列存|行存
图片转载,侵权即删。

图片转载,侵权即删。

由上图可看到,行存与列存按照字面意思理解就为按行存储和按列存储,按行存储就是将以行为单位的数据连续存储,数据读取时需将所有行数据读出I/O上会有浪费,按列存储为将数据列连续存储,数据读取时可以按照字段对需要列进行读取,不需要读取多余数据,减少数据块读取提高查询速率,也可以进行数据压缩节省存储空间,但当数据需要增删时,需要较行存更多的I/O。


http://chatgpt.dhexx.cn/article/iDnnVekE.shtml

相关文章

数据库优化之索引

一、什么是索引 索引是对数据库表中一列或多列的值进行排序的一种结构数据,使用索引可快速访问数据库表中的特定信息。 数据库索引是创建在表的某列上的,并且存储了这一列的所有值。同时存储了指向表中的相应行的指针。 二、索引的分类 唯一索引 唯一…

数据库性能优化方案

数据库优化方案 前言数据库性能优化方案SQL 调优表结构优化硬件优化架构优化分库分表详解分库单应用单数据库多应用单数据库多应用多数据库 分表水平拆分和垂直拆分单库内拆分和多库拆分 分库分表带来的复杂性跨库关联查询分布式事务排序、分页、函数计算问题分布式 ID多数据源…

Escaping closure captures non-escaping parameter 'xx'

新版的Swift闭包做参数默认是noescaping,不再是escaping。 如果函数里执行该闭包,要添加escaping。

Escaping closure captures non-escaping parameter ‘findPeripheral‘

文章目录 1.问题2.原因和解决参考连接 1.问题 2.原因和解决 逃逸闭包前面没有加escaping关键字,加上就可以了,如下图 参考连接 stack overflow 官方文档:Escaping Closures

[plugin:commonjs] Unexpected ‘/‘. Escaping special characters with \ may help.错误分析

错误原因:样式表里使用了//作注释 解决办法:把‘//tab样式’去掉就可以了 补充:css中注释使用‘/**/’

swift3.0中@escaping 和 @noescape 的含义

swift3.0中escaping 和 noescape 的含义 开始用swift语言是很容易的,而且它确实是一门很吸引人的语言。但是随着你频繁的使用,你会逐渐接触到swift更加复杂的结构. 在swift2中,你可能遇到过noescape属性,你有没有花一点时间去理解…

SwiftUI 内功之 ViewBuilder 和escaping 组合使用传递View (教程含源码)

实战需求 SwiftUI 内功之 ViewBuilder 和escaping 组合使用传递View 本文价值与收获 看完本文后,您将能够作出下面的界面 看完本文您将掌握的技能 ViewBuilderescaping基础知识 ViewBuilder 一个自定义参数属性,用于从闭包构造视图。 struct ViewBuilder总览 您通常将…

quote mysql_【原创】11. MYSQL++ 之 Quoting 与 Escaping

1. 综述 其实一看到这两个单词的时候我有点莫名其妙,可能英语没有学好,我的理解就是quoting是“引用”的意思,而Escaping是“逃脱”的意思。后来在看到了作者的TUTORIAL之后才大致明白了两者的意思。 QUOTING大白话就是为SQL语句打上单引号。…

错误日志:Syntax Error: Error: Unexpected ‘/‘. Escaping special characters with \ may help.

在运行Vue项目的时候出现错误: ERROR Failed to compile with 1 error 9:55:33error in ./src/components/index/SimpleHeader/index.vue?vue&t…

swift_041(Swift的@noescape和@escaping)

noescape在swift3.0中已经被废弃,在swift3.0中noescape被用作一个默认值。 escaping属性写在参数类型的前面而不是参数名称的前面。这是swift3里一个新的点。 这里需要先介绍一下escape的概念。当一个闭包当做一个参数传进函数里,这个闭包是在这个函数执…

swift函数参数指针传递inout和@escaping冲突的解决方法

这里写目录标题 需求解决方法容易产生的问题总结 今天深入解决关于函数参数指针的问题。问题是这样,我在swift的一个函数里面,参数里需要传递一个指针类型的Int,但是这个函数里面还有一个逃逸闭包escaping,于是就会报错这样:Escap…

Using the “escape“ directive (legacy escaping) is not allowed when auto-escaping is on with a markup

springboot 2.3.0版本以上&#xff0c;springboot自动引用freemarker模板文件的后缀从.ftl变成了.ftlh <!DOCTYPE html> <#escape x as x?html> <#include "../common/macro.ftl"> <html lang"en"> </html> </#escape&…

Escaping closure captures non-escaping parameter ‘xx‘

新版的Swift闭包做参数默认是noescaping&#xff0c;不再是escaping。 如果函数里执行该闭包&#xff0c;要添加escaping。

Swift中的逃逸闭包(@escaping )与非逃逸闭包(@noescaping)

逃逸闭包 概念&#xff1a;一个接受闭包作为参数的函数&#xff0c;该闭包可能在函数返回后才被调用&#xff0c;也就是说这个闭包逃离了函数的作用域&#xff0c;这种闭包称为逃逸闭包。当你声明一个接受闭包作为形式参数的函数时&#xff0c;你可以在形式参数前写escaping来…

VMware创建Linux虚拟机之(三)Hadoop安装与配置及搭建集群

Hello&#xff0c;world&#xff01; &#x1f412;本篇博客使用到的工具有&#xff1a;VMware16 &#xff0c;Xftp7 若不熟悉操作命令&#xff0c;推荐使用带GUI页面的CentOS7虚拟机 我将使用带GUI页面的虚拟机演示 虚拟机&#xff08;Virtual Machine&#xff09; 指通过…

hadoop安装及简单的使用

hadoop安装及简单的使用 一、hadoop运行环境搭建二、hadoop 目录结构三、hadoop 本地模式四、hadoop 伪分布式模式五、伪分布式 YARN 运行六、伪分布式启动历史服务器七、伪分布式配置日志的聚集八、hadoop 集群模式 一、hadoop运行环境搭建 1.环境准备 安装 hadoop 需要使用 …

hadoop安装(window10)

一、下载和winutils 1.下载&#xff1a;http://archive.apache.org/dist/hadoop/core/ 官网下载&#xff1a;http://hadoop.apache.org/releases.html &#xff08;提供最新的几个版本&#xff09; https://github.com/steveloughran/winutils&#xff08;windows安装需要&…

Hadoop安装与配置

第一步&#xff1a;装虚拟机 我把hadoop安装需要的文件放在下面大家自行去取&#xff1a; 百度网盘 请输入提取码 提取码&#xff1a;8888 由于centos镜像文件太大传不上去需要的话可以加我qq:364960241 目录 第一步&#xff1a;装虚拟机 第二步&#xff1a;配置静态网络…

基于CentOS虚拟机的Hadoop安装教程(自用备忘)

该博文是用于记录Hadoop的安装过程&#xff0c;且记录其中出现的一些问题&#xff0c;防止日后遗忘 实验环境&#xff1a; 虚拟机&#xff1a;CentOS7Hadoop&#xff1a;3.3.2java&#xff1a;java 8u331下载连接&#xff1a; CentOS&#xff1a;centos-7-x86_64-dvd-2009.iso…

Hadoop安装与配置详细教程

【确保服务器集群安装和配置已经完成&#xff01;】 前言 请根据读者的自身情况&#xff0c;进行相应随机应变。 我的三台CentOS7服务器&#xff1a; 主机&#xff1a;master&#xff08;192.168.56.110&#xff09; 从机&#xff1a;slave0&#xff08;192.168.56.111&…