【GaussDB(DWS)】数据分布式存储-三种类型的表

@toc

一、环境说明

  1. 华为数据仓库服务DWS,集群版本8.1.3.320
  2. 集群拓扑结构:
    在这里插入图片描述

二、数据分布式方式

DWS采用水平分表的方式,将业务数据表的元组打散存储到各个节点内。这样带来的好处在于,查询中通过查询条件过滤不必要的数据,快速定位到数据存储位置,可极大提升数据库性能。
水平分表方式将一个数据表内的数据,按合适分布策略分散存储在多个节点内,DWS支持如表1所示的数据分布策略。用户可在CREATE TABLE时增加DISTRIBUTE BY参数,来对指定的表应用数据分布功能。

分布式策略如下
在这里插入图片描述

三、实验验证

  1. 以下操作是在gsql上,使用系统用户dbadmin登录,登录语句如下:
    gsql -d postgres -p 8000 -h xxx.249.99.67 -U dbadmin -W xxxxx@1234 -r
    
    注意:在dws数仓下,如使用dbadmin登录,默认的schema是与用户同名的schema,即dbadmin,这点与openGauss和华为GaussDB 云数据库是有区别的,后两者如不指定的情况下使用的是public。
  2. 创建Replication复制表
    • 创建复制表
      create table t10(id int not null primary key,name varchar(50)) distribute by replication;
      
      提示如下:

      NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index “t10_pkey” for table “t10”
      CREATE TABLE
      postgres=>

    • 查看表结构

      postgres=> \d+ t10;
      Table “dbadmin.t10”
      Column | Type | Modifiers | Storage | Stats target | Description
      --------±----------------------±----------±---------±-------------±------------
      id | integer | not null | plain | |
      name | character varying(50) | | extended | |
      Indexes:
      “t10_pkey” PRIMARY KEY, btree (id) TABLESPACE pg_default
      Has OIDs: no
      Distribute By: REPLICATION
      Location Nodes: ALL DATANODES
      Options: orientation=row, compression=no

    • 添加数据,添加6条元组
      insert into t10 values(1,'test1'),(2,'test2'),(3,'test3'),(4,'test4'),(5,'test5'),(6,'test6');
      
    • 查看集群数据节点
      SELECT node_name,node_type,node_host FROM pgxc_node where node_type='D';
      
      结果如下:
        node_name   | node_type |   node_host
      --------------+-----------+---------------dn_6001_6002 | D         | 172.16.80.96dn_6003_6004 | D         | 172.16.89.109dn_6005_6006 | D         | 172.16.90.239
      (3 rows)
      
    • 查看数据分布情况
      execute direct on(dn_6001_6002) 'select * from t10';
      execute direct on(dn_6003_6004) 'select * from t10';
      execute direct on(dn_6005_6006) 'select * from t10';
      
      结果如下:每个DN节点上都各自拥有6条数据,即全量数据
      postgres=> execute direct on(dn_6001_6002) 'select * from t10';id | name
      ----+-------1 | test12 | test23 | test34 | test45 | test56 | test6
      (6 rows)postgres=> execute direct on(dn_6003_6004) 'select * from t10';id | name
      ----+-------1 | test12 | test23 | test34 | test45 | test56 | test6
      (6 rows)postgres=> execute direct on(dn_6005_6006) 'select * from t10';id | name
      ----+-------1 | test12 | test23 | test34 | test45 | test56 | test6
      (6 rows)
      
  3. 创建Hash表
    • 创建Hash表
      create table t11(id int not null,name varchar(50)) distribute by hash(id);
      
    • 查看表结构
      postgres=> \d+ t11Table "dbadmin.t11"Column |         Type          | Modifiers | Storage  | Stats target | Description
      --------+-----------------------+-----------+----------+--------------+-------------id     | integer               | not null  | plain    |              |name   | character varying(50) |           | extended |              |
      Has OIDs: no
      Distribute By: HASH(id)
      Location Nodes: ALL DATANODES
      Options: orientation=row, compression=no
      
    • 添加测试数据
      insert into t11 values(1,'test1'),(2,'test2'),(3,'test3'),(4,'test4'),(5,'test5'),(6,'test6');
      
    • 查看数据分布情况
      postgres=> execute direct on(dn_6001_6002) 'select * from t11';id | name
      ----+-------3 | test3
      (1 row)postgres=> execute direct on(dn_6003_6004) 'select * from t11';id | name
      ----+-------1 | test12 | test24 | test45 | test5
      (4 rows)postgres=> execute direct on(dn_6005_6006) 'select * from t11';id | name
      ----+-------6 | test6
      (1 row)
      
      注意:这里看起来是没有均衡分布的,因其采用的是一致性hash算法,即hash(文件或服务器ip) % 232,是对232取模,具体算法请参考:一致性hash算法
      一般Hash表针对的是大数据量的情况下,一般是至少1000000条数据。
  4. 创建Roundrobin 轮询表
    • 创建表,这种创建Roundrobin表的方式是一种隐式创建法。
      create table t12(id int not null,name varchar(50));
      
      会打印提示信息:
      NOTICE:  The 'DISTRIBUTE BY' clause is not specified. Using round-robin as the distribution mode by default.
      HINT:  Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
      
    • 查看表结构
      postgres=> \d+ t12Table "dbadmin.t12"Column |         Type          | Modifiers | Storage  | Stats target | Description
      --------+-----------------------+-----------+----------+--------------+-------------id     | integer               | not null  | plain    |              |name   | character varying(50) |           | extended |              |
      Has OIDs: no
      Distribute By: ROUND ROBIN
      Location Nodes: ALL DATANODES
      Options: orientation=row, compression=no
      
    • 添加数据
      insert into t12 values(1,'test1'),(2,'test2'),(3,'test3'),(4,'test4'),(5,'test5'),(6,'test6');
      
    • 查看数据分布情况
      postgres=> execute direct on(dn_6001_6002) 'select * from t12';id | name
      ----+-------3 | test36 | test6
      (2 rows)postgres=> execute direct on(dn_6003_6004) 'select * from t12';id | name
      ----+-------1 | test14 | test4
      (2 rows)postgres=> execute direct on(dn_6005_6006) 'select * from t12';id | name
      ----+-------2 | test25 | test5
      (2 rows)
      
    • 补充:显示创建roundrobin表,如下所示:
      create table t13(id int not null,name varchar(50)) with(orientation=row) distribute by roundrobin;
      
      查看表结构:
      postgres=> \d+ t13Table "dbadmin.t13"Column |         Type          | Modifiers | Storage  | Stats target | Description
      --------+-----------------------+-----------+----------+--------------+-------------id     | integer               | not null  | plain    |              |name   | character varying(50) |           | extended |              |
      Has OIDs: no
      Distribute By: ROUND ROBIN
      Location Nodes: ALL DATANODES
      Options: orientation=row, compression=no
      

