自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Mycat核心開發(fā)者帶你輕松掌握Mycat路由轉(zhuǎn)發(fā)??!

商務(wù)辦公
作者個(gè)人研發(fā)的在高并發(fā)場景下,提供的簡單、穩(wěn)定、可擴(kuò)展的延遲消息隊(duì)列框架,具有精準(zhǔn)的定時(shí)任務(wù)和延遲隊(duì)列處理功能。

[[351750]]

作者個(gè)人研發(fā)的在高并發(fā)場景下,提供的簡單、穩(wěn)定、可擴(kuò)展的延遲消息隊(duì)列框架,具有精準(zhǔn)的定時(shí)任務(wù)和延遲隊(duì)列處理功能。自開源半年多以來,已成功為十幾家中小型企業(yè)提供了精準(zhǔn)定時(shí)調(diào)度方案,經(jīng)受住了生產(chǎn)環(huán)境的考驗(yàn)。為使更多童鞋受益,現(xiàn)給出開源框架地址:https://github.com/sunshinelyz/mykit-delay

寫在前面

熟悉Mycat的小伙伴都知道,Mycat一個(gè)很重要的功能就是路由轉(zhuǎn)發(fā),那么,這篇文章就帶著大家一起來看看Mycat是如何進(jìn)行路由轉(zhuǎn)發(fā)的,好了,不多說了,我們直接進(jìn)入主題。

環(huán)境準(zhǔn)備

軟件版本

操作系統(tǒng):CentOS-6.8

JDK版本:jdk1.8

Mycat版本:Mycat-server-1.6

MySQL:5.7

注意:這里,我將Mycat和MySQL安裝在同一臺虛擬機(jī)(IP:192.168.209.140 主機(jī)名為:binghe140),大家也可以將Mycat和MySQL安裝到不同的主機(jī)上,測試效果是一樣的。

創(chuàng)建物理庫

  1. mysql -uroot -proot -h192.168.209.140 -P3306 
  2.  
  3. drop database if exists db1; 
  4. create database db1; 
  5. drop database if exists db2; 
  6. create database db2; 
  7. drop database if exists db3; 
  8. create database db3; 

配置Mycat

schema.xml配置

 

  1. <?xml version="1.0"?> 
  2. <!DOCTYPE mycat:schema SYSTEM "schema.dtd"
  3. <mycat:schema xmlns:mycat="http://org.opencloudb/" > 
  4.   
  5.  <schema name="binghe" checkSQLschema="false" sqlMaxLimit="100"
  6.   <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long"></table
  7.  </schema
  8.  <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"  
  9.   /> --> 
  10.  <dataNode name="dn1" dataHost="localhost1" database="db1" /> 
  11.  <dataNode name="dn2" dataHost="localhost1" database="db2" /> 
  12.  <dataNode name="dn3" dataHost="localhost1" database="db3" /> 
  13.  <!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" /> 
  14.   <dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />  
  15.  <dataNode name="jdbc_dn2" dataHost="jdbchost" database="db2" />  
  16.  <dataNode name="jdbc_dn3"  dataHost="jdbchost" database="db3" /> --> 
  17.  <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" 
  18.   writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"
  19.   <heartbeat>select user()</heartbeat> 
  20.   <!-- can have multi write hosts --> 
  21.   <writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="root"></writeHost> 
  22.    
  23.   <writeHost host="hostM2" url="127.0.0.1:3306" user="root" password="root"></writeHost> 
  24.   <!--<writeHost host="hostS1" url="localhost:3316" user="root"--> 
  25.    <!--password="123456" />--> 
  26.   <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> --> 
  27.  </dataHost> 
  28. </mycat:schema

server.xml配置

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <!DOCTYPE mycat:server SYSTEM "server.dtd"
  3. <mycat:server xmlns:mycat="http://org.opencloudb/"
  4.  <system> 
  5.  <property name="defaultSqlParser">druidparser</property> 
  6.  </system> 
  7.  <user name="binghe"
  8.   <property name="password">binghe.123</property> 
  9.   <property name="schemas">binghe</property> 
  10.  </user
  11.  <user name="test"
  12.   <property name="password">test</property> 
  13.   <property name="schemas">binghe</property> 
  14.   <property name="readOnly">true</property> 
  15.  </user
  16. </mycat:server> 

