一、Mycat1.6之加载Schema的DataNode源码解读
//<dataNode name="dn1" dataHost="localhost1_gaojingsong1" database="scott" /> private void load(String dtdFile, String xmlFile) { InputStream dtd = null; InputStream xml = null; dtd = XMLSchemaLoader.class.getResourceAsStream(dtdFile); xml = XMLSchemaLoader.class.getResourceAsStream(xmlFile); Element root = ConfigUtil.getDocument(dtd, xml).getDocumentElement(); //先加载所有的DataHost loadDataHosts(root); //再加载所有的DataNode loadDataNodes(root); //最后加载所有的Schema loadSchemas(root); } //<dataNode name="dn1" dataHost="localhost1_gaojingsong1" database="scott" /> private void loadDataNodes(Element root) { //读取DataNode分支 NodeList list = root.getElementsByTagName("dataNode"); for (int i = 0, n = list.getLength(); i < n; i++) { Element element = (Element) list.item(i); String dnNamePre = element.getAttribute("name"); String databaseStr = element.getAttribute("database"); String host = element.getAttribute("dataHost"); //字符串不为空 if (empty(dnNamePre) || empty(databaseStr) || empty(host)) { throw new ConfigException("dataNode " + dnNamePre + " define error ,attribute can't be empty"); } //dnNames(name),databases(database),hostStrings(dataHost)都可以配置多 个,以',', '$', '-'区分, //但是需要保证database的个数*dataHost的个数=name的个数 //多个dataHost与多个database如果写在一个标签,则每个dataHost拥有所有database //例如: //则为:localhost1拥有dn1$0-75,localhost2也拥有dn1$0-75(对应db$76-151) String[] dnNames = io.mycat.util.SplitUtil.split(dnNamePre, ',', '$', '-'); String[] databases = io.mycat.util.SplitUtil.split(databaseStr, ',', '$', '-'); String[] hostStrings = io.mycat.util.SplitUtil.split(host, ',', '$', '-'); //此处复杂的配置关系请看步骤二实验结果,进行理解 if (dnNames.length > 1 && dnNames.length != databases.length * hostStrings.length) { throw new ConfigException("dataNode " + dnNamePre + " define error ,dnNames.length must be=databases.length*hostStrings.length"); } if (dnNames.length > 1) { List<String[]> mhdList = mergerHostDatabase(hostStrings, databases); for (int k = 0; k < dnNames.length; k++) { String[] hd = mhdList.get(k); String dnName = dnNames[k]; String databaseName = hd[1]; String hostName = hd[0]; createDataNode(dnName, databaseName, hostName); } } else { createDataNode(dnNamePre, databaseStr, host); } } } /** * 匹配DataHost和Database,每个DataHost拥有每个Database名字 * @param hostStrings * @param databases * @return */ private List<String[]> mergerHostDatabase(String[] hostStrings, String[] databases) { List<String[]> mhdList = new ArrayList<>(); for (int i = 0; i < hostStrings.length; i++) { String hostString = hostStrings[i]; for (int i1 = 0; i1 < databases.length; i1++) { String database = databases[i1]; String[] hd = new String[2]; hd[0] = hostString; hd[1] = database; mhdList.add(hd); } } return mhdList; } private void createDataNode(String dnName, String database, String host) { DataNodeConfig conf = new DataNodeConfig(dnName, database, host); if (dataNodes.containsKey(conf.getName())) { throw new ConfigException("dataNode " + conf.getName() + " duplicated!"); } if (!dataHosts.containsKey(host)) { throw new ConfigException("dataNode " + dnName + " reference dataHost:" + host + " not exists!"); } dataHosts.get(host).addDataNode(conf.getName()); dataNodes.put(conf.getName(), conf); } public final class DataNodeConfig { private final String name; private final String database; private final String dataHost; }
二、实验结果验证
结论:
<dataNode name="dn1$0-75" dataHost="localhost$1-10" database="db$0-759" />
name.length must be=databases.length*dataHost.length"
//从A到C地没有直达路径,需要经过B中转,已知从A到B有三条databases路,从B到C有2条dataHost路
//,试问从A到C有几种方案
相关推荐
mycat1.6源码资源,mycat1.6源码资源,mycat1.6源码资源,
NULL 博文链接:https://gaojingsong.iteye.com/blog/2371403
linux下安装mycat1.6.7.5需要的安装文件,包含jdk1.8与mycat1.6.7.5的安装文件,安装mycat1.6.7.5前需要先安装jdk1.8
mycat1.6的源代码,本来想修改点东西,但是技术有限,未能修改成功,放在这里做个备份
mycat1.6windows+linux.zip, 我就很不理解,为什么好多人上传的资料,下载都需要积分。0积分能咋地?官网能访问但是下载不了,后再巧合下在另外一个网站上下载的,我在这里给大家分享下。不需要积分也不需要花钱,...
17年mycat 1.6权威指南 pdf版 477页及mycat 1.5 word版 279页
MySql 中间件 Mycat 1.6.7.5 windows.tar 程序 windows 环境程序,MySql 读写分离,分库分表中间件。 1.6.7.5 - RELEASE 版本
mycat1.6.7.1版本,linux版本,可以下载解压后直接使用。Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz
基于源码修改JDBC8驱动连接Mycat1.6报错 Unknown system variable 'query_cache_size' ,配置好mycat相应配置直接bin目录启动即可
linux的Mycat安装包1.6.7.4版本
Mycat 是数据库中间件。Mycat是开源社区在阿里cobar基础上进行二次开发,解决了cobar存在的问题,并且加入了许多新 的功能在其中。青出于蓝而胜于蓝。
当mycat的jar包的版本过低时,替换这个可解决问题.
本文档为 rehat 企业版上安装具体过程,希望能够帮助需要使用的人,谢谢
linux64位mycat1.6二进制包
基于MyCat1.6.7.6正式版的源码修改的,支持subTables的按月分表正则配置 subTables=“ tableName_$202101-?” subTableWay="BYMONTH" rule="sharding-by-month" 表示从202101月份开始进行分表处理,?表示当前日期的...
Mycat1.6.7.3版本
mycat 1.6 win和linux版,用于新手学习
Mycat-Server-1.6 源码,可调试
Mycat 1.6 稳定版-linux环境 gz包.7z,mysql管理工具,支持读写分离,水平切分