博客
关于我
如何设计好分布式数据库,这个策略很重要不信你点开!
阅读量:134 次
发布时间:2019-02-26

本文共 1490 字,大约阅读时间需要 4 分钟。

GaussDB(for openGauss)是一款分布式架构,核心数据分布在各个数据节点(DN)上。优秀的数据分布策略是分布式数据库设计中最关键的环节。

数据库是应用和计算机系统的核心组成部分。就像人类的大脑没有了记忆一样,没有数据库,信息也无法共享。这使得设计一款高效易用的数据库变得尤为重要。

GaussDB(for openGauss)作为一款企业级分布式数据库,具备分布式强一致、有效降低容灾成本、支持PB级海量数据、智能诊断等特点,是当前备受关注的主流数据库。如何更好地设计分布式数据库的数据分布策略?首先了解GaussDB的基本架构有助于后续分析。

GaussDB的架构采用了典型的“share nothing”分布式架构。数据通过一定规则(如hash、list或range等)分散存储到不同的数据节点上,查询时多个节点协同参与计算。数据节点可以通过扩展来支持更多需求,上层由协调节点(CN)负责SQL解析和转发。

从架构图可以看出,主要包括协调节点、数据节点和集群类节点(其中全局事务管理器最为重要)。协调节点负责SQL解析和转发,类似于proxy角色;数据节点负责数据存储和计算;全局事务管理器则负责全局事务的读一致性保证。

接下来探讨分布式SQL执行过程。GaussDB的执行过程通过分片和分布式查询优化性能。以下是具体流程:

  • SQL解析与分片:协调节点解析SQL,根据分片规则将查询分配到相应的数据节点。
  • 数据节点执行:每个数据节点执行对应的分片,利用本地索引加速查询。
  • 结果汇总:协调节点收集各数据节点的结果,进行排序、合并,最终返回给客户端。
  • 在电子商城场景中,订单、支付方式、快递公司等信息的存储和关联是一个典型的分布式数据库应用。以下是具体设计步骤:

  • 逻辑模型设计:定义表结构,明确各表之间的关系。
  • 功能设计:根据业务需求编写SQL查询,例如查看子订单列表或详情。
  • 物理模型设计:根据数据特点选择合适的存储策略。电子商城订单数据量大,传统主备库模式难以满足需求。GaussDB支持跨节点扩展,能够处理PB级数据。
  • 订单表(A类数据)与支付方式表(B类数据)之间存在关联。A类数据同客户数、时间相关,B类数据变化较小。如何在分布式环境中实现高效关联?答案在于选择合适的分布策略。

    GaussDB支持两种主要分布策略:复制表和分布表。

    • 复制表:每个数据节点都保留完整表副本,适用于需要全局关联的场景。
    • 分布表:每个数据节点仅存储表的一部分分片,适用于高并发读写和分布式查询。

    以下是具体操作示例:

  • 创建复制表:
  • create table region1(ctid_value int) distribute by replication;
    1. 创建分布表:
    2. create table region2(ctid_value int) distribute by hash(ctid_value);

      在电子商城中,订单表和子订单表适合用分布表,支付方式表和快递公司表适合用复制表。这种选择基于以下原则:

      • 分布键选择:选择distinct值多的列,避免木桶效应。优先选择Join或Group列作为分布列,减少数据节点间通信。
      • 避免数据广播:通过合理选择分布列,减少不同数据节点之间的交互,提升性能。

      在实际操作中,需注意以下问题:

      • 数据倾斜:通过检查元组分布,及时调整分布列。
      • 表结构优化:不支持在线调整分布列,需重新创建表。

      总之,GaussDB的数据分布策略设计需要结合业务需求和数据特点,通过合理选择分布策略和分布键,避免数据广播和倾斜,确保数据库性能最大化。

    转载地址:http://mlqu.baihongyu.com/

    你可能感兴趣的文章
    OpenCV(1)读写图像
    查看>>
    OpenCV:不规则形状区域中每种颜色的像素数?
    查看>>
    OpenCV:概念、历史、应用场景示例、核心模块、安装配置
    查看>>
    OpenDaylight融合OpenStack架构分析
    查看>>
    OpenERP ORM 对象方法列表
    查看>>
    openEuler Summit 2022 成功举行,开启全场景创新新时代
    查看>>
    openEuler 正式开放:推动计算多样化时代的到来
    查看>>
    OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_openeuler切换root用户_su:拒绝权限_passwd: 鉴定令牌操作错误---国产瀚高数据库工作笔记001
    查看>>
    OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_踩坑_安装以后系统无法联网_启动ens33网卡---国产瀚高数据库工作笔记002
    查看>>
    OpenFeign 入门与实战
    查看>>
    OpenFeign源码学习
    查看>>
    OpenFeign组件声明式服务调用
    查看>>
    openfeign远程调用不起作用解决_使用Spring Boot的spring.factories进行注入---SpringCloud Alibaba_若依微服务框架改造---工作笔记007
    查看>>
    openfire开发(四)消息拦截器
    查看>>
    openfire源码解读之将cache和session对象移入redis以提升性能
    查看>>
    Openfire身份认证绕过漏洞复现+利用(CVE-2023-32315)
    查看>>
    OpenForest 开源项目安装与使用指南
    查看>>
    OpenGL glBlendFunc() 设置颜色混合 透明度叠加计算
    查看>>
    opengl 教程(15) 摄像机控制(2)
    查看>>
    opengl 深度详解,多重采样时,如何在OpenGL纹理中解析深度值?
    查看>>