mycatcatlet初步探析
分析catlet,画出Mycat收到新连接请求,执行SQL,返回结果集的过程中所涉及到的重要类,方法,以及逻辑
样例SQL:Select ,, from a,b where =
分布:假如sql涉及到多个节点。
大概mycat的流程如下:
1,前端sql请求过来,调用RouteService类,会跟原始SQL进行判断需要返回哪个 RouteResultset,同时会对返回结果进行缓存,在这个类里面加载catletclass,并且调用route方法、调用processSQL方法。
public RouteResultset route(SystemConfig sysConfig, SchemaConfig schema,
int sqlType, String realSQL, String charset, ServerConnection sc,
LayerCachePool cachePool, String hintSQLValue,int hintSqlType, Map hintMap)
throws SQLNonTransientException {
// ctx
String cateletClass = hintSQLValue;
if (()) {
("load catelet class:" + hintSQLValue + " to run sql "
+ realSQL);
}
try {
Catlet catlet = (Catlet) ()
.getCatletClassLoader().getInstanceofClass(cateletClass);
(sysConfig, schema, sqlType, realSQL,charset, sc, cachePool);
(realSQL, new EngineCtx(()));
} catch (Exception e) {
("catlet error "+e);
throw new SQLNonTransientException(e);
}
return null;
} 123456789101112131415161718192021123456789101112131415161718192021
,new DirectDBJoinHandler(ctx)加载handler
mycatcatlet初步探析 来自淘豆网www.taodocs.com转载请标明出处.