1.1相关配置文件 schema.xml server.xml 1.2库信息和表信息 id 1 2 3 4 5 10 1.3.1 修改日志文件级别为debug 1.3.2 条件查询:(分片字段和非分片字段) 使用场景:比如QQ注册用户上亿,我们可以按地区注册分表,这样单表的数据量就没有那么大了。 rule.xml schema.xml server.xml 在userdb_1、userdb_2、userdb_3 分别对应枚举后的0、1(默认,不在规则里面)、2 验证枚举算法
1.取模算法
rule.xml<?xml version="1.0" encoding="UTF-8"?> <!-- - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --> <!DOCTYPE mycat:rule SYSTEM "rule.dtd"> <mycat:rule xmlns:mycat="https://io.mycat/"> <tableRule name="role1"> <rule> <!--columns分片字段,algorithm取模算法--> <columns>id</columns> <algorithm>mod-long</algorithm> </rule> </tableRule> <function name="mod-long" class="io.mycat.route.function.PartitionByMod"> <!--指定分片数量也就是几个库,不可以被更改--> <property name="count">3</property> </function> </mycat:rule>
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="https://io.mycat/"> <!-- TESTDB1 是mycat的逻辑库名称,链接需要用的 --> <schema name="mycat_testdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> <table name="area_info" dataNode="dn1,dn2,dn3" rule="role1"/> </schema> <!-- database 是MySQL数据库的库名 --> <dataNode name="dn1" dataHost="localhost" database="userdb_1" /> <dataNode name="dn2" dataHost="localhost" database="userdb_2" /> <dataNode name="dn3" dataHost="localhost" database="userdb_3" /> <!-- dataNode节点中各属性说明: name:指定逻辑数据节点名称; dataHost:指定逻辑数据节点物理主机节点名称; database:指定物理主机节点上。如果一个节点上有多个库,可使用表达式db$0-99, 表示指定0-99这100个数据库; dataHost 节点中各属性说明: name:物理主机节点名称; maxCon:指定物理主机服务最大支持1000个连接; minCon:指定物理主机服务最小保持10个连接; writeType:指定写入类型; 0,只在writeHost节点写入; 1,在所有节点都写入。慎重开启,多节点写入顺序为默认写入根据配置顺序,第一个挂掉切换另一个; dbType:指定数据库类型; dbDriver:指定数据库驱动; balance:指定物理主机服务的负载模式。 0,不开启读写分离机制; 1,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡; 2,所有的readHost与writeHost都参与select语句的负载均衡,也就是说,当系统的写操作压力不大的情况下,所有主机都可以承担负载均衡; --> <dataHost name="localhost" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- 可以配置多个主从 --> <writeHost host="hostM1" url="192.168.223.141:3306" user="root" password="123456"> <!-- 可以配置多个从库 --> <readHost host="hostS2" url="192.168.223.142:3306" user="root" password="123456" /> </writeHost> </dataHost> </mycat:schema>
<?xml version="1.0" encoding="UTF-8"?> <!-- - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --> <!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server xmlns:mycat="https://io.mycat/"> <!-- 读写都可用的用户 --> <user name="root" defaultAccount="true"> <property name="password">123456</property> <property name="schemas">mycat_testdb</property> <!-- 表级 DML 权限设置 --> <!-- <privileges check="false"> <schema name="TESTDB" dml="0110" > <table name="tb01" dml="0000"></table> <table name="tb02" dml="1111"></table> </schema> </privileges> --> </user> <!-- 只读用户 --> <user name="user"> <property name="password">123456</property> <property name="schemas">mycat_testdb</property> <property name="readOnly">true</property> </user> </mycat:server>
1.3 插入原理
在userdb_1、userdb_2、userdb_3 分别对应取模后的0、1、21%3 取模 后1,userdb_2 2 %3取模 后2,userdb_3 3 %3取模 后0,userdb_1 4 %3取模 后1,userdb_2 5 %3取模 后2,userdb_3 10 %3取模 后1,userdb_2
1.3 查询原理
分片字段:只会查询一个库select * from area_info where id =1
非分片字段:会查询三个库select * from area_info where name =1
limit分页查询select * from area_info desc limit 0,2
从日志中可以看到向三个库查询,每个库返回两条数据,然后由mycat组装成下图数据,然后从mycat组装数据中随机抽取两条数据。
order by 排序查询select * from area_info ORDER BY id desc limit 0,2
从日志中可以看出查询三个库,返回每个库中最大的两条,mycat组装成下图所示,最后选取组装的数据中,最大的两条数据(10 5)
2.枚举算法
partition-hash-int.txtwuhan=0 shanghai=1 suzhou=2
<?xml version="1.0" encoding="UTF-8"?> <!-- - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --> <!DOCTYPE mycat:rule SYSTEM "rule.dtd"> <mycat:rule xmlns:mycat="https://io.mycat/"> <tableRule name="role2"> <rule> <!--上面columns 标识将要分片的表字段,algorithm 分片函数--> <columns>name</columns> <algorithm>hash-int</algorithm> </rule> </tableRule> <function name="hash-int" class="io.mycat.route.function.PartitionByFileMap"> <!--其中分片函数配置中,mapFile标识配置文件名称,type默认值为0,0表示Integer,非零表示String--> <property name="mapFile">partition-hash-int.txt</property> <!-- 所有的节点配置都是从0开始,及0代表节点1 defaultNode 默认节点:小于0表示不设置默认节点,大于等于0表示设置默认节点,结点为指定的值 默认节点的作用:枚举分片时,如果碰到不识别的枚举值,就让它路由到默认节点 如果不配置默认节点(defaultNode值小于0表示不配置默认节点),碰到 不识别的枚举值就会报错, like this:can't find datanode for sharding column:column_name val:ffffffff --> <property name="type">1</property> <property name="defaultNode">1</property> </function> </mycat:rule>
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="https://io.mycat/"> <!-- mycat_testdb 是mycat的逻辑库名称,链接需要用的 --> <schema name="USERDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> <table name="area_info" dataNode="dn1,dn2,dn3" rule="role2" /> </schema> <!-- database 是MySQL数据库的库名 --> <dataNode name="dn1" dataHost="localhost" database="userdb_1" /> <dataNode name="dn2" dataHost="localhost" database="userdb_2" /> <dataNode name="dn3" dataHost="localhost" database="userdb_3" /> <!-- dataNode节点中各属性说明: name:指定逻辑数据节点名称; dataHost:指定逻辑数据节点物理主机节点名称; database:指定物理主机节点上。如果一个节点上有多个库,可使用表达式db$0-99, 表示指定0-99这100个数据库; dataHost 节点中各属性说明: name:物理主机节点名称; maxCon:指定物理主机服务最大支持1000个连接; minCon:指定物理主机服务最小保持10个连接; writeType:指定写入类型; 0,只在writeHost节点写入; 1,在所有节点都写入。慎重开启,多节点写入顺序为默认写入根据配置顺序,第一个挂掉切换另一个; dbType:指定数据库类型; dbDriver:指定数据库驱动; balance:指定物理主机服务的负载模式。 0,不开启读写分离机制; 1,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡; 2,所有的readHost与writeHost都参与select语句的负载均衡,也就是说,当系统的写操作压力不大的情况下,所有主机都可以承担负载均衡; --> <dataHost name="localhost" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- 可以配置多个主从 --> <writeHost host="hostM1" url="192.168.223.141:3306" user="root" password="123456"> <!-- 可以配置多个从库 --> <readHost host="hostS2" url="192.168.223.142:3306" user="root" password="123456" /> </writeHost> </dataHost> </mycat:schema>
<?xml version="1.0" encoding="UTF-8"?> <!-- - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --> <!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server xmlns:mycat="https://io.mycat/"> <!-- 读写都可用的用户 --> <user name="root" defaultAccount="true"> <property name="password">123456</property> <property name="schemas">USERDB</property> <!-- 表级 DML 权限设置 --> <!-- <privileges check="false"> <schema name="TESTDB" dml="0110" > <table name="tb01" dml="0000"></table> <table name="tb02" dml="1111"></table> </schema> </privileges> --> </user> <!-- 只读用户 --> <user name="user"> <property name="password">123456</property> <property name="schemas">USERDB</property> <property name="readOnly">true</property> </user> </mycat:server>
wuhan userdb_1 shanghai nanjing xian userdb_2 suzhou userdb_3
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算