什么是PolarDB-X
在使用一款新的产品之前,首先就是要对这个产品有一个基础的理解,适应什么场景,性价比如何,通过功能性及其他辅助性评测之后才会考虑是否接受对应的新产品,那么什么是PolarDB-X呢?
PolarDB-X是一款云原生分布式数据库系统,那么是一款什么样的PolarDB-X呢?是一款面向超高并发、海量存储、复杂查询场景,支持水平扩展、分布式事务、混合负载等能力,具备企业级、云原生、高可用、高度兼容 MySQL 系统及生态等特点的云原生分布式数据库系统,重点是高度兼容Mysql哦,这对于大多数使用开源数据库Mysql的中小企业无疑是最大的福音。
如何安装
为了方便我们快速上手使用PolarDB-X,快速掌握安装的基本流程以及后续的使用流程,阿里云起实验室贴心为我们提供了免费的实验室资源可以无限次体验,实验室地址:https://developer.aliyun.com/adc/scenario/6e7827274b004c7b9fad58ecf5404c6c 说到这里,你是否心中蠢蠢欲动想体验一下Mysql的云原生分布式数据库呢?
安装PolarDB-X
首先安装docker,并且启动docker
curl-fsSL https://get.docker.com | bash-s docker --mirror Aliyun systemctl start docker
安装PolarDB-X
docker run -d--name some-polardb-x -p8527:8527 polardbx/polardb-x:2.1.0
安装完成之后就可以通过MySQL Client命令行连接PolarDB-X。
安装Mysql
PolarDB-X支持通过MySQL Client命令行、第三方客户端以及符合MySQL交互协议的第三方程序代码进行连接。
安装mysql
yum install mysql -y
安装完成之后可以通过查看mysql版本命令来验证mysql是否安装成功
mysql -V
返回mysql Ver 8.0.26 for Linux on x86_64 (Source distribution)
登录PolarDB-X数据库,实验室场景下预设密码123456
mysql -h127.0.0.1 -P8527-upolardbx_root-p123456
测试登录成功之后继续安装jdk
安装jdk
执行如下命令安装jdk 1.8并验证是否安装成功
yum -y install java-1.8.0-openjdk* java -version
Spring Boot+PolarDB-X应用测试
首先需要安装git来下载模板代码
安装Git及下载模板代码
执行命令安装Git
yum -y install git
git安装成功之后下载模板代码
git clone https://github.com/spring-guides/gs-accessing-data-mysql.git
可以看到模板代码下载成功,执行命令查看下载的文件
cd gs-accessing-data-mysql/initial git checkout b8408e3a1e05008811d542b706107d45160556ac ls
创建数据库
登录PolarDB-X数据库,同时创建数据库并创建数据库用户及授权,这里悄悄说一点,有没有注意到你操作PolarDB-X数据库的语句和平时操作mysql的语句一致呢!
mysql -h127.0.0.1 -P8527-upolardbx_root-p123456create database db_example; create user 'springuser'@'%' identified by 'ThePassword'; grant all on db_example.* to 'springuser'@'%';
配置模板项目
打开项目数据库配置文件application.properties
vim src/main/resources/application.properties
修改端口号为我们刚才创建的8527,保存并退出。
创建实体类User
vim src/main/java/com/example/accessingdatamysql/User.java package com.example.accessingdatamysql; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity // This tells Hibernate to make a table out of this class public class User { @Id @GeneratedValue(strategy=GenerationType.AUTO) private Integer id; private String name; private String email; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
创建数据库连接层UserRepository,保存并退出
vim src/main/java/com/example/accessingdatamysql/UserRepository.java package com.example.accessingdatamysql; import org.springframework.data.repository.CrudRepository; import com.example.accessingdatamysql.User; // This will be AUTO IMPLEMENTED by Spring into a Bean called userRepository // CRUD refers Create, Read, Update, Delete public interface UserRepository extends CrudRepository<User, Integer> { }
创建控制类MainController 保存并退出
vim src/main/java/com/example/accessingdatamysql/MainController.java package com.example.accessingdatamysql; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; @Controller // This means that this class is a Controller @RequestMapping(path="/demo") // This means URL's start with /demo (after Application path)public class MainController { @Autowired // This means to get the bean called userRepository // Which is auto-generated by Spring, we will use it to handle the data private UserRepository userRepository; @PostMapping(path="/add") // Map ONLY POST Requests public @ResponseBody String addNewUser (@RequestParam String name , @RequestParam String email) { // @ResponseBody means the returned String is the response, not a view name // @RequestParam means it is a parameter from the GET or POST request User n = new User(); n.setName(name); n.setEmail(email); userRepository.save(n); return "Saved"; } @GetMapping(path="/all") public @ResponseBody Iterable<User> getAllUsers() { // This returns a JSON or XML with the users return userRepository.findAll(); }}
运行模板项目
./gradlew bootRun
业务操作
模板项目启动之后,我们通过项目来增加一条用户数据
curl localhost:8080/demo/add -dname=First -demail=username@example.com
增加用户数据成功之后我们查看一下用户记录
curl'localhost:8080/demo/all'
后续再登录一下 PolarDB-X数据库 查询一下数据库数据
mysql -h127.0.0.1 -P8527-upolardbx_root-p123456use db_example; select * from user;
均可以看到数据已经通过模板项目成功添加进数据库,至此本次实验内容操作完成。
体验感受
整体操作下来,基本上没有什么卡顿,操作很流畅,从PolarDB-X的安装到下载模板项目,配置项目数据库连接信息到最后的通过项目添加数据查看数据等,基本和现在的使用开源Mysql进行的springboot项目开发无任何差别,可以说引入PolarDB-X云原生分布式数据库,除了给了高性能、高稳定、高时效性的分布式数据库外,并没有任何的不适感,同时也解决了项目后期数据库压力大,分库分项目时面临的分布式问题,是不是一举多得呢?
但是体验过程中也有一些疑问,比如说官方文档是否提供了可以在阿里云服务器ECS上面安装PolarDB-X的安装文档,个人找了一下PolarDB-X的官方文档 https://www.polardbx.com/document ,没有找到相应的内容;另外就是作为开源版的数据库,在公司自购服务器或者本地windows电脑是否支持安装,如何安装,是否有相应的逐步操作的文档方便查阅;
在使用方面,作为云原生分布式数据库,分布式的实例demo是否可以提供一下,方便后续项目数据量大时分库数据一致性的保证,有了demo方便后期项目做分布式事务时的效率提升。
另外,在最后给大家推荐一些关于PolarDB-X的官方视频和文档地址,官方很细心,准备的内容很丰富,如果有时间全部掌握的话,个人觉得你的PolarDB-X云原生分布式数据库使用熟练度基本就没有任何问题了,我本人也需要继续努力。文档地址:PolarDB-X体验室 https://developer.aliyun.com/adc/series/activity/polardb-x/2,跟我学的PolarDB-X https://developer.aliyun.com/adc/scenarioSeries/cf58beaf1d3d4aafb127dfb3f7bfd549,跟着视频学PolarDB-X https://developer.aliyun.com/learning/course/1032/detail/15141 以及PolarDB-X官方网站 https://www.polardbx.com/home 总之,阿里云社区PolarDB-X团队为我们准备的内容很多,相信我以上的疑惑也一定能在后续的学习中找到答案的。