用 PolarDB-X 开发应用 | 学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 快速学习用 PolarDB-X 开发应用

开发者学堂课程【PolarDB-X 开源人才初级认证培训课程用 PolarDB-X 开发应用学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/1075/detail/15542


用 PolarDB-X 开发应用


课程内容:

一、体验 Spring Boot+PolarDB-X 开发

二、体验 WordPress+PolarDB-X 建站

三、PolarDB-X 最佳实践

课程准备

能搭 PolarDB-X 实例,基于此条件开启课程内容


一、体验 Spring Boot+PolarDB-X 开发

找到 Spring Boot,进入 GUIDES。进入 Accessing data with MySQL内容,文档内容基于 MySQL 建立 Spring Boot 的开发框架。把 MySQL替换为 PolarDB-X,认为 PolarDB-X 是 MySQL 两者使用完全一致。

image.png

根据文档看使用步骤,第一步下载工程。

git clone

https://github.com/spring-guides/gs-accessing-data-m

ysgl.git

工程下载完毕如下

image.png

进入目录

cd into gs-accessing-data-mysql/initial

创建数据库

搭建好基于 K8S 的 PolarDB-X的实例,有一个 wumu-changeset实例,把实例的 MySQL 端口转化到本地。

kc get pxc

NAME VER GMS CN DN CDC PHASE DISK AGE

wumu-changeset 1/1 3/3 3/3-Running 170.9 GiB 8d

~kubectl port-forward svc/wumu-changeset

error: TYPE/NAME and list of ports are required for port-forward See 'kubectl port-forward -h' for help and examples

~ kubectl port-forward svc/wumu-changeset 3306

Forwarding from 127.0.0.1:3306 ->3306

Forwarding from [::1]:3306 -> 3306

测试 MySQL,MySQL 页面里。

image.png

根据官方文档建一个 db_example,已经创建库,执行语句。

配置 Spring Boot 数据库里的连接地址 COPY

src/main/resources/application.properties

spring.jpa.hibernate.ddl-auto=updatespring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/db_example spring.datasource.username=springuser spring.datasource.password=ThePassword

建一个 model,COPY 以下文件

src/main/java/com/example/accessingdatamysql/User.java

建一个 controller,COPY 以下文件src/main/java/com/example/accessingdatamysql/UserRepository.java

创建一个 application,COPY 以下文件src/main/java/com/example/accessingdatamysql/AccessingApplication.java

运行系统./gradlew bootRun

测试curl localhost:8080/demo/add-d name=first-d

Email=someemail@someeamil provider.com

image.png

看数据curl localhost:8080/demo/all

image.png

数据库中检查数据是否插入成功,插入成功。

image.png


二、体验 WordPress+PolarDB-X 建站

进入 WordPress 的 dockerhub 页面,根据引导搭建 WordPress。

docker pull 拉 WordPress 的计价

docker pull wordpress

Using default tag:lastest

image.png

启动 WordPress

docker run--name some-wordpress-p8081-d wordpressBe8f30ea2d6f832abbf6ef9623587f57ba93b97efe34a988c7c00541a1289df6

查看 WordPress,WordPress 安装引导页面如下,点击现在就开始

image.png

用户名 polardbx_root,密码 9q4ltt7bcl4d,数据库主机 localhost:3306

image.png

进WordPress库,库建好。

image.png

连接出错,重新改主机IP。

image.png

WordPress docker 拉取,本地的 MySQL 端口通过 K8S 转化到本地。

修改转化的地址

kubectl port-forward svc/wumu-changeset--address 30.225.188.151 3306

Forwarding from 30.225.188.151.3306->3306

30.225.188.151连WordPress

image.png

数据库配置成功,WordPress 默认 MySQL 连接,连接成功表明 PolarDB-X 可完全当作 MySQL 使用。

登录

image.png

打开一篇博客,文档更新。

image.png

查看文档,数据写到 PolarDB-X 中,WordPress 到此结束。

Spring Boot 和 PolarDB-X 两个框架默认使用 MySQL 开发,通过演示,进入后无脑复制,不用任何配置,可将 PolarDB-X 当作 MySQL使用。使用 PolarDB-X 非常简单,基本可当作 MySQL 使用。


三、PolarDB-X 最佳实践

1.PolarDB-X 架构

