(2.6)中心层-SqlParser
中心层Sql分析组件SqlParser是中心层中异常重要的一个部分,它负责对sql语句的语法分析与语义分析。
为什么要进行Sql语法语义分析?须要解析出什么东东?
type=1请求转发
对于请求的中转,上游一个数据库连接对应一个逻辑库LOGIC_DB,由ConfigMgr可以知道对应下流一个真实的ITEM(ip/port/db),此时直接转发请求即可,无需解析Sql语句。
type=2分库支撑
对于分库的支撑,解析Sql语句可能须要获得这些问题的谜底:Sql是否带了partition-key-column?partition-key-column的值是若干?
例如一条Sql语句:select * from user where uid=123456;
就必须将“uid”列属性,以及uid的列属性值“123456”解析出来,以用作后续请求路由。
留意:更细的情况是,针对每个表,分库partition-key-column都是不一样的,上例中还须要将表名user也解析出来。
这一层次面对这些细节:
- 若何解析Sql语句:可以参考mysql源码对SQL语句的解析,亦可参照cober对SQL语句的解析办法;
注:因为我们只须要支撑多库,数据库库名信息是在“连接”这一层获取的,又我们支撑的分布式Sql的种类有限,故只需解析partition-key-column,offset/limit等少数信息即可。
(2.7)中心层-SqlModifier
中心层Sql修改组件SqlModifier是中心层中异常重要的一个部分,它负责对sql语句改写。
为什么要对Sql语句进行改写?
type=1的请求转发,无需修改Sql,但对于type=2的分库支撑,有些Sql语句就必须进行改写。
例如:select * from user where uid in(1,2,3,4,5,6);
select * from user where uid in(2,4,6); => 路由给0库;
select * from user where uid in(1,3,5); => 路由给1库;
又例如:select * from user limit 1000,10;
则sql可能会被改写为:
select * from user limit 0,1010; => 分别路由到两个库,收集完结不雅集共2020笔记录,再排序取个中1000-1010这10条。
数据库中心层项目背景不再展开,根据前期的调研以及和公司同事的评论辩论,中心层的核心目标重要有两个:
- db虚拟化:让db对营业线透明(本文的db均指mysql),营业线不再须要知道db的┞锋实ip,port,主大年夜关系,读写关系,高可用等
- 分库的支撑:让db的分库对营业线透明
哪些Sql须要改写,若何改写?
结合我们须要实现的四类分布式Sql:
- patition key通俗萌芽
- patition key上的IN萌芽
- 非patition key上的萌芽
- 有限功能的排序+分页萌芽
只有(2)和(4)两项须要改写,改写办法上文已述,个中(4)的改写效力较低,应用起来要谨慎。
- <db id=0 logic_db="im"type=1>
- <item ip="10.58.1.100" port=3306 name="im" />
- </db>
中心层Sql路由组件SqlRouter是中心层中异常重要的一个部分,它负责对sql语句进行路由。
哪些Sql须要路由,若何路由?
结合我们须要实现的四类分布式Sql:
- patition key通俗萌芽
- patition key上的IN萌芽
- 非patition key上的萌芽
- 有限功能的排序+分页萌芽
只有(1)和(2)两项须要路由,(3)和(4)须要将请求分发至所有的PARTITION。
(2.9)中心层-ResultSetMerger
中心层结不雅集归并组件ResultSetMerger是中心层中异常重要的一个部分,它负责对结不雅集进行归并,筛选。
哪些Sql须要归并结不雅集,筛选结不雅集?
结合我们须要实现的四类分布式Sql:
- patition key通俗萌芽
- patition key上的IN萌芽
- 非patition key上的萌芽
- 有限功能的排序+分页萌芽
个中(2)和(3)类萌芽须要将结不雅集进行归并,(4)不只要归并结不雅集,还须要将结不雅集在本地进行排序,然后再筛选出真正的结不雅集。
(2.10)其他组件
- AdminServer:监听一个新端口,吸法术据库治理员敕令的server
- AdminMgr:实现治理员敕令的组件
- MonitorMgr:实现监控报警的组件
- StatisticsMgr:实现数据统计功能的组件
感激看完,解释你对数据库中心件感兴趣,建议在PC上细看3遍,必定更有收成。
推荐阅读
CTO练习营 | 12月3-5日,深圳,是时刻成为优良的技巧治理者了 昨天我们报道了最新的Mac OS体系出现严重马脚的问题,重要来说就是,你设置的暗码设置形同虚设,输入“root”作为用>>>详细阅读
本文标题:假如让你来设计数据库中间件
地址:http://www.17bianji.com/lsqh/39319.html
1/2 1