首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >DistSQL:像数据库一样使用 Apache ShardingSphere

DistSQL:像数据库一样使用 Apache ShardingSphere

原创
作者头像
SphereEx
修改于 2021-07-20 09:46:15
修改于 2021-07-20 09:46:15
7430
举报

Apache ShardingSphere 5.0.0-beta 深度解析的第一篇文章和大家一起重温了 ShardingSphere 的内核原理,并详细阐述了此版本在内核层面,特别是 SQL 能力方面的优化和提升。强大稳定的内核是 ShardingSphere 持续发展的基础,与此同时,ShardingSphere 在研发分布式数据库生态特性上也在努力摸索。本次 5.0.0-beta 版本发布的 DistSQL,用于搭配整个 ShardingSphere 分布式数据库体系,在提供更标准化的分布式数据库管理方式的同时,兼具灵活、便捷和优雅的特性。 本文将带领大家全面认识 DistSQL,并结合实战案例展示如何使用 DistSQL 一键管理 ShardingSphere 分布式数据库服务

孟浩然

SphereEx 高级 Java 工程师

Apache ShardingSphere Committer

曾就职于京东科技,负责数据库产品研发,热爱开源,关注数据库生态,目前专注于 ShardingSphere 数据库中间件开发以及开源社区建设。

初识 DistSQL

相信大家对 SQL(Structured Query Language)都不陌生,SQL 是一种数据查询和程序设计语言,同时作为关系数据库管理系统的标准语言,用于存取数据以及查询、更新和管理关系数据库系统。

和标准 SQL 类似,DistSQL(Distributed SQL),即分布式 SQL,是 ShardingSphere 特有的一种内置 SQL 语言,能够提供标准 SQL 之外的增量功能操作能力。借助于 ShardingSphere 强大的 SQL 解析引擎,DistSQL 提供了类似于标准 SQL 的语法结构和语法校验体系,在保证规范化的同时,也让 DistSQL 更加灵活。

ShardingSphere 提出的 Database Plus 理念,旨在打造兼具数据库且贴合实际业务需求的开源分布式数据库体系,而 DistSQL 正是在传统数据库上层构建,提供既贴合标准又拥有 ShardingSphere 功能特色的 SQL 能力,能更好的为传统数据库赋能。

DistSQL 设计初衷

ShardingSphere 快速发展的几年来,随着内核的逐步稳定,以及对核心功能的持续打磨,在数据库中间件领域,已然独树一帜。作为国内开源的佼佼者, ShardingSphere 在分布式数据库生态的探索中并没有停止脚步,打破中间件和数据库之间的界限,让开发者像使用数据库一样使用 Apache ShardingSphere,是 DistSQL 的设计目标,也是 ShardingSphere 从面向开发人员的框架和中间件转变为面向运维人员的基础设施产品不可或缺的能力。

DistSQL 语法体系

DistSQL 在设计之初,就以面向标准为目标,充分考虑数据库开发和运维人员的使用习惯,所以 DistSQL 的语法全面借鉴标准 SQL 语言,兼顾可读性和易用性的同时,最大程度保留 ShardingSphere 自身的特性,并为使用者提供最宽泛的自定义边界,以应对不同的业务场景。对于熟悉 SQL 和 ShardingSphere 的开发者,可以快速入手。

标准的 SQL 提供了如 DQL、DDL、DML、DCL 等不同类型的语法,用于定义不同功能的 SQL 语句,DistSQL 也定义了一套自己的语法体系。

在 ShardingSphere 中, DistSQL 的语法目前主要划分为 RDL、RQL 和 RAL 三种类型:

  • RDL(Resource & Rule Definition Language):资源规则定义语言,用于资源和规则的创建、修改和删除;
  • RQL(Resource & Rule Query Language):资源规则查询语言,用于资源和规则的查询和展现;
  • RAL(Resource & Rule Administrate Language):资源规则管理语言,用于 Hint、事务类型切换、分片执行计划查询等增量功能操作。

DistSQL 的语法体系为 ShardingSphere 迈向分布式数据库搭起了桥梁,目前还在持续完善中,随着更多的想法被实现,DistSQL 势必会越来越强大。也欢迎对此感兴趣的开发者加入 ShardingSphere,为 DistSQL 提供想法,贡献代码。

了解更详细的语法规则,可参考官方文档:https://shardingsphere.apache.org/document/current/cn/features/dist-sql/syntax/

DistSQL 实战

在了解了 DistSQL 的设计理念和语法体系后,接下来本文以数据分片为例,实战演示如何通过 DistSQL 来搭建一套基于 ShardingSphere 的数据分片服务。

环境准备

  • 启动 MySQL 服务
  • 创建用于分片的 MySQL 数据库
  • 启动 Zookeeper 服务