三种类型表测试完毕,感受是纸上得来终觉浅,绝知此事要躬行。实践出真知,理论需要实践来证明,学习,道阻且长。继续加油吧!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/14221.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于IIS安全设置http能访问https不能访问的解决方案

最近折腾IIS,发现网站的http能访问但是https不能访问。 我确认所有关于HTTPS的配置我都配置正确了,结果还是不能访问,一番折腾发现,服务器本身的防火墙和阿里云服务器的安全组规则不是一回事。改完防火墙也没有用,重要…

nginx+Tomcat实现负载均衡、动静分离集群部署

一、负载均衡原理二、动静分离原理三、NginxTomcat负载均衡、动静分离的操作步骤3.1 部署Nginx 负载均衡器3.2 部署2台Tomcat 应用服务器3.2.1 Tomcat服务器1:192.168.147.101:80803.2.2 Tomcat服务器2:192.168.147.102:8080 192.168.147.102:8081 3.3 动…

leetcode 654. 最大二叉树

2023.7.9 又是一道递归构造二叉树的题,和昨天做的那道题从中序与后序遍历序列构造二叉树类似,5分钟AC了。 大致思路就是通过找到数组中的最大值,并将其作为根节点,然后递归地构建左子树和右子树,最终返回整个最大二叉树…

聊聊不同集群的微服务如何通过feign调用

前言 之前业务部门的某项目微服务调用关系如下图 后因业务改造需要,该项目需要将服务A部署到另外一个集群,但服务A仍然需要能调用到服务B,调用关系如下图 之前调用方式是负责服务B的开发团队提供相应的feign客户端包给到服务A开发团队&…

进程间通信的介绍

目录 进程间通信的目的 进程间通信发展 进程间通信分类 进程间通信的分析 进程间通信的目的 数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息&a…

星辰天合公司产品完成阿里云 PolarDB 数据库产品生态集成认证

近日,XSKY星辰天合旗下产品与阿里云 PolarDB 开源云原生数据库展开产品集成认证测试,并获得阿里云颁发的产品生态集成认证证书。 测试结果表明,星辰天合旗下的融合计算管理平台 XHERE(V2)、统一数据平台 XEDP&#xf…

基于Spring Boot的医院信息管理系统设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频: 基于Spring Boot的医院信息管理系统设计与实现 使用技术: 前端:html css javascript jQuery ajax thymeleaf 后端:Java springboot框架 mybatis 数据库:mysql5.7 开发工具:IDEA…

Java 定义返回一个不能被修改、删除元素的List

为啥突然分享下这个&#xff0c;也是从mybatis源码看到了&#xff0c;所以想分享下&#xff1a; org.apache.ibatis.plugin.InterceptorChain 使用 Collections.unmodifiableList(); 示例&#xff1a; public static void main(String[] args) {List<String> canNotEdit…

C数据结构与算法——单链表 应用

实验任务 (1) 掌握单链表结构及其 C 语言实现&#xff1b; (2) 掌握插入、删除等基本算法&#xff1b; (3) 掌握单链表的基本应用&#xff08;将两个有序线性表合并为一个有序表&#xff09;。 实验内容 使用 C 语言实现单链表的类型定义与算法函数&#xff1b;编写 main()函…

分布式应用之监控Zabbix

分布式应用之监控Zabbix 一、什么是Zabbix? ●zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 ●zabbix 能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快速定位/解决存…

解决Ruoyi单体版本集成Echarts多图表时在Tab模式下不展示问题

目录 背景 一、Tab拆分后无法展示 1、环境简介 2、原始报表功能说明 3、tab切分遇到的问题 二、问题分析及解决 1、问题分析 2、问题解决 3、初始化时图表渲染 4、Tab切换时重渲 总结 背景 最近在使用ruoyi的单体化版本进行Echarts多图表展示时遇到一个问题&#xff0c;r…

【IMX6ULL驱动开发学习】15.IMX6ULL驱动开发问题记录(sleep被kill_fasync打断)

发现问题的契机&#xff1a; 学习异步通知的时候&#xff0c;自己实现一个功能&#xff1a;按键控制蜂鸣器&#xff0c;同时LED灯在闪烁 结果&#xff1a;LED好像也同时被按键控制了 最后调试结果发现&#xff1a; 应用层的sleep被驱动层的kill_fasync打断&#xff0c;所以sle…