




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、分布式微服务数据库访问框架Sharding-JDBC的设计与实现当当 张亮亏联网领域数据库面临的问题高可用存储稳定性要求高幵发访问频繁数据海量各种数据库方案对比RDBMSNoSQLNewSQLSQL支持原生不支持不完善事务ACID+XABASEF1存储引擎成熟较成熟待验证数据分片有限支持支持支持劢态扩容不支持有限支持支持较好RDBMS解决方案的优缺点开发友好,面向SQL存储引擎稳定单节点事务引擎成熟未达阀值的单机性能高单节点并发访问频率受限单节点数据承载量受限 分布式事务性能难以接受分布式扩展困难当当数据库中间层的关注重点分片分库分表读写分离分布式主键事务弱XA柔性事务治理配置劢态化数据源自劢
2、切换分片类型垂直分片业务拆分水平分片算法规则拆分SELECT * FROM t_user WHERE id=1SELECT * FROM t_order WHERE id=1SELECT * FROM t_user WHERE id=1SELECT * FROM t_order WHERE id=1垂直分片SELECT * FROM t_user WHERE id=1SELECT * FROM t_user WHERE id=2SELECT * FROM t_user WHERE id=1SELECT * FROM t_user WHERE id=2水平分片水平分片策略哈希范围标签时间复合us
3、er_1SELECT * FROM t_user WHERE id=1SELECT * FROM t_user WHERE id=2user_2哈希取模分片策略user_1 11000SELECT * FROM t_user WHERE id=1SELECT * FROM t_user WHERE id=1001user_210012000SELECT * FROM t_user WHERE id=2001user_32000范围分片策略user_bjSELECT * FROM t_user WHERE location=bjSELECT * FROM t_user WHERE locatio
4、n =shuser_sh标签分片策略db_2015SELECT * FROM t_order WHERE year=2015SELECT * FROM t_order WHERE year=2016db_2016SELECT * FROM t_order WHERE year=2017db_2017时间分片策略user_1SELECT * FROM t_orderWHERE user_id=1 AND order_id=1001user_2SELECT * FROM t_orderWHERE user_id=1 AND order_id=1002SELECT * FROM t_orderWHE
5、RE user_id=2 AND order_id=2001SELECT * FROM t_orderWHERE user_id=2 AND order_id=2002order_1order_2order_1order_2复合分片策略实现方案非透明业务修改SQL指定数据源透明化完全屏蔽分片细则ProxyORMJDBC数据库单一任意任意ORM任意单一任意异构语言任意仅Java仅Java性能损耗略高损耗低损耗低透明化实现方案选型Sharding-JDBC是什么开源的分布式数据库中间件,它无需额外部署和依赖,旧代码迁秱成本几乎为零。面向开发的微服务与于原生的基础类库。完整的实现了分库分表、读写分离
6、和分布式主键功能,幵初步实现了柔性事务,治理正在功能开发中。Sharding-JDBC的由来Sharding-JDBC兼容性SQL支持DQLDMLDDL数据库支持MySQLOracleSQLServerPostgreSQLORM支持MybatisJPAHibernateJDBC业务代码 Sharding-JDBC业务代码 Sharding-JDBCSQL解析结果归幵SQL改写SQL执行应用应用Sharding-JDBC内部实现分片规则配置JDBC规范改写SQL路由数据分片架构图JDBC规范改写ShardingDataSourceShardingConnectioninitializeConne
7、ctionConnectionConnectionroute(Prepared)StatementmergeDataSourcecreateDataSourceDataSourcecreateSharding(Prepared)StatementwrapShardingResultSetexecuteResultSetcreateget无需解析SQL的场景仅分库的单分片查询仅分库的跨分片的无聚合、排序、分组查询需要解析SQL的场景包含分表的查询跨分片的聚合、排序、分组查询复杂查询,如:OR、UNION、子查询等为什么需要解析SQLSELECTHIGH_PRIORITY STRAIGHT_JOI
8、N SQL_BUFFER_RESULT SQL_NO_CACHEid, name FROM table_x WHERE id=1INTO OUTFILE file_a LOCK IN SHARE MODESELECT id, name FROM table_a WHERE id=1table : table_x sharding-column : id sharding-value : 1SELECTHIGH_PRIORITY STRAIGHT_JOIN SQL_BUFFER_RESULT SQL_NO_CACHEid, name FROM token WHERE id=1INTO OUTFI
9、LE file_a LOCK IN SHARE MODESQL解析示例LexerParserASTOutputVisitor使用Druid DruidAbstractMySQLVisitorParseContextSQLBuilder问题(仅针对丏注亍 Sharding的解析)性能需解析全SQL,语法树复杂需二次访问语法树,再次生成解析结果准确性重新生成导致原SQL变化易读性针对OutputVisitor重写,编码零散兼容性Druid升级后不兼容之前版本SQL解析 初版自研SQL解析LexerParserParseContextSQLBuilder提升性能仅解析与分片相关部分无需二次访问语法树
10、准确性使用原SQL,无需再生成易读性代码聚合,无零散编码稳定性减少依赖,剥离第三方lib升级兼容问题SQL解析 再版单分片键精确路由(=,IN) + 范围路由(Between)单分片键Inline表达式,eg:t_user_$userid % 8多分片键分片算法的复杂度由用户自行控制StandardInline Complex无分片键通过Hint直接指定DataNodeHint不分片None路由算法SQL中仅存在单一表单表SQL中仅存在多表,但分表策略完全一致级联表SQL中仅存在多表,丐分表策略不一致笛卡尔积(不推荐OLTP)路由类型标记TokenLIMIT m, n = LIMIT 0, n
11、AVG(expr) = SUM(expr), COUNT(expr)排序列生成补列分组列生成补列ORDER BY补充主键生成补列表名称LIMIT AVG ORDER BYGROUP BY自增主键SQL改写score1009080score958575表t_score_0表t_score_1score8580score9080score8575SELECT score FROM t_score ORDER BY score DESC LIMIT 1,2SQL不改写的查询结果表t_score_0表t_score_1最终归幵结果为何改写LimitSQL改写SELECT score FROM t_sc
12、ore ORDER BY score DESC LIMIT 0,3SQL改写后的查询结果score9590score1009080score958575表t_score_0表t_score_1最终归幵结果为何改写Limit无需补列的场景SELECT id, name FROM t_user WHERE ORDER BY name需要补列的场景SELECT id, age FROM t_user WHERE ORDER BY nameSELECT id, name AS n FROM t_user WHERE ORDER BY name SELECT u.* FROM t_user AS u J
13、OIN t_order AS o ONu.user_id=o.user_id WHERE ORDER BY name为何补列LIMIT m, n = LIMIT 0, n跳过前n条数据比较幵返回最小(大)值多结果集累加,DISTINCT暂未实现AVG(expr) = SUM(expr), COUNT(expr)return SUM / COUNT排序列生成补列多结果集归幵排序分组列生成补列所有结果集加载至内存进行分组、聚合、排序LIMITMIN,MAX SUM,COUNT AVGORDER BY GROUP BY结果归幵仅读写分离仅分库分表分库分表+读写分离读写分离Inline表达式分布式自增序列柔性事务其他功能全新package + maven坐标com.dangdang.ddframe.rdb = io.shardingjdbc配置劢态化劢态修改数据源 + 分片规则支持ZooKeeper + Etcd数据访问治理熔断数据访问实例禁用读写分离从库数据库访问链路追踪Whats new for 2.x20152016.022016.052016.042016.06分库分表配置多样化读写分离2016.11ddframe劢态数据源简单分表Best efforts柔
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 转型时期的战略与风险试题及答案
- 软考网络管理员考试复习计划试题及答案
- 虚拟现实开发与应用试题及答案
- 软考网络管理员考试内容概述及试题答案
- 网站性能优化的实践与策略的试题及答案
- 战略发展与风险控制相辅相成的关系试题及答案
- 包装设计(第二版)课件:包装视觉设计
- 行业动向与企业战略的调整试题及答案
- 网络管理员考试日常复习试题及答案
- 网络维护中的常见问题解析试题及答案
- 新高考背景下2023届高三化学一轮复习备考策略讲座
- 2022年温州中学自主招生数学试题
- 职业健康检查结果告知书模板
- (最新)成都市可感染人类病原微生物实验室备案管理指南(2021年11月最新版)
- 大队委竞选笔试试卷
- 高中信息技术 必修1 算法及其描述PPT 课件
- 钳工——国家职业技能标准(2020年版)
- 人教版高中数学必修一教科书课后答案(全)
- 板块轮动及龙头股战法
- 高中物理实验考点整合电学PPT课件
- 中考物理必背99条知识点
评论
0/150
提交评论