关于sql:PolarDBX-20使用一个透明的分布式数据库是一种什么体验

5次阅读

共计 3520 个字符,预计需要花费 9 分钟才能阅读完成。

简介: 通明分布式,是 PolarDB- X 行将公布的能力,它能让利用在应用 PolarDB- X 的过程中,犹如应用单机数据库个别的体验。与传统的中间件类型的“分布式数据库”相比,有了通明分布式能力的 PolarDB-X,不再须要利用思考分区键的概念,利用能够齐全将单机 MySQL 上开发的建表语句、利用代码间接迁徙到 PolarDB- X 上运行起来。本文将为大家介绍 PolarDB- X 通明分布式的新体验。

PolarDB-X 2.0 视频解读:https://yqh.aliyun.com/live/polardbx2021

通明分布式,是 PolarDB- X 行将公布的能力,它能让利用在应用 PolarDB- X 的过程中,犹如应用单机数据库个别的体验。

与传统的中间件类型的“分布式数据库”相比,有了通明分布式能力的 PolarDB-X,不再须要利用思考分区键的概念,利用能够齐全将单机 MySQL 上开发的建表语句、利用代码间接迁徙到 PolarDB- X 上运行起来。

本文将为大家介绍 PolarDB- X 通明分布式的新体验。

在 PolarDB- X 上装置一个 WordPress

WordPress 是一个开源的博客软件,它应用 MySQL 作为其数据库。操作是在 PolarDB- X 上装置一个 WordPress,来体验 PolarDB- X 的通明分布式能力。

咱们将遵循简略的三步走:

  1. 不批改 DDL 间接建表
  2. 不批改利用间接跑起来
  3. 做下压测,做下调优

总结如下:

  1. 应用官网的 WordPress 镜像,不做任何批改,其安装程序就能主动的在 PolarDB- X 上实现建表、数据初始化等工作,其应用的都是规范的 MySQL 语法。
  2. 对此 WordPress 进行压测,PolarDB- X 的各项监控数据显示,各节点处于的负载、数据量均处于平衡的状态。
  3. 通过 PolarDB- X 提供的 SQL 剖析、DAS 等工具,能够不便的找到零碎中热点 SQL。
  4. DBA 能够间接通过创立索引、批改数据分布等 DDL 语句对系统性能做进一步的优化,不须要批改利用。

PolarDB- X 实现通明分布式的武器

上面为大家分享下,PolarDB- X 是如何实现通明分布式的。

通明数据分区

PolarDB- X 是一个典型的 Share Nothing 的分布式数据库,其简化架构如下:

其外围组件为无状态的计算节点 CN,与有状态的存储节点 DN。

要理解 PolarDB- X 的通明分布式能力,首先要理解数据在 PolarDB- X 上是如何散布的。

在 PolarDB- X 中,一个表由多个索引组成,包含主键、二级索引等。PolarDB- X 会对每个索引进行独立的进行分区,其分区键为索引的 key。

例如一个典型的电商场景,订单表,领有一个主键(id),两个索引(seller\_id 与 buyer\_id):

create table orders (
   id bigint, 
   buyer_id varchar comment '买家', 
   seller_id varchar comment '卖家',
   primary key(id),
   index sdx(seller_id),
   index bdx(buyer_id)
)
  • 对于主键索引,会依照 id 对其进行分区
  • 对于索引 sdx,会依照 seller\_id 进行分区
  • 对于索引 bdx,会依照 buyer\_id 进行分区

如下图所示:

对索引进行分片之后,PolarDB- X 会将这些分片打散到不同的存储节点里,并会依照数据量等信息进行负载平衡,如下图所示:

在 PolarDB- X 中,建表语句中能够不思考分区键,PolarDB- X 也能主动的对表进行分片与负载平衡。

因而,利用迁徙 PolarDB- X 时,能够将单机 MySQL 中的建表语句导出,不须要批改间接在 PolarDB- X 中执行即可。

通明的分布式事务

分布式事务是 PolarDB- X 中的最重要的根底能力,它宽泛的利用于业务内,防止了业务对事务代码进行革新;同时,PolarDB- X 外部也用事务来实现索引。

PolarDB- X 的分布式事务有以下几个特色:

  1. 与 Spanner 一样,满足内部一致性这种最强的一致性级别
  2. 语法与 MySQL 齐全兼容,无需对利用进行革新
  3. 行为上反对兼容 MySQL 的 RC 与 RR 级别

