收藏 分销(赏)

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

上传人:快乐****生活 文档编号:10509218 上传时间:2025-05-31 格式:PPT 页数:78 大小:2.43MB
下载 相关 举报
罗立树-数据库中间件架构设计和实现细节-.ppt_第1页
第1页 / 共78页
罗立树-数据库中间件架构设计和实现细节-.ppt_第2页
第2页 / 共78页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,数据库中间件架构设计和实现,技术中心,架构部,罗立树,关于我,易宝支付核心开发,阿里巴巴商品线(内部统称,Offer,,基于,Cobar,)服务化落地负责人,中文站开放平台负责人,京东网站交易部架构师,百度高级开发工程师,负责,LBS,地图商户中心架构和团购架构方面的工作,Contents,一些概念,读写分离?,HA(,高可用性,),?,分库分表?,事务和分布式事务?,数据一致性?,数据库性能关键点?,CAP,理论,带着疑问思考,假如你来设计一套中间件你会怎么设计?,你认知的数据库中间件都有哪些?他们相对于我们的解决方案都有哪些优点?,?,?,Contents,现状,中间件解决的问题,简化开发,降低分库分表复杂度,分库分表透明化,统一配置管理,提供监控,链接管理,HA,支持,LoadBlance,支持,提供更好的扩展能力,中间件解决的问题,Contents,实现方式,应用硬编码实现,DAL,封装(或者,ORM,封装),JDBC,基于,Mysql,客户端协议,基于客户端的访问模式,Mysql,协议访问模式,实现方式比较,比较项,DAL,方式,ORM,方式,JDBC,客户端方式,mysql,协议方式,实现难度,低,中,高,较高,应用代码复杂度,高,无,无,无,性能,高,高,高,中,透明性支持,糟糕,良好,良好,很好,运维健壮性,很好,很好,很好,较弱,部署结构复杂度,轻量级,轻量级,轻量级,较重,耦合问题,和业务代码耦合,和框架耦合,和,jdbc,版本耦合,和,mysql,客户端交互协议版本耦合,数据库,&,协议升级问题,数据库版本关联,数据库无关,数据库无关,数据库无关,仅局限,mysql,扩展能力,较复杂,良好,良好,良好,线上修改影响范围,小,小,小,大,跨语言支持,难度大,难度大,难度大,容易,数据库服务器连接,较多,较多,较多,较少,单库事务支持,支持,支持,支持,不支持,分布式事务,支持,性能差,支持,性能差,支持,性能差,不支持,方案选择,方案选择解析,没有完美的解决方案,只有适合的方案,公司现状:,90%,以上应用是,java,代码,成本考虑:轻量级使用物理成本低,项目进度考虑:有一个快速的实现,逐步完善,系统健壮性考虑:基于代理的方案健壮性差一些,开发难度,(,人力成本,),:基于,mysql,协议的开发难度较大,不可控,集群性能上考虑,基于,mysql,协议的可以引入,但是方案上存在架构中心化的缺陷,Contents,功能规划,设计的原则,模块化,职责分离,支持封装和扩展,相关课题比较大,可以在下一次分享中讲述,用户视觉,常用分库分表的方式,schema,表名,实例,相同,不同,相同,不同,不同,相同,相同,相同,不同,不同,相同,不同,相同,不同,不同,不同,不同,不同,路由的方式,ID,段(,range,),Hash,(,mod,),时间,其他方式,领域对象,BatchItem,每一条语句的执行当做一个,batch,项,Function,分库分表路由规则,Interceptor,拦截器,Executor sql,执行器,Merger,结果合并处理器,NodeAnalyzer sql,语法节点分析器,Transaction,事务抽象,NameNode,分表,namenode,抽象,DataNode,数据访问节点抽象,.,分库分表的策略,/*,*常用的方式有:,*,1.,基于,ID,段的,*,2.,基于,hash,的,*,3.,按日期等,*,author,luolishu,*,/,public interface Function,/*,*执行方法返回下标,*,param parameters,key,为字段名,大写开头,,value,为字段在,sql,中的值,*,return,namenode,的下标,*,/,int execute(int size,Map parameters);,并行,Query,支持,支持写入,更新,查询到多个库和表的同一线程操作,事务支持,支持单库事务,不支持分布式事务(简单支持),结果合并,单库单表查询的不需要合并,不带分库分分表字段:,聚集函数,group by,order by limit,having,Join,支持,语句:,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),嵌套查询,-,约束,约束:不支持跨库,被子查询的表要保证所有数据一致性,聚集函数,Select min(id),max(age),avg(age),sum(age),count(age)from t_user;,聚集函数,-,解析,id,age,name,1,12,chen,3,15,li,5,17,huang,7,22,huang,id,age,name,2,16,zhang,4,19,liu,6,32,chen,8,66,huang,1,22,?,66,4,2,66,?,133,4,1,66,24.8750,199,8,merge,Avg(age)=sum(age)/count(age),SELECT MIN(id),MAX(age),AVG(age),SUM(age),COUNT(age)FROM t_user1,SELECT MIN(id),MAX(age),AVG(age),SUM(age),COUNT(age)FROM t_user2,聚集函数,-,使用约束,目前仅仅支持,min,,,max,,,avg,,,count,,,sum,Group by,中用到聚集函数,需要在结果中出现(今后可以考虑自动补全),Group by,语句:,Select min(id),max(age),avg(age),sum(age),count(age),name from t_user,Group by name;,Group by-,解析,id,age,name,1,12,chen,3,15,li,5,17,huang,7,22,huang,id,age,name,2,16,zhang,4,19,liu,6,32,chen,8,66,huang,1,12,?,12,1,chen,5,22,?,39,2,huang,3,15,?,15,1,li,6,32,?,32,1,chen,8,66,?,66,1,huang,4,19,?,19,1,liu,2,16,?,16,1,zhang,1,32,22,44,2,chen,5,66,35,105,3,huang,3,15,15,15,1,li,4,19,19,19,1,liu,2,16,16,16,1,zhang,merge,Group by-,使用约束,group by,字段需要出现在结果集里,DISTINCT,Distinct=group by,所有,result column,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;,Order by-,解析,id,age,name,1,12,chen,3,15,li,5,17,huang,7,22,huang,id,age,name,2,16,zhang,4,19,liu,6,32,chen,8,66,huang,1,12,chen,3,15,li,5,17,huang,7,22,huang,1,12,chen,3,15,li,2,16,zhang,5,17,huang,4,19,liu,7,22,huang,6,32,chen,8,66,huang,merge,2,16,zhang,4,19,liu,6,32,chen,8,66,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,Group by,Order by,,,limit-,解析,id,age,name,1,12,chen,3,15,li,5,17,huang,7,22,huang,id,age,name,2,16,zhang,4,19,liu,6,32,chen,8,66,huang,1,12,12,12,1,chen,5,22,19.5,39,2,huang,3,15,15,15,1,li,6,32,32,32,1,chen,8,66,66,66,1,huang,4,19,19,19,1,liu,1,32,22,44,2,chen,5,66,35,105,3,huang,3,15,15,15,1,li,merge,Limitoffset,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;,Limitoffset,使用建议,避免往后翻页比较多的查询,涉及到翻页需求,可以考虑走外部索引(,search,、,cache,或者索引表等),Having,Select avg(age),name from t_user,having avg(age)30,约束条件:,having,中的条件字段必须要出现在结果集中,Group by,Order by,,,limit-,解析,id,age,name,1,12,chen,3,15,li,5,17,huang,7,22,huang,id,age,name,2,16,zhang,4,19,liu,6,32,chen,8,66,huang,?,chen,1,12,?,huang,2,39,?,li,1,15,32,chen,1,32,66,huang,1,66,19,liu,1,19,16,zhang,1,16,35,huang,merge,Select avg(age),name from t_user1 group by name,Select avg(age),name from t_user2 group by name,22,chen,2,44,35,huang,3,105,15,li,1,15,19,liu,1,19,16,zhang,1,16,having,使用约束总结,避免,join,避免子查询,避免跨库,不使用分布式事务,尽量强调最终一致性,分页不要取,offset,较大的值,Group,,,order by,,,having,等条件必须要出现在结果集里,Contents,GO,语言,+Mysql C+lib,数据层访问虚拟化,支持,redis,,,mongodb,,文件等存储方式,Contents,5,分钟完成分库分表,Contents,Maven,依赖,com.bj58,oceanus-client,0.0.1-SNAPSHOT,接入方式,公司内部组件:core、dao,基于datasource标准,修改,DAO,依赖版本,com.bj58.spat,com.bj58.spat.dao,2.0.0-SNAPSHOT,修改,Core,依赖版本,com.bj58.spat,com.bj58.spat.core,2.0.3-SNAPSHOT,修改,datasource,DataSource dataSource=new DataSourceWrapper(ds);,配置项,配置,属性:,id,唯一标识,classbean,的实现类,配置示例,配置,属性:,id,线程池唯一标识,size,线程池大小,配置示例,默认线程池,可以不配,指明线程池,配置,属性:,id,唯一属性标识,slaves,从属节点,parent,父,ID,子属性采用名字标识当做,key,配置示例,root,123456,com.mysql.jdbc.Driver,5,20,6000,3,配置示例,继承,配置,属性:,id,唯一标识,loadbalance,负载均衡策略,配置示例,root,123456,com.mysql.jdbc.Driver,5,60000,150,配置,属性,:,name:,抽象出的数据库表,differ-name:,是否生成表名,threadpool:,指定线程池,columns:,分库分表字段,配置示例,1,if($ID=1|$ID=3|$ID=5|$ID=7),return 0;,else,return 1;,分库分表策略实现,这里采用,javascript,的方式返回,namenode,的下标,下标从,0,开始,分库分表字段配置,配置示例,2,root,123456,com.mysql.jdbc.Driver,表配置内部定义,datanode,和,namenode,用,java,实现的分库分表策略,配置示例,3,内置通用函数实现,:mod,day,hash,可以指定生成,sql,的前缀,配置,接入注意事项,原有代码要保证没有合并功能,有的话需要修改代码,总结,业务更加专注于业务层开发,数据库中间件屏蔽数据保存细节,能够提供更大的扩展灵活性,实施过程中需要大家支持,逐步推进,Q&A,Thanks!,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服