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

news2024/9/20 20:27:29

@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.96
       dn_6003_6004 | D         | 172.16.89.109
       dn_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 | test1
        2 | test2
        3 | test3
        4 | test4
        5 | test5
        6 | test6
      (6 rows)
      
      
      postgres=> execute direct on(dn_6003_6004) 'select * from t10';
       id | name
      ----+-------
        1 | test1
        2 | test2
        3 | test3
        4 | test4
        5 | test5
        6 | test6
      (6 rows)
      
      
      postgres=> execute direct on(dn_6005_6006) 'select * from t10';
       id | name
      ----+-------
        1 | test1
        2 | test2
        3 | test3
        4 | test4
        5 | test5
        6 | test6
      (6 rows)
      
  3. 创建Hash表
    • 创建Hash表
      create table t11(id int not null,name varchar(50)) distribute by hash(id);
      
    • 查看表结构
      postgres=> \d+ t11
                              Table "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 | test1
        2 | test2
        4 | test4
        5 | 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+ t12
                                      Table "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 | test3
        6 | test6
      (2 rows)
      
      
      postgres=> execute direct on(dn_6003_6004) 'select * from t12';
       id | name
      ----+-------
        1 | test1
        4 | test4
      (2 rows)
      
      
      postgres=> execute direct on(dn_6005_6006) 'select * from t12';
       id | name
      ----+-------
        2 | test2
        5 | test5
      (2 rows)
      
    • 补充:显示创建roundrobin表,如下所示:
      create table t13(id int not null,name varchar(50)) with(orientation=row) distribute by roundrobin;
      
      查看表结构:
      postgres=> \d+ t13
                                      Table "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.coloradmin.cn/o/733630.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[工业互联-18]:常见EtherCAT主站方案:SOEM的Windows/Linux解决方案

目录 第1章 SOEM 简介 第2章 SOEM创建EtherCAT主站 2.1 支持Linux和Windows操作系统 2.2 SOEM创建EtherCAT主站的步骤 第3章 QT添加SOEM主站 第1章 SOEM 简介 SOEM (Simple Open EtherCAT Master) 是一种开源的EtherCAT主站协议栈。 EtherCAT(Ethernet for C…

飞轮储能系统的建模与MATLAB仿真(永磁同步电机作为飞轮驱动电机)

简介 飞轮储能系统由于其高储能密度、高效率、轻污染的优点而越来越受到重视。飞轮储能系统以高速旋转的飞轮为依托,通过电力电子设备实现电能与动能的相互转化,从而在负载调峰、功率平抑、不间断电源等多领域都有很好的应用表现。 本文选用永磁同步电机…

基于simulink仿真车道偏离警告系统(附源码)

一、前言 此示例演示如何在视频序列中检测和跟踪道路车道标记,并在驾驶员穿过车道时通知驾驶员。该示例说明了如何使用霍夫变换、霍夫线和卡尔曼滤波器模块来创建线检测和跟踪算法。该示例使用以下步骤实现此算法:1) 检测当前视频帧中的车道…

计算机通信地址【图解TCP/IP(笔记六)】

文章目录 地址地址的唯一性地址的层次性 地址 通信传输中,发送端和接收端可以被视为通信主体。它们都能由一个所谓“地址”的信息加以标识出来。当人们使用电话时,电话号码就相当于“地址”。当人们选择写信时,通信地址加上姓名就相当于“地…

HarmonyOS学习路之开发篇—数据管理(数据存储管理)

数据存储管理概述 数据存储管理指导开发者基于HarmonyOS进行存储设备(包含本地存储、SD卡、U盘等)的数据存储管理能力的开发,包括获取存储设备列表,获取存储设备视图等。 基本概念 数据存储管理 数据存储管理包括了获取存储设备…

Vue3+Vite项目配置@路径别名