打开分布式治理配置并启动 ShardingSphere-Proxy (https://shardingsphere.apache.org/document/current/cn/quick-start/shardingsphere-proxy-quick-start/)

实战演示

  • 使用 MySQL 命令行连接到启动的 ShardingSphere-Proxy
  • 创建并查询分布式数据库 sharding_db
  • 使用新创建的数据库
  • 执行 RDL 配置 2 个用于分片的数据源资源 ds_1 和 ds_2
  • 执行 RQL 查询新增加的数据源资源
  • 执行 RDL 创建 t_order 表的分片规则
  • 执行 RQL 查询分片规则

RQL 除了支持查询当前数据库下的所有分片规则,也可以通过下面的语句查询单个表的分片规则

代码语言:txt
AI代码解释
复制
SHOW SHARDING TABLE RULE t_order FROM sharding_db
  • 创建并查询 t_order 分片表
  • 在 ShardingSphere-Proxy 端成功创建分片表 t_order 后,通过客户端连接到底层数据库 ds_1 和 ds_2,ShardingSphere 已经根据 t_order 表的分片规则自动创建了分片表
  • 分片表创建完成后,继续在 ShardingSphere-Proxy 端执行 SQL 语句插入数据
  • 通过 RAL 查询执行计划

至此,使用 DistSQL 搭建 ShardingSphere 数据分片服务已经完成,对比之前版本以配置文件驱动的 ShardingSphere 代理端相比,DistSQL 对开发者更友好,对资源和规则的管理更加灵活,以 SQL 驱动的方式,更是实现了 DistSQL 和标准 SQL 的无缝对接。

以上的示例中,仅演示了小部分 DistSQL 语法的使用,除了通过 CREATE 和 SHOW 语句创建和查询资源、规则,DistSQL 同样提供了 ALTRE DROP 等更多的操作,且同时支持对数据分片、读写分离、数据加密、数据库发现核心功能的配置管控。

结语

作为 5.0.0-beta 版本发布的新特性之一,DistSQL 也将从此版本开始持续发力,构建更完善的语法体系,提供更强大的功能。

DistSQL 为 ShardingSphere 在分布式数据库领域的探索提供了无限可能,在后续的规划中,DistSQL 将作为纽带串联起更多的功能,提供一键式操作。如一键分析数据库整体状态,和弹性迁移对接,提供一键数据扩容、缩容;和管控对接,实现一键切换主从、改变数据库状态等等。

最后,欢迎大家多多关注社区,了解 ShardingSphere 项目最新进展。

欢迎关注我们

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
新版发布|ShardingSphere 5.0.0-beta 来了!
SphereEx co-founder, Apache member, Apache ShardingSphere PMC, Apache brpc(Incubating) mentor, 本次 Release manager。
SphereEx
2021/07/20
7790
新版发布|ShardingSphere 5.0.0-beta 来了!
(一)ShardingSphere介绍
        随着版本不断更迭,ShardingSphere的核心功能也变得多元化起来。最开始Sharding-JDBC 1.x版本只有数据分片功能,到Sharding-JDBC 2.x版本开始支持数据库治理,如注册中心、配置中心等,再到3.x版本推出了Proxy产品,还增加了分布式事务,支持Atomikos、Narayana、Bitronix、Seata,4.x为Apache下的第一个版本,支持了更多种类的数据库,如今已经迭代到5.x版本。
用户1148526
2022/05/26
4.9K0
(一)ShardingSphere介绍
数据分片架构的下一次进化
随着手机和互联网成为人们眼中的日常必需品,网站和商业服务每周接收数十亿次访问的情况已经司空见惯——这还只是一个侧面。
深度学习与Python
2022/03/23
4630
数据分片架构的下一次进化
ShardingSphere实践(8)——影子库
        在基于微服务的分布式应用架构下,业务需要的多个服务是通过一系列的服务、中间件的调用来完成,所以单个服务的压力测试已无法代表真实场景。在测试环境中,如果重新搭建一整套与生产环境类似的压测环境,成本过高,并且往往无法模拟线上环境的复杂度以及流量。因此,业内通常选择全链路压测的方式,即在生产环境进行压测,这样所获得的测试结果能够准确地反应系统真实容量和性能水平。
用户1148526
2022/08/30
1.7K1
ShardingSphere实践(8)——影子库
Kubernetes 环境下的数据库新命题
作者 | 潘娟 伴随着互联网应用场景逐渐深入到生活的各个角落,为了确保前端用户的使用体验,对互联网产品的后端架构性能提出了更高的需求。如今,开发以及运维人员正在将工作重心和优化重点放在了后端基础设施的可用性、一致性、扩展性、弹性以及全面自动化管理等能够提升效率的技术能力层面。 1 背景:Kubernetes 环境中的微服务与数据库   应用部署的变化   一方面,在处处充斥着大数据以及高并发场景的今天,后台技术人员往往会花费更多精力在解决『大规模业务数据的存储与应用』等问题上,以确保数据库等基础设施能够
深度学习与Python
2023/05/09
5950
Kubernetes 环境下的数据库新命题
打造基于 PostgreSQL/openGauss 的分布式数据库解决方案
Apache ShardingSphere Committer,SphereEx 中间件工程师。目前专注于 Apache ShardingSphere 及其子项目 ElasticJob 的研发。
落寞的鱼丶
2022/02/26
1.6K0
ShardingSphere实践(4)——读写分离
        ShardingSphere最重要的功能模块是数据分片,从规则到实现都比较复杂。其他功能相对来说比较简单,本篇介绍ShardingSphere的读写分离功能。
用户1148526
2022/06/05
1.4K0
ShardingSphere实践(4)——读写分离
五分钟快速了解Apache ShardingSphere分库分表
Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。
架构狂人
2023/10/24
3980
五分钟快速了解Apache ShardingSphere分库分表
ShardingSphere实践(6)——弹性伸缩
        对于使用单数据库运行的系统来说,如何安全简单地将数据迁移至水平分片的数据库上,一直以来都是一个迫切的需求。对于已经使用了ShardingSphere的用户来说,随着业务规模的快速变化,也可能需要对现有的分片集群进行弹性扩容或缩容。
用户1148526
2022/06/12
4.1K0
ShardingSphere实践(6)——弹性伸缩
ShardingSphere实践(3)——数据分片
        传统的将数据集中存储至单一节点的解决方案,在性能、可用性和运维成本这三方面已经难于满足海量数据的场景。
用户1148526
2022/06/05
4.4K0
ShardingSphere实践(3)——数据分片
MYSQLg高级-------分库分表之核心Sharding-Proxy 简介
ShardingSphere-Proxy 是 Apache ShardingSphere 的第二个产品。 它定位为透明化的数据库代理端,通过实现数据库二进制协议,对异构语言提供支持。 目前提供 MySQL 和 PostgreSQL 协议,透明化数据库操作,对 DBA 更加友好。
默 语
2024/11/20
4290
MYSQLg高级-------分库分表之核心Sharding-Proxy 简介
Apache顶级项目ShardingSphere最近都在干啥?
1、我们知道ShardingSphere已经成为Apache的顶级项目,那相较于之前,有没有新的挑战呢?
田帅萌
2020/05/29
2K0
看完这一篇,ShardingSphere-jdbc 实战再也不怕了
谈到分库分表中间件时,我们自然而然的会想到 ShardingSphere-JDBC 。
勇哥java实战
2023/02/28
2K0
Sharding-Proxy的基本功能使用
Sharding-Proxy是一个分布式数据库中间件,定位为透明化的数据库代理端。作为开发人员可以完全把它当成数据库,而它具体的分片规则在Sharding-Proxy中配置。它的整体架构图如下:
小忽悠
2020/07/20
1.7K0
Sharding-Proxy的基本功能使用
ShardingSphere 数据分片
其实很多人对分库分表多少都有点恐惧,其实我也是,总觉得这玩意是运维干的、数据量上来了或者sql过于复杂、一些数据分片的中间件支持的也不是很友好、配置繁琐等多种问题。
胖虎
2019/06/26
2.1K0
ShardingSphere 数据分片
面试官三连问:你这个数据量多大?分库分表怎么做?用的哪个组件?
ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、云原生等各种多样化的应用场景。
芋道源码
2020/12/08
2.1K0
面试官三连问:你这个数据量多大?分库分表怎么做?用的哪个组件?
ShardingSphere 介绍与简单入门
于是,我将 Apache ShardingSphere 产品介绍与开发入门通篇阅读了一遍。
FoamValue
2020/09/24
6980
ShardingSphere 介绍与简单入门
星标19.8k的Apache顶级项目,助你做好云计算时代数据库管理
云计算时代的到来,使得云原生数据库日益重要,它通过提供可扩展性、高可用性和按需资源分配,满足了现代应用程序对弹性和灵活性的需求。随着多云和混合云策略的普及,云原生数据库在确保数据一致性、安全性和合规性方面也发挥着关键作用。
程序猿DD
2025/02/10
760
星标19.8k的Apache顶级项目,助你做好云计算时代数据库管理
ShardingJdbc分库分表实战案例解析(下)
上一篇文章《ShardingJdbc分库分表实战案例解析(上)》中我们初步介绍了使用ShardingJdbc实现订单数据分散存储的分库分表方法,在本篇文章中将重点介绍在不停服的情况下实现数据分片存储的在线扩容。具体将以如下两个常见的场景进行演示:1)、尚未进行分库分表的单库单表系统如何平稳的实施分库分表方案;2)、已经实施过分库分表方案的系统,由于数据量的持续增长导致原有分库分表不够用了,需要二次扩容的情况。
用户5927304
2020/08/18
1.7K1
ShardingJdbc分库分表实战案例解析(下)
ShardingJdbc基于Zookeeper实现分布式治理
随着数据规模的不断膨胀,使用多节点集群的分布式方式逐渐成为趋势。在这种情况下,如何高效、自动化管理集群节点,实现不同节点的协同工作,配置一致性,状态一致性,高可用性,可观测性等,就成为一个重要的挑战。
玖柒的小窝
2021/10/25
7170
ShardingJdbc基于Zookeeper实现分布式治理
推荐阅读
相关推荐
新版发布|ShardingSphere 5.0.0-beta 来了!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档