实践教程之体验PolarDB-X分布式事务和数据分区

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介: PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。

本期实验将指导您使用PolarDB-X分布式事务和数据分区

本期免费实验地址

本期教学视频地址


前置准备

假设已经根据前一讲内容完成了PolarDB-X的搭建部署,可以成功链接上PolarDB-X数据库。

PolarDB-X:实践教程之如何快速安装部署PolarDB-X


体验PolarDB-X分布式事务

本步骤将带您体验PolarDB-X分布式事务。首先开启一个分布式事务,通过命令观察事务信息。然后模拟一个转账行为,观察原子性和隔离性保证,最后通过Flashback Query查看历史版本。

1.准备测试库、测试表和测试数据。

a. 执行如下SQL语句,创建测试库transfer_test并使用。

CREATE DATABASE transfer_test MODE='AUTO';
 USE transfer_test;

b. 执行如下SQL语句,创建测试表account。

CREATE TABLE account (
   pk bigint not null auto_increment,
   id varchar(64) not null,
   balance double not null,
   gmt_create timestamp default current_timestamp,
   gmt_modified timestamp default current_timestamp on update current_timestamp,
   PRIMARY KEY(pk),
   key(id)
);

c. 执行如下SQL语句,创建测试表user 。

CREATE TABLE user (
   pk bigint not null auto_increment,
   name varchar(64) not null,
   addr varchar(128) not null,
   gmt_create timestamp default current_timestamp,
   gmt_modified timestamp default current_timestamp on update current_timestamp,
   PRIMARY KEY(pk),
   key(name)
);

d. 执行如下SQL语句,初始化数据。

INSERT INTO account(id, balance) VALUES("Alice", 100), ("Bob", 100);
INSERT INTO user(name, addr) VALUES("Alice", "hz"), ("Bob", "sh");

e. 执行如下SQL语句,查看初始化结果。

SHOW FULL CREATE TABLE account;
SHOW FULL CREATE TABLE user;
SELECT * FROM account;
SELECT * FROM user;


2.转账测试。

a. 实验页面,单击右上角的+ 图标,创建新的终端三和终端四。

1.jpg

b. 在终端三和终端四中,分别执行如下命令,连接PolarDB-X集群。

mysql -h127.0.0.1 -P3306 -upolardbx_root transfer_test

c. 按照如下表格中的步骤顺序,在终端三和终端四中分别执行如下SQL语句,进行转账测试。

步骤顺序 终端三的命令 终端四的命令
1 BEGIN;
UPDATE account SET balance = balance - 30 WHERE id = "Alice";
2 SELECT * FROM account; SHOW TRANS;
SELECT * FROM account;
3 ROLLBACK;
4 SELECT * FROM account; SHOW TRANS;
SELECT * FROM account;
5 BEGIN;
UPDATE account SET balance = balance - 30 WHERE id = "Alice";
UPDATE account SET balance = balance + 30 WHERE id = "Bob";
6 SELECT * FROM account; SELECT * FROM account;
7 COMMIT;
8 SELECT * FROM account;


3.Flashback Query。

a. 实验页面,单击右上角的+图标,创建新的终端五。

20230412101447.jpg


b. 执行如下命令,连接PolarDB-X集群。

mysql -h127.0.0.1 -P3306 -upolardbx_root transfer_test

c. 执行如下SQL语句,记录当前时间点为ts0。

SELECT NOW();

2.jpg

d. 执行如下SQL语句,更新数据。

BEGIN;
UPDATE account SET balance = balance - 30 WHERE id = "Alice";
UPDATE account SET balance = balance + 30 WHERE id = "Bob";
COMMIT;
INSERT INTO account(id, balance) VALUES("Tom", 100);
INSERT INTO user(name, addr) VALUES("Tom", "bj");

e. 执行如下SQL语句,查看更新后的数据。

SELECT a.id, a.balance, b.addr FROM account a 
JOIN user b ON a.id = b.name;

f. 执行如下SQL语句,指定时间为ts0,查询历史版本数据。

说明 :

  • 您需要将{ts0}替换为实际记录的时间点ts0。
  • 示例:SELECT * FROM user AS OF TIMESTAMP "2022-05-12 10:14:14";
SELECT * FROM user AS OF TIMESTAMP "{ts0}";
SELECT * FROM account AS OF TIMESTAMP "{ts0}";

