当前位置:
文档之家› 《数据库中间件MyShard》
《数据库中间件MyShard》
2020/3/26
KV
HASET [table_name] SET V1=:v1,V2=:v2 WHERE K1=:k1 and K2=:k2
HADELETE [table_name] WHERE K1=:k1 and K2=:k2
读
操
Select * from a where partition_key=1 and ( 其他条件) ;
13
sharding
MyShard
hash分区 根据分区键查询,支持in语法
MySQL
MySQL
数据
MySQL
范围分区 根据范围查询,支持跨分片的范围查询
2020/3/26
14
结构化数据模型和半关系操作模型
用户表
用户标识 1 2
用户姓名 张三 李四
考分表
用户标识 1 2
数学 90 87
语文 80 56
以空间换时间
▪ 建表存储索引数据 ▪ 存储主键、索引、版本字段 ▪ 可存储部分数据
以效率换一致性
create index idx_order_uid on order partition key uid sharding_rule hash_int_100;
2020/3/26
CREATE QUICK INDEX idx_order_q ON order PARTITION KEY uid SHARDING_RULE hash_int_100 WITH type = “10";
实现在主主复制功能
跨IDC部署
2020/3/26
2
高可用系统
APP
APP
代理层
服务层
数据层
2020/3/26
高可用系统:透明的应用故障切换、消除 单点故障 • 应用程序故障发生时,可以自动透明地
切换到其他服务器上 • 应用程序和查询不会中断,用户感觉不
到故障的发生 代理层服务层高可用 • 代理层智能路由 • 服务层多点连接 • 读写分离 数据层 • 集群容错技术 • 磁盘备份技术 • 多机房容灾技术
Availability
C: Consistency 一致性 A: Availability 可用性 P: Tolerance of network Partition
分区容错性
Toleerance to network
Partitions
传统关系型数据库:CA 非关系型数据库: AP
2020/3/26
2020/3/26
6
binlog同步原理
Myshard(g1) SQL线程
IO线程
IO线程
IO线程
Myshard(g2) SQL线程
IO线程
IO线程
IO线程
中继日志
MySQL
MySQL
2020/3/26
Binlog
Binlog
中继日志
MySQL
MySQL
Binlog
Binlog
7
CAP原理
Consistency
3
为什么要开发MyShard
数据服务
读写分离
主数据库 IDC1
高可用
数据服务
写代理
主数据库 IDC1
可伸缩
数据服务
MMysyhsahradrd IDIDC1C1
从数据库 IDC2
2020/3/26
从数据库 IDC3
主数据库 IDC2
主数据库 IDC3
MMysyhsharadrd IDC2
MMysyhsharadrd IDC3
2020/3/26
MyShard介绍
欢聚时代:喻先兵
1
MyShard是什么
MyShard是一个数据库中间件
/p/myshard/
位于应用程序和MySQL之间
截取用户SQL请求、SQLRewrite、转发到MySQL
MyShard是一种高可用数据库
4
开源的NoSQL
mongoDB
HBase
2020/3/26
为什么不采用这些NoSQL? • 跨IDC的高可用 • 全局第二索引
5
MyShard部署模型
客户端 服务代理 MyShard[IDC1]
同步服务
MyShard[IDC2]
客户端
•
服务代理
同步服务
MySQL分区 客户端 服务代理
同步服务
MySQL分区 • •
8
BASE模型
Basically Availble 基本可用
Soft-state 软状态/柔性事务
Eventual Consistency 最终一致性
2020/3/26
9
Quorum NRW
N:复制的节点数量 R:成功读操作的最小节点数 W:成功写操作的最小节点数 W+R〉N,可以保证强一致性 典型的场景:
w (k:1) w (k:3)
(k:3)
w (k:3)
(k:0)
(k:3)
w (k:1) w (k:2)
(k:3)
实现简单
2020/3/26
优化资源
高效适用
11
第二索引
MyShard 用户表[uid分区]
MyShard
按用户名查询怎 么办?
用户索引[按用户名分区]
MySQL
MySQL
MySQL
MySQL
MySQL
MySQL
数据
第二索引
Select * from user where uid=1 and name like=‘%’; Select * from user where name=‘henry’;
Байду номын сангаас
2020/3/26
12
索引类型
全局第二索引
一致性第二索引
▪ 建表存储索引数据 ▪ 存储所有字段 ▪ 存储所有数据
select count(*) from order where uid=1 and type=10;
本地索引
▪ 在原表上建索引 ▪ mysql的索引格式
以空间换时间 ALTER TABLE order add INDEX idx_order_local ( prod_id,order_time) ;
MySQL分区 MyShard[IDC3]
高可用性、分区容错性、最 终一致性
– Multi-Master【主主服 务】模型
– 专业灵活高效的版本冲突 检测解决机制
可伸缩性
– 灵活的分布式策略和路由 能力
– 海量存储能力 – 高并发服务能力 其他特性
– MySQL协议的服务能力和 半关系型操作模型
– 高效可靠数据同步能力
强一致性:W=N,R=1 高可用性:W=1
HBase:W=N,R=1 MyShard:W=1,R=1
2020/3/26
10
最终一致性模型
机房A 最近版本值
机房B 最近版本值
机房C 最近版本值
w (k:1)
(k:0)
(k:1)
w (k:2) w (k:3)
(k:3)
w (k:2)
(k:0)
(k:2)
作
Select f1,f2,f3 from a where partition_key=1 and ( 其他条件) ;