加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
需求 2.24 KB
一键复制 编辑 原始数据 按行查看 历史
gaozhw 提交于 2017-09-30 18:00 . 更新需求
在这里提交需求,
格式,需求编号,需求内容,需求目的,提出人的QQ
1.Mycat 2.0 HBT技术解决 多表关联案例
select a.id,a.price,b.username where a.id in (111,222,333,444) and b.id=a.id
解析步骤 :
select a.id,a.price where a.id in (111,222,333,444)——> fetchIntoMapStream(sql,new MapMeta(id,row))
join(b.id=a.id) ——>select b.id,b.username from b where id matchs mapA.key
join("select b.id,b.username from b", mapA);
Mycat 2.0 HBT 代码:
//fetchIntoMapStream(sql,new MapMeta(id,row)).forBatch(100,mapBachRec->{ });
String sql="select a.id,a.price where a.id in (111,222,333,444)";
String sql2="select b.id,b.username from b",
engine.streamOf(new FetchIntoRowStream(new SqlMeta(sql,"a"),new RowMeta("tableA")))
.joinAndOut(new SqlMeta(sql2,"b"),new RowMeta("tableB"),new JoinMeta("tableA.id","tableB.id",Engnine.MEM,100), new ResultSetMeta({"tableA.id,tableA.price,tableB.username"}),(arow,brow)->{out.write(arow,brow[1]});
实际上还有一些细节考虑:
String cond=sql.lastIndexOf("where");
RouteConditionList routeList=new RouteConditionList();
routeList.add(engine.createRouteCondition(Engine.AND,Engine.IN,"aa,bb,cc"));
routeList.add(engine.createRouteCondition(Engine.OR,Engine.GREATE,"aa,bb,cc"));
String[] partions=engine.calcSQLRoute("tableA",routeList);
上述了路由信息可能需要人工指定,放入 SqlMeta, new(sql,"a",routeList)
2.Mycat Exchanger
负责把实现JDBC方式连接Oracle,SQL Server,以及Redis。MongoDB等后端存储的,模拟成标准的MySQL Server,对接Mycat。这样 Mycat就统一支持各种数据库,并且核心还稳定简单。
3.管理命令
增加管理命令,mycat fetch config,返回三列?的表格,文件名称,修改时间,内容(文本),为了Web管理界面调用,展现配置文件内容
以及对应的 mycat update config xxx.conf <文件内容> ,即上传和更新生效某个配置文件,返回一行的Table,optcode ?错误码,以及说明。。。
包括返回集群状态的表格,哪几个节点,谁是Leader。以及是否有Proxy,Proxy的状态,节点上下线,这些都以后要命令行实现,同时给Web使用
所有管理命令都可以被Web调用
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化