PolarDB-X 主要由数个部分组成,主要有 CN、DN、CDC、GMS。CN是计算节点,CN 是数据节点,GMS 元数据中心。CDC 产品中心的组件,负责和下游做数据同步,是全局 binlog 的组件。

组件应用打交道的是 CN,一条 SQL 发来后,经过 CN,CN 做基础校验、解析、执行优化。将优化后的 SQL 发到 DN,DN 做数据的执行,数据最终存在 DN 节点,通过 GMS 管理元数据。

image.png

打开 PolarDB-X.com 页面,开源的官方文档,如何选择应用端链接池。使用任何数据库,不管什么开发,第一件事配连接,配连接最主要的是配链接池。

之前配链接池,按照经验,配大概的数值。使用 PolarDB-X 可通过精确的公式,计算出需要多大的链接池。

PolarDB-X 分前端连接和后端连接,前端连接应用到 CN 连接,后端连接 CN 到 DN 的连接。用户不需要关心后端连接,只需关心前端连接,应用到 CN 的连接。

2.QPS 和 RT 的关系

QPS 是每秒的请求数,以秒为单位。RT 是响应时间,以毫秒为单位,与 QPS 差1000的倍数。PolarDB-X 是 MySQL 协议的,请求在每个连接上串行执行,不同连接上的请求可并行执行。单个连接的 QPS上限=1000/RT,1秒=1000毫秒,RT以毫秒为单位,连接 QPS 上限是1000个毫秒里能有多少执行的请求,1000/RT。单个 CN 的 QPS上限是单个连接的 QPS上限*连接数,平均RT为5毫秒,单个连接的QPS上限为200,如果应用预估需要的 QPS 为5000,至少建立250个连接。

3.连接数限制

image.png

PolarDB-X 收到请求后,CN 有一个网络模块做限权,权限通过后在CN 内部的线程池里分配一个线程,给连接做相应的请求。PolarDB-X默认维护一个1024大小的线程池,如果并发查询数量超过线程池大小,后续连接排队,连接不能无限大。

实例应用访问单个 CN 的 QPS 上限是单个连接的 QPS 上限MIN×连接数或线程池大小的最小值,以两者最小值的下行为准。

整体数据库QPS上限是单个连接的QPS上限xCN数量

4.示例

(1)示例1

问:查询的平均 RT 为10ms,理想情况下两节点 CN 能提供多少QPS?

答:平均 RT 为10ms,单个连接的QPS上限为100。理想情况下CN有1024线程值,100x1024*2=204800,理想情况下有204800个QPS上限。实际场景下不能做到所有 SQL 并发执行,204800是理想的上限值。

(2)示例2

问:在 CN 规格为16C的PolarDB-X实例上压测,CPU刚好跑满时,某查询的平均RT为5ms。仅考虑 CN 节点,支撑40w的 QPS 应当如何选择实例和设置应用端连接池?

答:平均 RT 为5ms,单个连接的 QPS 上限为200。应用端连接池大小设置为400000/200=2000,需要2000个连接支撑400000QPS。单个CN上限是1024,至少需要两个CN。通过计算,可精确计算出配连接池时,链接池怎样写,写多大。知道公式,可填链接池的数值。

AUTO 模式数据库与DRDS模式数据库。

常见的分布式数据库需要分库、分表键,需要手动管理分库、分表键规则。分布式数据库需要对数据库的数据分布,每张表的结构非常清晰,才能用好分布式数据库。PolarDB-X 提出透明分布式的概念,分布式的细节对用户透明,使用单机数据库,可使用分布式能力,极大降低用户使用分布式数据库的门槛。

从 PolarDB-X5.4.13版本开始,新增支持 AUTO 模式的数据库。对应老版本 DRDS 数据库,分库、分表数据库,用户需要手动管理,分库键和分表键。AUTO 模式的数据库用户可忘记分库、分表键,只需要建单表,不需要关心分表,使用更加方便。

创建数据库 CREATE DATABASE 时加一个参数 MODE AUTO,建出的库是自动分区的库,不带此参数默认建 DRDS 模式数据库。AUTO 数据库可给用户手动指定分区键、分区函数。

5.DRDS 模式数据库如下

image.png

执行键表语句,键表CREATE TABLE,一个字段、组件,键出的表是单表,表只存在于某个边上,CREATE TABLE的结构是一张单表。

SHOW FULL CREATE TABLE tb \G

***************1 row*********

Table: tb