PolarDB- X 分布式事务的原理咱们专栏有很多介绍的文章,在此不再赘述。对其原理感兴趣的同学能够参考这几篇文章:

https://zhuanlan.zhihu.com/p/329978215

https://zhuanlan.zhihu.com/p/338535541

https://zhuanlan.zhihu.com/p/355413022

Online DDL

PolarDB- X 反对类型丰盛的 Online DDL,这里介绍一些有代表性的 DDL 类型。

索引保护

与单机 MySQL 的索引有所差别,PolarDB- X 的索引均为全局索引,蕴含以下几种类型:

  • 一般索引
  • 惟一索引
  • 聚簇索引

其中聚簇索引是 PolarDB- X 绝对于 MySQL 的一种新类型的索引,它会蕴含表中的所有列,从而防止了回表的代价。

PolarDB- X 中对索引的创立都通过 DDL 来实现,并且都是 Online 的,不会阻塞业务。

例如:

  • 创立一个一般的索引:CREATE INDEX idx1 ON t1(name)
  • 创立一个聚簇的索引:CREATE CLUSTERED INDEX idx1 ON t1(name)

INSTANT ADD COLUMN

加列操作是业务中最为常见的 DDL 类型。在 MySQL 中,加列操作的耗时是与数据量相干的(MySQL8.0 中在表的最初面加列是 INSTANT 的)。

在 PolarDB- X 中,在任意地位加列都是 INSTANT 的,这个代表加列操作为恒定的秒级耗时,与数据量无关,不会对业务产生任何影响。

分区调整

PolarDB- X 反对 4 种表的散布策略,Hash、Range、List、Broadcast。因为 Hash 能防止间断写入的热点,PolarDB- X 默认应用 Hash 策略,大多数状况下,此策略可能很好的满足零碎的性能须要。

然而如果业务在运行期间,心愿抉择适合的分区策略来晋升零碎性能,在 PolarDB- X 中能够不便的通过 DDL 语句进行调整,PolarDB- X 会依照新的分区策略从新组织表的数据。

例如:

  • 批改表的分区策略为 Hash:ALTER TABLE t1 PARTITION BY HASH(name)
  • 批改表的分片数为 32:ALTER TABLE t1 PARTITION BY HASH(name) PARTITIONS 32
  • 将表变为播送表:ALTER TABLE t1 BROADCAST
  • 批改表的分区策略为 RANGE:ALTER TABLE t1 PARTITION BY RANGE(id)

任意两种分区策略之间都能够通过 DDL 语句进行转换:

回填速度自适应

想必很多同学有过这样的教训:一个超大的表进行 DDL 操作,因为数据量比拟大,这个 DDL 操作无奈在一天内实现,为了防止对业务影响,人肉在白天业务高峰期降临的时候,调整参数,升高 DDL 的回填速度,早晨在业务高峰期完结后,进步 DDL 的回填速度。

PolarDB- X 中的回填,会依据以后的零碎负载,主动调节速度。

例如:

在这个例子中,分了四个阶段:

  1. 开始没有业务负载,DDL 回填速度回升到 25W 行 /s
  2. 业务负载开始回升,DDL 回填速度迅速降落到 13W 行 /s
  3. 业务 TPS 稳固在 1W5,DDL 回填速度稳固在 13W 行 /s
  4. DDL 完结后,业务 TPS 稳固在 1W6

从这个例子中,咱们能够看到 PolarDB-X DDL 的回填速度会主动依据业务负载进行调整,并且 DDL 期间,对业务的 TPS 影响很小。

让 Online 更 Online

为了进一步缩小 DDL 期间对业务的影响,PolarDB- X 还应用了多项技术,例如:

  • 元数据多版本,详见:https://zhuanlan.zhihu.com/p/347885003
  • 可暂停、可勾销
  • MDL 死锁检测

咱们会在今后的文章里具体介绍这些技术的细节,请关注咱们的知乎专栏:https://www.zhihu.com/org/polardb-x

总结

PolarDB- X 的通明分布式能力,将极大的缩小利用从单机数据库迁徙分布式数据库的老本。同时,咱们将来也会让它变得更通明,咱们正在做的一些事件包含:

  • 更精密的调度策略
  • 热点数据的可视化展现,与 SQL 审计剖析联动的智能诊断
  • 在有全局索引的状况下,反对分区级的 truncate
  • 数据的按工夫滚动、清理
  • 等等

版权申明: 本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

正文完
 0