一、根目录下 vite.config.ts 文件中配置 import { resolve } from path;resolve: {// 设置文件./src路径为 alias: [{find: ,replacement: resolve(__dirname, ./src)}] }二、根目录下 tsconfig.json 文件中配置 //配置 "baseUrl": ".", "paths&qu…

【复习25-29题】【每天40分钟,我们一起用50天刷完 (剑指Offer)】第二十天 20/50

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

智能底盘(2) | 汽车制动系统的发展概述

摘要: 自汽车诞生以来,车辆制动系统就始终在实现汽车流畅操控、保障汽车安全等功能中起着决定性的作用。而制动系统本身也随着工业技术的变革和汽车行业的发展持续进化。 根据制动场景的区别,制动系统可以分为以下两类: 行车制动…

开源新项目Auto-Annotation,这你不了解一下

Auto-Annotation 一个注解实现对业务功能增强的注解集 项目简介 ​ 项目源码开源地址:点这里 ​ 对业务开发过程中经常遇见的一些通用场景进行注解封装,形成一系列比较通用的注解集,来满足日常开发需要。注解集随业务拓展不断更新中&#…

Qt6 第一天认识基本模块、附加模块、支持的平台、QML用户界面

文章目录 Qt6 焦点Qt6 核心-基本模块Qt6 附加模块Qt6 支持的平台Qt6 简介Qt6 消化用户界面 Qt6 焦点 Qt 5在很多年前发布,引入了一种新的声明方式来编写令人惊叹的用户界面。从那时起,我们周围的世界发生了很大的变化。 Qt 6将是Qt 5的延续,不…

插值查找(思路+代码)

变量和二分查找差不多,但是公式变了 公式: int mid left (right - left) * (indexValue -arr[left]) / ( arr[right] - arr[left]) 注意事项: 适用于数据量比较大,数据分布均匀的数据 代码: package search;impor…

回归预测 | MATLAB实现WOA-CNN鲸鱼算法优化卷积神经网络的数据多输入单输出回归预测

回归预测 | MATLAB实现WOA-CNN鲸鱼算法优化卷积神经网络的数据多输入单输出回归预测 目录 回归预测 | MATLAB实现WOA-CNN鲸鱼算法优化卷积神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 回归预测 | MATLAB实现WOA-CNN鲸鱼算法优化卷积…

34.RocketMQ之Broker端消息存储流程详解

highlight: arduino-light Broker消息存储概要设计 RocketMQ主要存储的文件包括Commitlog文件,ConsumeQueue文件,IndexFile文件。 RMQ把所有主题的消息存储在同一个文件中,确保消息发送时顺序写文件。 为了提高消费效率引入了ConsumeQueue消息…

Android studio 引入不了R包,手动引入显示红色。可以跑起来却没问题

之前在这个问题踩坑2次,遂记录一下。 问题是:工程里找不到自己包名的R,手动导入显示红色,Run起来倒是没问题 尝试过Clean,Rebuild,清缓存,重启,都没用。 最终发现是没有在 Android…

gitlab:(二)gitlab注册用户和邀请进入项目的问题

.新注册用户无法在管理员界面激活 在管理员界面无法进行管理,找不到相关的操作界面 当前gitlab版本 尝试降低gitlab版本 卸载之后删除残留文件 安装指定的低版本:gitlab-ce-12.7.5-ce.0.el7.x86_64.rpm yum install policycoreutils openssh-server op…

网络应用基础ENSP环境的安装(NETBASE第三课)

网络应用基础ENSP环境的安装(NETBASE第三课) eNSP(Enterprise Network Simulation Platform)是一款由华为提供的、可扩展的、图形化操作的网络仿真工具平台,主要对企业网络路由器、交换机进行软件仿真,完美呈现真实设备实景,支持大型网络模拟…

Markdown编辑器Vditor的基本使用以及在Vue3中使用

介绍 官网 GitHub 帮助文档 Vditor是一个Markdown编辑器组件(也支持富文本编辑器),可以嵌入到自己的Web应用中。 此Markdown编辑器支持三种模式(几乎没有一个Markdown编辑器同时支持这三种模式): 所见即所…

基于matlab消除视频流中摄像机运动的影响(附源码)

一、前言 此示例演示如何从视频流中删除摄像机运动的影响。 在此示例中,我们首先定义要跟踪的目标。在这种情况下,它是汽车的后部和车牌。我们还建立了一个动态搜索区域,其位置由最后一个已知的目标位置确定。然后,我们仅在此搜…

ChatGPT引导下的编程起航:零基础学会Python编程(ChatGPT版)

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言如何使用 ChatGPT对…

【C++】C++11之线程库

一、thread类 在 C11 之前,涉及到多线程问题,都是和平台相关的,比如 windows 和 linux 下各有自己的接 口,这使得代码的可移植性比较差 。 C11 中最重要的特性就是对线程进行支持了,使得 C 在 并行编程时不需要依赖第三…