1 / 18
文档名称:

mycat路由解析开发指南.docx

格式:docx   大小:37KB   页数:18页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

mycat路由解析开发指南.docx

上传人:圭圭 2022/4/26 文件大小:37 KB

下载得到文件列表

mycat路由解析开发指南.docx

相关文档

文档介绍

文档介绍:
mycat路由解析开发指南
Mycat路由解析开发指南
1 切换解析器配置
: 在内部参加
druidparser

的语法类型?DruidParser解析是否“DruidParser解析”已经完成了路由?tryRouteForTables计算路由完毕
图3-4 DruidMysqlRouteStrategy之AST语法树解析流程
DruidParser解析子流程 此处DruidParser解析的含义
说明:DruidParser解析指的是利用ast语法树〔SQLStatement,这是druid解析器已经解析出来的〕解析出表名、条件表达式、字段列表、值列表等信息,用于我们计算路由的过程。










起先visitor解析statement解析改写Sql完毕 图3-5 DruidParser解析子流程
该流程封装在DefaultDruidParser类的parser方法中。
两种解析方式
Druid解析有两种方式:vistor方式和statement方式。
Vistor方式的用法:
String sql = “select * from tableName”;
MySqlStatementParser parser = new MySqlStatementParser(sql); SQLStatement statement = ();
MycatSchemaStatVisitor visitor = new MycatSchemaStatVisitor(); (visitor);
经过上面的步骤后,你可以很便利的从visitor中获得表名、条件、表别名map、字段列表、值类表等信息。用这些信息就可以做路由计算了。
Statement方式的用法
String sql = “select * from tableName”;
MySqlStatementParser parser = new MySqlStatementParser(sql); SQLStatement statement = ();
SQLSelectStatement selectStmt = (SQLSelectStatement) statement; 然后就可以从selectStmt里面得到想要的信息去了。
假如sql = “delete from tableName”;










就要转型为MySqlDeleteStatement
MySqlDeleteStatement deleteStmt = (MySqlDeleteStatement) statement;

路由计算 路由计算时机
路由计算有两个时机:DruidParser解析的同时计算路由、DruidParser解析完之后再计算路由。
一般状况下都是解析完之后再计算,有些特别场景须要边解析边计算路由〔困难的改写sql, into …values (),()….语句〕。
两种时机的限制由RouteResultset类中setFinishedRoute(true)来限制,假如DruidParser边解析边计算,计算完之后须要调用setFinishedRoute(true),假如要等到解析完之后再计算,那么不要设置该变量。
DruidParser解析的同时计算路由
该场景一般是要改写困难sql,将一个sql拆成多个sql发往不同的dataNode时才运用。 选择该时机时,一般都是继承DefaultDruidParser,然后在重写statementParse方法,在该方法完成路由计算与设置,