Create Table: CREATE TABLE`tb`(

`a`int(11) NOT NULL,

`b`int(11) DEFAULT NULL,

PRIMARY KEY(`a`)

)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

1 row in set(0.02 sec)

6.AUTO 模式数据库如下

image.png

AUTO模式数据库使用同样的键表语句,键出后是分区表,默认用组件进行分区,数据自动在不同的CN之间均衡的打散。

通过SHOW FULL CREATE TABLE 看结构,PARTITION BY KEY(`a`) ,

PARTITIONS 是16,默认是16分区。此模式使用键单表的方式,键一个分区表。

SHOW FULL CREATE TABLE tb \G

***************1 row*********

TABLE:tb

CREATE TABLE: CREATE PARTITION TABLE`tb’(

a`int(11) NOT NULL,

`b`int(11) DEFAULT NULL,

PRIMARY KEY(`a`)

)ENGINE =InnoDB DEFAULT CHARSET=utf8mb4

PARTITION BY KEY(`a`)

PARTITIONS 16

1 row in set (0.01 sec)

AUTO 模式数据库使用方便,可手动指定分区函数,支持HASH、RANG

LIST 等分区函数,DRDS 模式只有HASH。两者的路由算法不同,路由算法是数据按照什么规则分散到不同的节点上,分散的规则叫做路由算法。DRDS 模式和AUTO模式有很大区别,DRDS 模式用简单的HASH做数据路由,新增变更区,所有数据都需要进行rehash,造成不必要的性能损耗。如果数据太大,构成非常慢。

分区表模式的算法使用range一致性HASH算法,做分区新增时,只需要改目标分区附近的数据,不需要改变所有数据,造成的影响非常小,非常灵活。

7.AUTO 模式典型场景

热点分裂,分布式数据库下最担心出现热点数据。淘宝里有大卖家和小卖家,大卖家的流量是其他小卖家的成千上万倍,访问大卖家的请求,常常影响访问小卖家。热点数据出现对整个分布式数据库进行损耗,所有资源集中到热点数据中,非热点数据分配不到资源。

AUTO 模式的解决方案,把热点数据迁移到新的分区,把分区移到单独 DN,DN 专门为热点数据提供服务。把热点数据分开,用专门 DN提供服务,不影响其他非热点数据。放在单独 DN,不能支撑业务,把热点数据再进行分区,热点数据打散后分散到其他 DN 节点上。进一步拆开热点,利用分布式的 LIST 能力处理请求。

8.分区调度

AUTO 模式有更灵活的调度力度,传统模式以库为单位,分库与分表的位置是强绑定的。表非常大,需要以分库级别把表迁移,分库很大,怎样迁都出现 DN 不均衡。

image.png

AUTO 可以分区为主进行迁移,P1数据量大,做与 DN 进行均衡,P1进行再划分,分为P1-1、P1-2,把P1-1移到另一个 DN 上,以分区为主做迁移,可灵活解决数据间不均衡问题。

9.TTL

有些业务随着数据的推移,不需要老数据。数据按修改时间进行分区,隔一个月分一个区,数据12个月自动过期,功能可很好满足TTL业务,按照分区自动删除过期的分区。

10.Locality

进一步指定数据放在哪里,特殊的业务场景需要把数据放到特定、就近的 DN 上。通过 Locality 参数把指定的库放到指定的 DN 上,把某一张逻辑表放到指定 DN 上。

可按某一分区做数据划分

TABLE orders_region(

t,

ry varchar(64),

/archar(64),

_time datetime not null)