rule.xml配置

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <!DOCTYPE mycat:rule SYSTEM "rule.dtd"
  3. <mycat:rule xmlns:mycat="http://org.opencloudb/"
  4.  <tableRule name="rule1"
  5.   <rule
  6.    <columns>id</columns> 
  7.    <algorithm>func1</algorithm> 
  8.   </rule
  9.  </tableRule> 
  10.   
  11.  <tableRule name="rule2"
  12.   <rule
  13.    <columns>user_id</columns> 
  14.    <algorithm>func1</algorithm> 
  15.   </rule
  16.  </tableRule> 
  17.   
  18.  <tableRule name="sharding-by-intfile"
  19.   <rule
  20.    <columns>sharding_id</columns> 
  21.    <algorithm>hash-int</algorithm> 
  22.   </rule
  23.  </tableRule> 
  24.  <tableRule name="auto-sharding-long"
  25.   <rule
  26.    <columns>id</columns> 
  27.    <algorithm>rang-long</algorithm> 
  28.   </rule
  29.  </tableRule> 
  30.  <tableRule name="mod-long"
  31.   <rule
  32.    <columns>id</columns> 
  33.    <algorithm>mod-long</algorithm> 
  34.   </rule
  35.  </tableRule> 
  36.  <tableRule name="sharding-by-murmur"
  37.   <rule
  38.    <columns>id</columns> 
  39.    <algorithm>murmur</algorithm> 
  40.   </rule
  41.  </tableRule> 
  42.  <tableRule name="sharding-by-month"
  43.   <rule
  44.    <columns>create_date</columns> 
  45.    <algorithm>partbymonth</algorithm> 
  46.   </rule
  47.  </tableRule> 
  48.  <tableRule name="latest-month-calldate"
  49.   <rule
  50.    <columns>calldate</columns> 
  51.    <algorithm>latestMonth</algorithm> 
  52.   </rule
  53.  </tableRule> 
  54.   
  55.  <tableRule name="auto-sharding-rang-mod"
  56.   <rule
  57.    <columns>id</columns> 
  58.    <algorithm>rang-mod</algorithm> 
  59.   </rule
  60.  </tableRule> 
  61.   
  62.  <tableRule name="jch"
  63.   <rule
  64.    <columns>id</columns> 
  65.    <algorithm>jump-consistent-hash</algorithm> 
  66.   </rule
  67.  </tableRule> 
  68.   
  69.  <function name="murmur" 
  70.   class="org.opencloudb.route.function.PartitionByMurmurHash"
  71.   <property name="seed">0</property> 
  72.   <property name="count">2</property> 
  73.   <property name="virtualBucketTimes">160</property> 
  74.  </function
  75.  <function name="hash-int" 
  76.   class="org.opencloudb.route.function.PartitionByFileMap"
  77.   <property name="mapFile">partition-hash-int.txt</property> 
  78.  </function
  79.  <function name="rang-long" 
  80.   class="org.opencloudb.route.function.AutoPartitionByLong"
  81.   <property name="mapFile">autopartition-long.txt</property> 
  82.  </function
  83.  <function name="mod-long" class="org.opencloudb.route.function.PartitionByMod"
  84.   <!-- how many data nodes --> 
  85.   <property name="count">3</property> 
  86.  </function
  87.   
  88.  <function name="func1" class="org.opencloudb.route.function.PartitionByLong"
  89.   <property name="partitionCount">8</property> 
  90.   <property name="partitionLength">128</property> 
  91.  </function
  92.  <function name="latestMonth" 
  93.   class="org.opencloudb.route.function.LatestMonthPartion"
  94.   <property name="splitOneDay">24</property> 
  95.  </function
  96.  <function name="partbymonth" 
  97.   class="org.opencloudb.route.function.PartitionByMonth"
  98.   <property name="dateFormat">yyyy-MM-dd</property> 
  99.   <property name="sBeginDate">2020-01-01</property> 
  100.  </function
  101.   
  102.  <function name="rang-mod" class="org.opencloudb.route.function.PartitionByRangeMod"
  103.          <property name="mapFile">partition-range-mod.txt</property> 
  104.  </function
  105.   
  106.  <function name="jump-consistent-hash" class="org.opencloudb.route.function.PartitionByJumpConsistentHash"
  107.   <property name="totalBuckets">3</property> 
  108.  </function
  109. </mycat:rule

