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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL,集群系列 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 分布式数据库非常简单。

相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
相关文章
|
2月前
|
存储 SQL 安全
应用案例|开源 PolarDB-X 在互联网安全场景的应用实践
中盾集团采用PolarDB-X云原生分布式数据库开源版本,有效解决了大数据量处理、复杂查询以及历史数据维护等难题,实现了业务的高效扩展与优化。
|
4月前
|
存储 Oracle 关系型数据库
关系型数据库Oracle应用场景
【7月更文挑战第5天】
136 3
|
6月前
|
关系型数据库 分布式数据库 数据库
【PolarDB开源】PolarDB资源隔离技术:在多租户环境中的应用与优化
【5月更文挑战第29天】PolarDB,阿里云的云原生数据库,在多租户环境中通过逻辑(Schema/Partition隔离)和物理(分布式存储计算节点)隔离保障数据安全和资源独占。它支持动态资源分配,适应不同租户需求,处理大规模并发,提供租户管理及数据访问控制功能。通过优化资源分配算法、提升事务处理能力和强化监控告警,PolarDB确保性能和稳定性,满足多租户的高效数据库服务需求。
176 1
|
3月前
|
关系型数据库 分布式数据库 数据库
安全可靠的国产自研数据库PolarDB V2.0,让数据库开发像“搭积木”一样简单!
安全可靠的国产自研数据库PolarDB V2.0,让数据库开发像“搭积木”一样简单!
安全可靠的国产自研数据库PolarDB V2.0,让数据库开发像“搭积木”一样简单!
|
2月前
|
存储 物联网 关系型数据库
PolarDB在物联网(IoT)数据存储中的应用探索
【9月更文挑战第6天】随着物联网技术的发展,海量设备数据对实时存储和处理提出了更高要求。传统数据库在扩展性、性能及实时性方面面临挑战。阿里云推出的PolarDB具备高性能、高可靠及高扩展性特点,能有效应对这些挑战。它采用分布式存储架构,支持多副本写入优化、并行查询等技术,确保数据实时写入与查询;多副本存储架构和数据持久化存储机制保证了数据安全;支持动态调整数据库规模,适应设备和数据增长。通过API或SDK接入IoT设备,实现数据实时写入、分布式存储与高效查询,展现出在IoT数据存储领域的巨大潜力。
63 1
|
3月前
|
关系型数据库 分布式数据库 数据库
PolarDB资源隔离技术:在多租户环境中的应用与优化
随着云计算普及,多租户架构助力云服务商提供高效服务。阿里云PolarDB采用独特分布式设计,在多租户环境下确保每个用户数据独立与资源隔离。通过逻辑与物理隔离技术,如Schema和分区,结合分布式存储节点,实现资源独占及安全。此技术不仅保障数据安全,还能动态分配资源,满足高性能需求。通过优化资源分配、增强事务处理及监控机制,进一步提升PolarDB在多租户环境中的表现。
120 4
|
3月前
|
存储 物联网 关系型数据库
PolarDB在物联网(IoT)数据存储中的应用探索
随着物联网技术的发展,海量设备数据对数据库提出实时高效存储处理的新要求。PolarDB作为阿里云的高性能云数据库,展现了其在IoT数据存储领域的潜力。面对IoT数据的规模、实时性和多样性挑战,PolarDB凭借分布式架构,实现了高性能、高可靠性和高扩展性,支持动态扩展和冷热数据分层存储,满足IoT数据实时写入、查询及管理需求,展现出广阔的应用前景。
120 1
|
3月前
|
存储 关系型数据库 大数据
PolarDB 大数据处理能力及其应用场景
【8月更文第27天】随着数据量的爆炸性增长,传统的数据库系统面临着存储和处理大规模数据集的挑战。阿里云的 PolarDB 是一种兼容 MySQL、PostgreSQL 和高度可扩展的关系型数据库服务,它通过其独特的架构设计,能够有效地支持海量数据的存储和查询需求。
88 0
|
4月前
|
关系型数据库 Java 分布式数据库
PolarDB产品使用问题之部署到服务器上的Java应用(以jar包形式运行)无法连接,如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
4月前
|
Oracle 关系型数据库 数据处理