首页 > 技术文章 > 分库分表操作

q1359720840 2022-01-05 23:27 原文

 

 

 

 

 

1.分库分表概念
2.Sharding-JDBC分库分表操作
3.Sharding-Proxy分库分表操作
官网: https://shardingsphere.apache.org/index_zh.html

什么是ShardingSphere
1.一套开源的分布式数据库中间件解决方案
2.有产品:Sharding-JDBC和Sharding-Proxy
3.定位为关系型数据库中间件,合理在分布式环境下使用关系型数据库操作。

 

 

 

 

背景

Apache ShardingSphere 是一套完善的产品,使用场景非常广泛。 除生产环境的集群部署之外,还为工程师在开发和自动化测试等场景提供相应的运行模式。 Apache ShardingSphere 提供的 3 种运行模式分别是内存模式、单机模式和集群模式。

内存模式

初始化配置或执行 SQL 等造成的元数据结果变更的操作,仅在当前进程中生效。 适用于集成测试的环境启动,方便开发人员在整合功能测试中集成 Apache ShardingSphere 而无需清理运行痕迹。

单机模式

能够将数据源和规则等元数据信息持久化,但无法将元数据同步至多个 Apache ShardingSphere 实例,无法在集群环境中相互感知。 通过某一实例更新元数据之后,会导致其他实例由于获取不到最新的元数据而产生不一致的错误。 适用于工程师在本地搭建 Apache ShardingSphere 环境。

集群模式

提供了多个 Apache ShardingSphere 实例之间的元数据共享和分布式场景下状态协调的能力。 在真实部署上线的生产环境,必须使用集群模式。它能够提供计算能力水平扩展和高可用等分布式系统必备的能力。 集群环境需要通过独立部署的注册中心来存储元数据和协调节点状态。

 

背景

DistSQL(Distributed SQL)是 Apache ShardingSphere 特有的操作语言。 它与标准 SQL 的使用方式完全一致,用于提供增量功能的 SQL 级别操作能力。

挑战

灵活的规则配置和资源管控能力是 Apache ShardingSphere 的特点之一。 在使用 4.x 及其之前版本时,开发者虽然可以像使用原生数据库一样操作数据,但却需要通过本地文件或注册中心配置资源和规则。 然而,操作习惯变更,对于运维工程师并不友好。

DistSQL 让用户可以像操作数据库一样操作 Apache ShardingSphere,使其从面向开发人员的框架和中间件转变为面向运维人员的数据库产品。

DistSQL 细分为 RDL、RQL 和 RAL 三种类型。

  • RDL(Resource & Rule Definition Language)负责资源和规则的创建、修改和删除;
  • RQL(Resource & Rule Query Language)负责资源和规则的查询和展现;
  • RAL(Resource & Rule Administration Language)负责 Hint、事务类型切换、分片执行计划查询等管理功能。

目标

打破中间件和数据库之间的界限,让开发者像使用数据库一样使用 Apache ShardingSphere,是 DistSQL 的设计目标。

注意事项

DistSQL 只能用于 ShardingSphere-Proxy,ShardingSphere-JDBC 暂不提供。

 

数据库兼容方面:
sql解析:
SQL 是使用者与数据库交流的标准语言。 SQL 解析引擎负责将 SQL 字符串解析为抽象语法树,供 Apache ShardingSphere 理解并实现其增量功能。
目前支持 MySQL, PostgreSQL, SQLServer, Oracle, openGauss 以及符合 SQL92 规范的 SQL 方言。 由于 SQL 语法的复杂性,目前仍然存在少量不支持的 SQL。

详细罗列出目前不支持的 SQL 种类,供使用者参考。

MySQL 不支持的 SQL 清单如下:

SQL
CLONE LOCAL DATA DIRECTORY = ‘clone_dir’
INSTALL COMPONENT ‘file://component1’, ‘file://component2’
UNINSTALL COMPONENT ‘file://component1’, ‘file://component2’
REPAIR TABLE t_order
OPTIMIZE TABLE t_order
CHECKSUM TABLE t_order
CHECK TABLE t_order
SET RESOURCE GROUP group_name
DROP RESOURCE GROUP group_name
CREATE RESOURCE GROUP group_name TYPE = SYSTEM
ALTER RESOURCE GROUP rg1 VCPU = 0-63

用户特性:
MySQL 不支持的 SQL 清单如下:

用户和角色
SQL
CREATE USER ‘finley’@‘localhost’ IDENTIFIED BY ‘password’
ALTER USER ‘finley’@‘localhost’ IDENTIFIED BY ‘new_password’
DROP USER ‘finley’@‘localhost’;
CREATE ROLE ‘app_read’
DROP ROLE ‘app_read’
SHOW CREATE USER finley
SET PASSWORD = ‘auth_string’
SET ROLE DEFAULT;
授权
SQL
GRANT ALL ON db1.* TO ‘jeffrey’@‘localhost’
GRANT SELECT ON world.* TO ‘role3’;
GRANT ‘role1’, ‘role2’ TO ‘user1’@‘localhost’
REVOKE INSERT ON . FROM ‘jeffrey’@‘localhost’
REVOKE ‘role1’, ‘role2’ FROM ‘user1’@‘localhost’
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user_or_role
SHOW GRANTS FOR ‘jeffrey’@‘localhost’
SHOW GRANTS FOR CURRENT_USER
FLUSH PRIVILEGES

推荐阅读