登錄Mycat

登錄Mycat

命令行輸入以下命令登錄Mycat

  1. D:\>mysql -ubinghe -pbinghe.123 -h192.168.209.140 -P8066 
  2. Welcome to the MySQL monitor.  Commands end with ; or \g. 
  3. Your MySQL connection id is 2 
  4. Server version: 5.5.8-mycat-1.6.1-RELEASE-20170807215126 MyCat Server (OpenCloundDB) 
  5.   
  6. Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. 
  7.   
  8. Oracle is a registered trademark of Oracle Corporation and/or its 
  9. affiliates. Other names may be trademarks of their respective 
  10. owners. 
  11.   
  12. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 
  13.   
  14. mysql> 

創(chuàng)建表測試

輸入以下命令查看創(chuàng)建表的路由

  1. create table travelrecord (id bigint not null primary key,user_id varchar(100),traveldate DATE, fee decimal,days int);  

結(jié)果如下:

  1. mysql> explain create table travelrecord (id bigint not null primary key,user_id varchar(100),traveldate DATE, fee decimal,days int); 
  2. +-----------+-----------------------------------------------------------------------------------------------------------------------+ 
  3. | DATA_NODE | SQL                                                                                                                   | 
  4. +-----------+-----------------------------------------------------------------------------------------------------------------------+ 
  5. | dn1       | create table travelrecord (id bigint not null primary key,user_id varchar(100),traveldate DATE, fee decimal,days int) | 
  6. | dn2       | create table travelrecord (id bigint not null primary key,user_id varchar(100),traveldate DATE, fee decimal,days int) | 
  7. | dn3       | create table travelrecord (id bigint not null primary key,user_id varchar(100),traveldate DATE, fee decimal,days int) | 
  8. +-----------+-----------------------------------------------------------------------------------------------------------------------+ 
  9. rows in set (0.00 sec) 
  10.   
  11. mysql> 

說明創(chuàng)建表的SQL語句被Mycat路由到dn1,dn2,dn3三個(gè)節(jié)點(diǎn)上,也就是說在3個(gè)節(jié)點(diǎn)上都執(zhí)行了創(chuàng)建表的SQL。

我們輸入建表語句:

  1. mysql> create table travelrecord (id bigint not null primary key,user_id varchar(100),traveldate DATE, fee decimal,days int); 
  2. Query OK, 0 rows affected (0.18 sec) 

此時(shí),將會在dn1,dn2,dn3三個(gè)節(jié)點(diǎn)上創(chuàng)建travelrecord表。

錄入數(shù)據(jù)測試

錄入到dn1節(jié)點(diǎn)

我們在命令行輸入如下SQL語句

  1. explain insert into travelrecord (id,user_id,traveldate,fee,days) values(100001,'binghe','2020-11-10',510.5,3); 

結(jié)果如下:

  1. mysql> explain insert into travelrecord (id,user_id,traveldate,fee,days) values(100001,'binghe','2017-08-07',510.5,3); 
  2. +-----------+-------------------------------------------------------------------------------------------------------------+ 
  3. | DATA_NODE | SQL                                                                                                         | 
  4. +-----------+-------------------------------------------------------------------------------------------------------------+ 
  5. | dn1       | insert into travelrecord (id,user_id,traveldate,fee,days) values(100001,'binghe','2017-08-07',510.5,3) | 
  6. +-----------+-------------------------------------------------------------------------------------------------------------+ 
  7. 1 row in set (0.00 sec) 