20230412101604.jpg


g. 执行如下SQL语句,在Join中为部分表指定时间戳。

说明 :您需要将{ts0}替换为实际记录的时间点ts0。

SELECT a.id, a.balance, b.addr FROM account a JOIN user AS OF TIMESTAMP "{ts0}" b ON a.id = b.name;


20230412101623.jpg

h. 执行如下SQL语句,查看并记录当前时间点为ts1。

SELECT NOW();


20230412101651.jpg


i. 执行如下SQL语句,模拟误删操作。

DELETE FROM account WHERE 1=1;

j. 执行如下SQL语句,查看删除结果。

SELECT * FROM account;


20230412101715.jpg

k. 执行如下SQL语句,通过Flashback Query恢复误删的数据。

说明 :您需要将{ts1}替换为实际记录的时间点ts1。

INSERT INTO account SELECT * FROM account AS OF TIMESTAMP "{ts1}";


20230412101742.jpg

l. 执行如下SQL语句,查看恢复结果。

SELECT * FROM account;


20230412101808.jpg


体验PolarDB-X数据分区

本步骤将带您体验PolarDB-X数据分区对查询性能的影响。首先用默认拆分方式创建一张表,然后通过增加全局索引和改变拆分方式来提升查询性能。

1.准备测试库、测试表和测试数据。

a. 切换至终端二,执行如下SQL语句,创建测试库partitioning_test并使用。

CREATE DATABASE partitioning_test MODE='AUTO';  USE partitioning_test;

b. 执行如下SQL语句,创建测试表ptest1。

CREATE TABLE ptest1 (
  id INTEGER UNSIGNED NOT NULL,
  k INTEGER UNSIGNED DEFAULT '0' NOT NULL,
  c CHAR(20) DEFAULT '' NOT NULL,
  pad CHAR(60) DEFAULT '' NOT NULL,
  PRIMARY KEY(id)
);

c. 执行如下SQL语句,插入数据。

INSERT INTO ptest1(id, k, c, pad) VALUES
(1, 1, "c", "pad"),(2, 2, "c", "pad"),(3, 3, "c", "pad"),
(4, 4, "c", "pad"),(5, 5, "c", "pad"),(6, 6, "c", "pad");


2.通过全局索引优化查询性能。

a. 执行如下SQL语句,查看主键上点查的执行计划。

EXPLAIN SELECT pad FROM ptest1 WHERE id = 1;

b. 执行如下SQL语句,查看k字段上点查的执行计划。

EXPLAIN SELECT pad FROM ptest1 WHERE k = 1;

c. 执行如下SQL语句,在k字段上增加索引。

ALTER TABLE `partitioning_test`.`ptest1`  ADD INDEX `__advise_index_ptest1_k`(`k`);

d. 执行如下SQL语句,查看添加索引后的执行计划。

EXPLAIN SELECT pad FROM ptest1 WHERE k = 1;

e. 执行如下SQL语句,在k字段上增加聚簇索引。

ALTER TABLE ptest1 ADD CLUSTERED INDEX c_k(k);

f. 执行如下SQL语句,查看增加聚簇索引后的执行计划。

EXPLAIN SELECT pad FROM ptest1 WHERE k=1;

g. 执行如下SQL语句,查看ptest1表的表结构。

SHOW CREATE TABLE ptest1; 
SHOW FULL CREATE TABLE ptest1;


3.通过变更分区键优化查询性能。

a. 执行如下SQL语句,删除之前创建的索引。

ALTER TABLE ptest1 DROP INDEX c_k;
ALTER TABLE ptest1 DROP INDEX __advise_index_ptest1_k;

b. 执行如下SQL语句,变更拆分键。

ALTER TABLE ptest1 PARTITION BY HASH(k); 
SHOW FULL CREATE TABLE ptest1;

c. 执行如下SQL语句,查看变更拆分键之后的执行计划。

EXPLAIN SELECT pad FROM ptest1 WHERE k=1;


了解更多


本文来源:PolarDB-X知乎号

