- 1、本文档共46页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
druid比fdbparder快16倍 druid比jsqlparser快8倍 2013/12/27 * database-type数据类型:目前只支持PostgreSQL,不写默认就是PG read-strategy读数据库负载均衡配置,默认only-write。每一个数据分片都不一样 weight是数据库参与只读的权重 pool-size和timeout可以为每个数据分片指定线程池大小和等待线程超时时间 2013/12/27 * Select 不需要处理,只针对DML操作 2013/12/27 * Primary-key表中的主键 Foreign-key表外键,也是父表的主键 table-postfixes表后缀名枚举集合,逻辑表和所有子表的命名规范都按照这个规则来设定 database-strategy 逻辑表的数据库路由规则 table-strategy 逻辑表的实际表路由规则 所有子表都使用主表的路由规则 2013/12/27 * Sharding-columns路由字段,需要和逻辑表匹配(即逻辑表中包含此字段,否则获取不到路由值) 2013/12/27 * 2013/12/27 * 2013/12/27 * 全局表 在每一个数据分片具有相同的静态数据称为全局表 在数据分片中直接关联业务表做查询提升执行效率 对全局表做DML操作时需要应用所有数据分片上 DB1 insert into t_stock(id,code,name) values(102, ’600XXX’, ’YYYYY’) 获取表名 SQL解析 TableName: t_stock DB2 DB3 全局表路由 业务代码 Add(Stock) pddl:tables pddl:global-table name=“stock”/ pddl:global-table name=“city”/ ... /pddl:tables 全局/字典表解析过程 全局表 insert into t_stock(id,code,name) values(102, ’600XXX’, ’YYYYY’) SQL PDDL id code name 1 000001 上证指数 2 000002 万科A 3 000003 金田A … … DB1.t_stock id code name 1 000001 上证指数 2 000002 万科A 3 000003 金田A … … DB2.t_stock id code name 1 000001 上证指数 2 000002 万科A 3 000003 金田A … … DB3.t_stock insert into t_stock(id,code,name) values(102, ’600XXX’, ’YYYYY’) insert into t_stock(id,code,name) values(102, ’600XXX’, ’YYYYY’) insert into t_stock(id,code,name) values(102, ’600XXX’, ’YYYYY’) 大纲 why data router 我们的方案 分片数据源 全局表 业务逻辑表 全局序列号 数据聚合 事务处理 SQL限流 数据扩容 运维监控 逻辑表定义 路由规则 pddl:strategy id=“orderDatabaseStrategy” sharding-columns=user_id expression=“DB${user_Value() % 3+1}”/ pddl:strategy id=orderTableStrategy sharding-columns=order_id expression=“_${order_Value() % 3}”/ 在配置文件中配置数据库和表路由规则,使用sharding-columns来指定路由列,解析SQL后获取逻辑表和路由列关联的值,根据此值进行路由计算 SQL中支持路由的查询条件操作包括 equals 、in 和 between and 其他查询条件操作做笛卡尔操作 多租户 p2 p1 p0 PDDL 根据用户的租户号路由到指定的数据库中 把租户的数据分片放置在HintContext中即可 租户编号:p2 逻辑表ER分片 select from t_order o,t_item i where o.order_id =i.order_id and user_id =3 and (o.order_id= 1 or o.order_id=2) SQL PDDL order_id user_id 1 3 4 3 7 6 … … DB1.
文档评论(0)