当前位置:文档之家› 罗立树-数据库中间件架构设计和实现细节课件

罗立树-数据库中间件架构设计和实现细节课件


mysql协议方式
良好 很好 轻量级
和业务代码耦 和框架耦合 合 数据库无关 较复杂 数据库无关 良好 小 难度大 较多 支持
和mysql客户端交互协议版本耦合,数据库&协 议升级问题 仅局限mysql 良好 大 容易 较少 不支持 不支持
线上修改影响范围 小 跨语言支持 难度大
数据库服务器连接 较多 单库事务支持 分布式事务 支持
中间件解决的问题
Contents
基础知识介绍 开发中间件的目的 实现方案解析 架构设计和实现细节 中间件的未来规划 5分钟完成分库分表 如何接入使用
实现方式
• • • • 应用硬编码实现 DAL封装(或者ORM封装) JDBC 基于Mysql客户端协议
基于客户端的访问模式
Mysql协议访问模式
merge
2 5
4 7 6 8
16 17
19 22 66
zhang huang
liu huang chen huang
Group by
语句:Select min(id),max(age),avg(age),sum(age),count(age), name from t_user Group by name Order by name Limit 5
15
17 22 age 16 19 32 66
li
huang huang name zhang liu chen huang
Avg(age)=sum(age)/count(age)
聚集函数-使用约束
• 目前仅仅支持min,max,avg,count,sum • Group by中用到聚集函数,需要在结果中出 现(今后可以考虑自动补全)
15
17 22 age 16 19 32 66
li
huang huang name zhang liu chen huang
1 5 3
32 66 15
22 35 15
44 105 15
2 3 1
chen huang li
Limit…offset
• Select min(id) as min,max(age),avg(age),sum(age),count(age), username from t_user Group by username Order by min limit 10 offset 100;
Order by
• Select min(id) as min,max(age),avg(age),sum(age),count(age), name from t_user Group by name Order by min;
1 3
12 15
chen li
5
7
17
22
huang
huang
Order by-解析
实现方式比较
比较项
实现难度 应用代码复杂度 性能 透明性支持 运维健壮性 部署结构复杂度 耦合问题 数据库版本关联 扩展能力 低 高 高 糟糕 很好 轻量级
DAL方式
中 无 高
ORM方式
JDBC客户端方式
高 无 高 良好 很好 轻量级 和jdbc版本耦合 数据库无关 良好 小 难度大 较多 支持 较高 无 中 很好 较弱 较重
分库分表的策略
/** * 常用的方式有: * 1.基于ID段的 * 2.基于hash的 * 3.按日期等 * @author luolishu */ public interface Function { /** * 执行方法返回下标 * @param parameters key为字段名,大写开头,value为字段在sql中的值 * @return namenode的下标 */ int execute(int size, Map<String, Object> parameters); }
• 语句:Select * from t_user u join t_city c on u.city_id=c.id where user_id=‘luolishu’ • 约束:不支持跨库join,被join的表要保证 所有数据一致性
嵌套查询
• Select * from t_user where t_city_id in(select id from t_city where country=‘china’)
表名
不同 不同 相同 相同 不同 不同
实例
相同 相同 不同 不同 不同 不同
路由的方式
ID段(range) Hash(mod) 时间 其他方式……
领域对象
BatchItem 每一条语句的执行当做一个batch项 Function 分库分表路由规则 Interceptor 拦截器 Executor sql执行器 Merger 结果合并处理器 NodeAnalyzer sql语法节点分析器 Transaction 事务抽象 NameNode 分表namenode抽象 DataNode 数据访问节点抽象 …….
id 1
age 12
name chen
6 8 4 2
32 66 19 16
? ? ? ?
32 66 19 16
1 1 1 1
chen huang liu zhang
3
5 7 merge id 2 4 6 8
15
17 22 age 16 19 32 66
li
huang huang name zhang liu chen huang
支持,性能差 支持,性能差 支持,性能差
方案选择
方案选择解析
• • • • • • 没有完美的解决方案,只有适合的方案 公司现状:90%以上应用是java代码 成本考虑:轻量级使用物理成本低 项目进度考虑:有一个快速的实现,逐步完善 系统健壮性考虑:基于代理的方案健壮性差一些 开发难度(人力成本):基于mysql协议的开发难度较大,不 可控 • 集群性能上考虑 • 基于mysql协议的可以引入,但是方案上存在架构中心化 的缺陷
Limit…offset使用建议
• 避免往后翻页比较多的查询
• 涉及到翻页需求,可以考虑走外部索引 (search、cache或者索引表等)
Having…
• Select avg(age) ,name from t_user having avg(age) >30
约束条件: having中的条件字段必须要出现在结果集中
??
Contents
基础知识介绍 开发中间件的目的 实现方案解析 架构设计和实现细节 中间件的未来规划 5分钟完成分库分表 如何接入使用
现状
中间件解决的问题
• • • • • • • • 简化开发,降低分库分表复杂度 分库分表透明化 统一配置管理 提供监控 链接管理 HA支持 LoadBlance支持 提供更好的扩展能力
Group by
语句:Select min(id),max(age),avg(age),sum(age),count(age), name from t_user Group by name;
Group by-解析
1 5 3 12 22 15 ? ? ? 12 39 15 1 2 1 chen huang li
数据库中间件架构设计和实现
技术中心· 架构部 罗立树
关于我
• 易宝支付核心开发 • 阿里巴巴商品线(内部统称Offer,基于 Cobar)服务化落地负责人,中文站开放平 架构和团购架构方面的工作
Contents
基础知识介绍 开发中间件的目的 实现方案解析 架构设计和实现细节 中间件的未来规划 5分钟完成分库分表 如何接入使用
聚集函数-解析
id 1 age 12 name chen
3
SELECT MIN(id), MAX(age), AVG(age), SUM(age), COUNT(age) FROM t_user2 2 66 ? 133 merge 4 5 7 id 2 4 6 1 66 24.8750 199 8 8
1 5 3 4 2
32 66 15 19 16
22 35 15 19 16
44 105 15 19 16
2 3 1 1 1
chen huang li liu zhang
Group by-使用约束
group by字段需要出现在结果集里
DISTINCT
Distinct=group by 所有result column
Group by,Order by,limit-解析
1 5 3 12 22 15 12 19.5 15 12 39 15 1 2 1 chen huang li
id 1
age 12
name chen
6 8 4
32 66 19
32 66 19
32 66 19
1 1 1
chen huang liu
3
5 7 merge id 2 4 6 8
并行Query支持
• 支持写入,更新,查询到多个库和表的同 一线程操作
事务支持
• 支持单库事务 • 不支持分布式事务(简单支持)
结果合并
• 单库单表查询的不需要合并 • 不带分库分分表字段:
1. 2. 3. 4. 聚集函数 group by order by …limit having
Join支持
huang 1 liu 1
3 Select avg(age) ,name from t_user2 group by name
5 7 id 2 4 6 8
15
17 22 age 16 19 32 66
li
huang huang name zhang liu chen huang
相关主题