相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
相关文章
|
15天前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
15天前
|
存储 缓存 算法
分布式缓存有哪些常用的数据分片算法?
【10月更文挑战第25天】在实际应用中,需要根据具体的业务需求、数据特征以及系统的可扩展性要求等因素综合考虑,选择合适的数据分片算法,以实现分布式缓存的高效运行和数据的合理分布。
|
23天前
|
JSON 分布式计算 前端开发
前端的全栈之路Meteor篇(七):轻量的NoSql分布式数据协议同步协议DDP深度剖析
本文深入探讨了DDP(Distributed Data Protocol)协议,这是一种在Meteor框架中广泛使用的发布/订阅协议,支持实时数据同步。文章详细介绍了DDP的主要特点、消息类型、协议流程及其在Meteor中的应用,包括实时数据同步、用户界面响应、分布式计算、多客户端协作和离线支持等。通过学习DDP,开发者可以构建响应迅速、适应性强的现代Web应用。
|
2月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
3年前的云栖大会,我们发布分布式云容器平台ACK One,随着3年的发展,很高兴看到ACK One在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下ACK One 3年来的发展演进,以及如何帮助客户解决分布式领域多云多集群管理的挑战。
阿里云容器服务 ACK One 分布式云容器企业落地实践
|
1月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
阿里云瑶池在2024云栖大会上重磅发布由Data+AI驱动的多模数据管理平台DMS:OneMeta+OneOps,通过统一、开放、多模的元数据服务实现跨环境、跨引擎、跨实例的统一治理,可支持高达40+种数据源,实现自建、他云数据源的无缝对接,助力业务决策效率提升10倍。
|
2月前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
阿里云数据库重磅升级!元数据服务OneMeta + OneOps统一管理多模态数据
|
3月前
|
数据采集 分布式计算 并行计算
Dask与Pandas:无缝迁移至分布式数据框架
【8月更文第29天】Pandas 是 Python 社区中最受欢迎的数据分析库之一,它提供了高效且易于使用的数据结构,如 DataFrame 和 Series,以及大量的数据分析功能。然而,随着数据集规模的增大,单机上的 Pandas 开始显现出性能瓶颈。这时,Dask 就成为了一个很好的解决方案,它能够利用多核 CPU 和多台机器进行分布式计算,从而有效地处理大规模数据集。
186 1
|
3月前
|
数据库 Windows
超详细步骤解析:从零开始,手把手教你使用 Visual Studio 打造你的第一个 Windows Forms 应用程序,菜鸟也能轻松上手的编程入门指南来了!
【8月更文挑战第31天】创建你的第一个Windows Forms (WinForms) 应用程序是一个激动人心的过程,尤其适合编程新手。本指南将带你逐步完成一个简单WinForms 应用的开发。首先,在Visual Studio 中创建一个“Windows Forms App (.NET)”项目,命名为“我的第一个WinForms 应用”。接着,在空白窗体中添加一个按钮和一个标签控件,并设置按钮文本为“点击我”。然后,为按钮添加点击事件处理程序`button1_Click`,实现点击按钮后更新标签文本为“你好,你刚刚点击了按钮!”。
244 0
|
3月前
|
Java 数据库连接 微服务
揭秘微服务架构下的数据魔方:Hibernate如何玩转分布式持久化,实现秒级响应的秘密武器?
【8月更文挑战第31天】微服务架构通过将系统拆分成独立服务,提升了可维护性和扩展性,但也带来了数据一致性和事务管理等挑战。Hibernate 作为强大的 ORM 工具,在微服务中发挥关键作用,通过二级缓存和分布式事务支持,简化了对象关系映射,并提供了有效的持久化策略。其二级缓存机制减少数据库访问,提升性能;支持 JTA 保证跨服务事务一致性;乐观锁机制解决并发数据冲突。合理配置 Hibernate 可助力构建高效稳定的分布式系统。
66 0
|
3月前
|
UED 存储 数据管理
深度解析 Uno Platform 离线状态处理技巧:从网络检测到本地存储同步,全方位提升跨平台应用在无网环境下的用户体验与数据管理策略
【8月更文挑战第31天】处理离线状态下的用户体验是现代应用开发的关键。本文通过在线笔记应用案例,介绍如何使用 Uno Platform 优雅地应对离线状态。首先,利用 `NetworkInformation` 类检测网络状态;其次,使用 SQLite 实现离线存储;然后,在网络恢复时同步数据;最后,通过 UI 反馈提升用户体验。
88 0

热门文章

最新文章

相关产品

  • 云原生数据库 PolarDB