說明Mycat將SQL路由到了dn1節(jié)點(diǎn)。

我們執(zhí)行插入語句:

  1. mysql> insert into travelrecord (id,user_id,traveldate,fee,days) values(100001,'binghe','2020-11-10',510.5,3); 
  2. Query OK, 1 row affected, 1 warning (0.01 sec) 
  3.   
  4. mysql> 

錄入到dn2節(jié)點(diǎn)

我們在命令行輸入如下語句:

  1. explain insert into travelrecord (id,user_id,traveldate,fee,days) values(8000004,'binghe','2017-08-07',510.5,3); 

結(jié)果如下:

  1. mysql> explain insert into travelrecord (id,user_id,traveldate,fee,days) values(8000004,'binghe','2020-11-10',510.5,3); 
  2. +-----------+--------------------------------------------------------------------------------------------------------------+ 
  3. | DATA_NODE | SQL                                                                                                          | 
  4. +-----------+--------------------------------------------------------------------------------------------------------------+ 
  5. | dn2       | insert into travelrecord (id,user_id,traveldate,fee,days) values(8000004,'binghe','2020-11-10',510.5,3) | 
  6. +-----------+--------------------------------------------------------------------------------------------------------------+ 
  7. 1 row in set (0.00 sec) 

說明Mycat將SQL路由到了dn2節(jié)點(diǎn),我們執(zhí)行插入語句:

  1. mysql> insert into travelrecord (id,user_id,traveldate,fee,days) values(8000004,'binghe','2017-08-07',510.5,3); 
  2. Query OK, 1 row affected, 1 warning (0.06 sec) 

路由到dn3節(jié)點(diǎn)

我們在命令行輸入如下語句

  1. explain insert into travelrecord (id,user_id,traveldate,fee,days) values(10000004,'binghe','2017-08-07',510.5,3); 

結(jié)果為:

  1. mysql> explain insert into travelrecord (id,user_id,traveldate,fee,days) values(10000004,'binghe','2020-11-10',510.5,3); 
  2. +-----------+---------------------------------------------------------------------------------------------------------------+ 
  3. | DATA_NODE | SQL                                                                                                           | 
  4. +-----------+---------------------------------------------------------------------------------------------------------------+ 
  5. | dn3       | insert into travelrecord (id,user_id,traveldate,fee,days) values(10000004,'binghe','2020-11-10',510.5,3) | 
  6. +-----------+---------------------------------------------------------------------------------------------------------------+ 
  7. 1 row in set (0.00 sec) 

說明Mycat將SQL路由到了dn3節(jié)點(diǎn),我們同樣執(zhí)行插入語句的操作

  1. mysql>  insert into travelrecord (id,user_id,traveldate,fee,days) values(10000004,'binghe','2017-08-07',510.5,3); 
  2. Query OK, 1 row affected, 1 warning (0.01 sec) 

查詢測試

查詢所有數(shù)據(jù)

在命令行執(zhí)行如下語句:

  1. explain select * from travelrecord; 

結(jié)果為:

  1. mysql> explain select * from travelrecord; 
  2. +-----------+--------------------------------------+ 
  3. | DATA_NODE | SQL                                  | 
  4. +-----------+--------------------------------------+ 
  5. | dn1       | SELECT * FROM travelrecord LIMIT 100 | 
  6. | dn2       | SELECT * FROM travelrecord LIMIT 100 | 
  7. | dn3       | SELECT * FROM travelrecord LIMIT 100 | 
  8. +-----------+--------------------------------------+ 
  9. rows in set (0.01 sec) 

說明查詢所有的數(shù)據(jù),Mycat是將SQL語句路由到了所有的數(shù)據(jù)分片,即dn1,dn2,dn3節(jié)點(diǎn)上。

根據(jù)id查詢指定數(shù)據(jù)

我們分別在命令行中執(zhí)行如下SQL:

  1. explain select * from travelrecord where id = 1000004; 
  2. explain select * from travelrecord where id = 8000004; 
  3. explain select * from travelrecord where id = 10000004; 