[ON BY LIST COLUMNS(countrycity)

[TION p1 VALUES IN((China’'Hangzhou’),(China’'Beiiing))LOCALITY=

dn=xc-xdb-s-pxce)

[TION p2 VALUES IN ((United States’'NewYork’)(United StatesChicag

o))LOCALITY='dn=p

[TION p3 VALUES IN(('Russian’Moscow’))LOCALITY='dn=pxc-xdb-s-

pxcexample3'

11.性能

自动分区是否因为做自动构成导致性能损耗

image.png

对比发现,oltp 点查情况下,AUTO 与 DRDS 数据库几乎持平,有略微降低,AUTO 路由算法比普通算法复杂,有略微下低。oltp_read_

only 和 oltp_read_write 中,性能大大提高,oltp 执行过程中 AUTO比较好的分区优化,得益于优化的过程,读写的情况下性能提高33%以上。

通过最佳实践讲解、实操,体会到使用 PolarDB-X 像使用 MySQL一样简单,基本秒复制,不需要任何改动。最佳实践从原理上PolarDB-X 极大降低了使用分布式的门槛,提高分布式数据库强大的能力,使用 PolarDB-X 分布式数据库非常简单。

相关文章
|
4月前
|
关系型数据库 MySQL 分布式数据库
安全可靠的PolarDB V2.0 (兼容MySQL)产品能力及应用场景
PolarDB分布式轻量版采用软件输出方式,能够部署在您的自主环境中。PolarDB分布式轻量版保留并承载了云原生数据库PolarDB分布式版技术团队深厚的内核优化成果,在保持高性能的同时,显著降低成本。
584 140
|
2月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
187 8
|
9月前
|
关系型数据库 分布式数据库 PolarDB
PolarDB 开源基础教程系列 7.2 应用实践之 跨境电商场景
本文介绍了如何在跨境电商场景中快速判断商标或品牌侵权,避免因侵权带来的法律纠纷。通过创建品牌表并使用PostgreSQL的pg_trgm插件和GIN索引,实现了高性能的字符串相似匹配功能。与传统方法相比,PolarDB|PostgreSQL的方法不仅提升了上万倍的查询速度,还解决了传统方法难以处理的相似问题检索。具体实现步骤包括创建品牌表、插入随机品牌名、配置pg_trgm插件及索引,并设置相似度阈值进行高效查询。此外,文章还探讨了字符串相似度计算的原理及应用场景,提供了进一步优化和扩展的方向。
268 11
|
9月前
|
SQL 关系型数据库 分布式数据库
PolarDB 开源基础教程系列 7.5 应用实践之 TPCH性能优化
PolarDB在复杂查询、大数据量计算与分析场景的测试和优化实践.
312 7
|
9月前
|
搜索推荐 关系型数据库 分布式数据库
PolarDB 开源基础教程系列 7.3 应用实践之 精准营销场景
本文介绍了基于用户画像的精准营销技术,重点探讨了如何通过标签组合快速圈选目标人群。实验分为三部分: 1. **传统方法**:使用字符串存储标签并进行模糊查询,但性能较差,每次请求都需要扫描全表。 2. **实验1**:引入`pg_trgm`插件和GIN索引,显著提升了单个模糊查询条件的性能。 3. **实验2**:改用数组类型存储标签,并结合GIN索引加速包含查询,性能进一步提升。 4. **实验3**:利用`smlar`插件实现近似度过滤,支持按标签重合数量或比例筛选。
191 3
|
4月前
|
存储 SQL 前端开发
跟老卫学HarmonyOS开发:ArkTS关系型数据库开发
本节以“账本”为例,使用关系型数据库接口实现账单的增、删、改、查操作。通过创建ArkTSRdb应用,演示如何操作RdbStore进行数据管理,并结合界面按钮实现交互功能。
203 0
跟老卫学HarmonyOS开发:ArkTS关系型数据库开发
|
4月前
|
人工智能 关系型数据库 分布式数据库
PolarDB Supabase 助力快速构建现代应用
简介:本文介绍了在AI时代背景下,如何通过阿里云瑶池推出的全托管Supabase服务快速构建现代应用。该服务基于开源Supabase与PolarDB-PG数据库,提供一站式后端解决方案,涵盖实时数据库、身份认证、文件存储及AI能力,助力开发者高效迭代业务,降低运维复杂度。适用于协作类应用、SaaS平台、移动开发等多种场景。
|
存储 SQL 安全
应用案例|开源 PolarDB-X 在互联网安全场景的应用实践
中盾集团采用PolarDB-X云原生分布式数据库开源版本,有效解决了大数据量处理、复杂查询以及历史数据维护等难题,实现了业务的高效扩展与优化。
|
9月前
|
关系型数据库 MySQL 分布式数据库
客户说|太美医疗选择阿里云PolarDB,助力医药研发数据安全应用
客户说|太美医疗选择阿里云PolarDB,助力医药研发数据安全应用
333 1
|
9月前
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课16 接入PostGIS全功能及应用举例
本文介绍了如何在PolarDB数据库中接入PostGIS插件全功能,实现地理空间数据处理。此外,文章还提供了使用PostGIS生成泰森多边形(Voronoi diagram)的具体示例,帮助用户理解其应用场景及操作方法。
509 1