Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
普蓝开源社区
盘古开发框架
提交
37344bd3
盘古开发框架
项目概览
普蓝开源社区
/
盘古开发框架
通知
25
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
1
Wiki
分析
仓库
DevOps
项目成员
Pages
盘古开发框架
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
1
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
37344bd3
编写于
3月 25, 2022
作者:
X
xiongchun
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
开发数据分片范例程序:pangu-examples-shardingsphere-sharding,编写数据分片文档
上级
3af2731f
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
22 addition
and
12 deletion
+22
-12
pangu-website/docs/advanced-guide/数据治理之数据分片.md
pangu-website/docs/advanced-guide/数据治理之数据分片.md
+22
-12
pangu-website/static/resources/doc/29-pangu-framework-sharding.png
...site/static/resources/doc/29-pangu-framework-sharding.png
+0
-0
未找到文件。
pangu-website/docs/advanced-guide/数据治理之数据分片.md
浏览文件 @
37344bd3
...
@@ -22,26 +22,34 @@ import TabItem from '@theme/TabItem';
...
@@ -22,26 +22,34 @@ import TabItem from '@theme/TabItem';
因此,通过数据分片将存放在单一库中的数据分散至多个库或表中以达到提升性能、提高可用性和降低运维成本的效果。数据分片的有效手段是对数据库进行分库和分表。分库和分表均可以有效的避免由数据量超过可承受阈值而产生的查询瓶颈,同时也是应对高并发和海量数据系统的有效手段。
因此,通过数据分片将存放在单一库中的数据分散至多个库或表中以达到提升性能、提高可用性和降低运维成本的效果。数据分片的有效手段是对数据库进行分库和分表。分库和分表均可以有效的避免由数据量超过可承受阈值而产生的查询瓶颈,同时也是应对高并发和海量数据系统的有效手段。
### 数据分片类型
### 数据分片类型
数据分片可分为垂直分片和水平分片。如下图所示。
数据分片可分为垂直分片和水平分片。
<img width="800"
src={require('/resources/doc/27-pangu-framework-readwrite-splitting.png').default}
alt="读写分离实现原理" />
#### 垂直分片
#### 垂直分片
垂直分片是按照业务域将数据库纵向切分为不同
业务专门使用的相对小库。如电商系统的用户库、订单库、会员库、仓储库、账户库等。垂直拆分可以一定程度缓解数据量和并发量带来的问题,但无法根治。如果垂直拆分之后,表中的数据量依然超过单节点所能承载的阈值,则需要水平分片来进一步处理
。
垂直分片是按照业务域将数据库纵向切分为不同
的数据库。如电商系统的用户库、订单库、会员库、仓储库、账户库等。垂直拆分可以缩库但无法缩表,即可以减小单节点下数据库数据量,但每个数据表里面的数据量是没有变化的;垂直拆分可以一定程度降低单节点数据库的负载,但是每个数据表的并发压力依旧没变
。
#### 水平分片
#### 水平分片
水平分片又称为横向拆分。相对于垂直分片,它不再将数据根据业务逻辑分类,而是通过某个字段(或某几个字段),根据某种规则将数据分散至多个库或多个表中。
例如:根据主键分片,偶数主键的记录放入 db_0(或 table_0),奇数主键的记录放入 db_1(或table_1)
。
水平分片又称为横向拆分。相对于垂直分片,它不再将数据根据业务逻辑分类,而是通过某个字段(或某几个字段),根据某种规则将数据分散至多个库或多个表中。
水平分片从理论上突破了单机数据量处理的瓶颈,并且扩展相对自由,是数据分片的标准解决方案。水平分片从具体实现上又可以分为3种:
**只分表**
、
**只分库**
、
**分库分表**
。如下图所示
。
<img width="650"
src={require('/resources/doc/29-pangu-framework-sharding.png').default}
alt="数据治理之数据分片" />
### 数据分片后面临的问题
### 数据分片后面临的问题
对于一般的简单理解,读写分离就是 DQL 请求走从库,DML 请求走主库。但对于开发人员而言,在实际开发中还需要考虑如下问题。
虽然数据分片解决了性能、可用性以及单点备份恢复等问题,但分布式的架构在获得了收益的同时,也引入了新的问题。
-
**主从数据同步延迟问题**
因为我们主从同步是异步复制的,不可避免的会有延迟。因此有可能出现 mastre 节点已经写入,但是从 slave 节点读取不到数据的问题。解决方法见后续章节:
[
读操作强制走主库
](
#读操作强制走主库
)
和
[
事务方法里的所有读写操作都自动走主库
](
#事务方法里的所有读写操作都自动走主库
)
。
-
面对如此散乱的分片之后的数据,应用开发工程师和数据库管理员对数据库的操作变得异常繁重就是其中的重要挑战之一。他们需要明确知道数据从哪写入,从哪读取。
-
数据分片后势必会带来分布式事务的处理。能够优雅的处理好分布式事务,这对开发而言也是一个全新的挑战。(分布式事务处理跨参考:
[
盘古框架分布式事务最佳实践
](
/docs/advanced-guide/distributed-transaction
)
)
-
数据库请求路由至多数据节点的时候,部分SQL支持不完整或性能损耗较大的问题。
-
**事务问题**
### 数据分片的几个原则
如果一个事务方法里既包含有 DML 请求也有 DQL 请求,如果读请求走从库写请求走主库的话,则势必会带来分布式事务的问题。但对于大部分读写分离场景而言,很显然我们并不希望为了读写分离而去处理分布式事务的问题。因此对于读写分离,恰当的做法是将事务方法中的所有 SQL 请求统一都走主库,将跨库的分布式事务转为本地事务来处理。见后续章节:
[
事务方法里的所有读写操作都自动走主库
](
#事务方法里的所有读写操作都自动走主库
)
。(如果对于分布式场景下的分布式事务问题的处理感兴趣,可以参考:
[
盘古框架分布式事务最佳实践
](
/docs/advanced-guide/distributed-transaction
)
)
-
需综合权衡业务场景、客观估算数据分片性价比,不要盲目分片。数据分片在获得收益的同时,也引入了新的问题。
-
分片参考临界值:一般来讲 MySQL单表记录控制在 1000 万以内、数据库单实例数据大小控制在 1 TB 以内是比较合理的范围。
-
分表不分库仅涉及本地事务,垂直分片和水平分片的分库分表均会带来分布式事务。设计过程应考虑不要人为扩大没必要的分布式事务使用边界。
-
分片键的规划尤为重要,需要结合业务特点来精心设计。
-
以尽量单表查询的原则设计分片逻辑。
-
对于大型应用来说,垂直分片和水平分片一定是联合使用的。但对于一些中小型应用而言,可以只采用水平分片(分库分表或只分表)。
总之,采用什么样的数据架构需要结合
**性能诉求**
、
**可用性**
、
**运维成本**
、
**开发成本**
、
**项目背景**
和
**业务场景**
等方面来做权衡选择。上述仅为一些孤立的参考原则。
### 相关专业术语
### 相关专业术语
...
@@ -49,6 +57,8 @@ import TabItem from '@theme/TabItem';
...
@@ -49,6 +57,8 @@ import TabItem from '@theme/TabItem';
-
**从库**
:数据 DQL 读操作(select)使用的数据库。可支持多从库。
-
**从库**
:数据 DQL 读操作(select)使用的数据库。可支持多从库。
-
**主从同步**
:将主库数据同步到从库的操作。依赖数据库自身的同步机制,比如:MySQL 基于 binlog 的异步复制。
-
**主从同步**
:将主库数据同步到从库的操作。依赖数据库自身的同步机制,比如:MySQL 基于 binlog 的异步复制。
## 读写分离实现原理
## 读写分离实现原理
实现读写分离大致有 3 种方案。如下图所示。
实现读写分离大致有 3 种方案。如下图所示。
<img width="800"
<img width="800"
...
...
pangu-website/static/resources/doc/29-pangu-framework-sharding.png
0 → 100644
浏览文件 @
37344bd3
74.9 KB
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录