得到的結(jié)果依次如下:

  1. mysql> explain select * from travelrecord where id = 1000004; 
  2. +-----------+---------------------------------------------------------+ 
  3. | DATA_NODE | SQL                                                     | 
  4. +-----------+---------------------------------------------------------+ 
  5. | dn1       | SELECT * FROM travelrecord WHERE id = 1000004 LIMIT 100 | 
  6. +-----------+---------------------------------------------------------+ 
  7. 1 row in set (0.06 sec) 
  8.   
  9. mysql> explain select * from travelrecord where id = 8000004; 
  10. +-----------+---------------------------------------------------------+ 
  11. | DATA_NODE | SQL                                                     | 
  12. +-----------+---------------------------------------------------------+ 
  13. | dn2       | SELECT * FROM travelrecord WHERE id = 8000004 LIMIT 100 | 
  14. +-----------+---------------------------------------------------------+ 
  15. 1 row in set (0.00 sec) 
  16.   
  17. mysql> explain select * from travelrecord where id = 10000004; 
  18. +-----------+----------------------------------------------------------+ 
  19. | DATA_NODE | SQL                                                      | 
  20. +-----------+----------------------------------------------------------+ 
  21. | dn3       | SELECT * FROM travelrecord WHERE id = 10000004 LIMIT 100 | 
  22. +-----------+----------------------------------------------------------+ 
  23. 1 row in set (0.00 sec) 

說明:按照分片字段查詢,Mycat只會將SQL路由到指定的數(shù)據(jù)分片。

刪表測試

在命令行輸入如下SQL:

  1. explain drop table travelrecord; 

結(jié)果如下

  1. mysql> explain drop table travelrecord; 
  2. +-----------+-------------------------+ 
  3. | DATA_NODE | SQL                     | 
  4. +-----------+-------------------------+ 
  5. | dn1       | drop table travelrecord | 
  6. | dn2       | drop table travelrecord | 
  7. | dn3       | drop table travelrecord | 
  8. +-----------+-------------------------+ 
  9. rows in set (0.00 sec) 

有結(jié)果可知,刪表操作和創(chuàng)建表操作一樣,Mycat在本實(shí)例中都會將SQL路由到所有的數(shù)據(jù)分片。

注意:本文的Mycat路由結(jié)果針對本文的配置實(shí)例,其他配置下,Mycat的路由結(jié)果可能會有不同。

好了,我們今天就到這兒吧,我是冰河,我們下期見~~

本文轉(zhuǎn)載自微信公眾號「冰河技術(shù)」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系冰河技術(shù)公眾號。

 

責(zé)任編輯:武曉燕 來源: 冰河技術(shù)
相關(guān)推薦

2020-11-11 07:10:07

Mycat核心配置

2021-01-27 05:19:41

Mycat模塊t中間件

2023-12-06 17:57:07

開發(fā)云服務(wù)

2014-07-08 10:30:59

開發(fā)者開發(fā)語言

2011-08-23 17:37:30

DeepinLinux 20周年

2022-05-15 08:13:50

Mysql數(shù)據(jù)庫Mycat

2022-04-25 08:03:57

MySQL中間件MyCat

2013-10-08 10:42:27

前端開發(fā)開發(fā)

2013-08-08 10:26:08

前端開發(fā)Web

2025-03-03 00:00:03

2025-01-23 13:58:17

2024-06-04 14:07:00

2020-04-23 15:08:41

SpringBootMyCatJava

2016-07-22 15:34:35

WindowsWin10開發(fā)者

2025-03-11 11:00:00

后端前端開發(fā)

2011-02-21 09:37:53

Web開發(fā) Firef

2012-12-17 09:51:28

謝子斌歐朋開發(fā)者社區(qū)

2024-03-11 08:55:12

PythonCMD命令文件處理

2021-02-06 08:51:32

MyCAT擴(kuò)容場景

2009-01-18 15:14:00

數(shù)據(jù)倉庫開發(fā)OLTP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號