MyCat 學習筆記 第十三篇.數據分片 之 通過HINT執行存儲過程


1 環境說明

VM 模擬3台MYSQL 5.6 服務器

   VM1 192.168.31.187:3307

   VM2 192.168.31.212:3307

   VM3 192.168.31.150:  3307

 

MYCAT 1.5 服務部署在宿主機上

  MYCAT 192.168.31.207 :8806【SQL執行端口】 / 9066【管理端口】

 

2 應用場景

2.0 MYCAT配置

schema.xml

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
  <table name="t_demo_travel_record" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
  <table name="t_demo_travel_record_child" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
</schema>

<dataNode name="dn1" dataHost="vm1" database="test" />
<dataNode name="dn2" dataHost="vm2" database="test" />
<dataNode name="dn3" dataHost="vm3" database="test" />

<dataHost name="vm1" maxCon="1000" minCon="10" balance="0"
  writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
  <heartbeat>select user()</heartbeat>
  <writeHost host="vm1M1" url="192.168.31.187:3307" user="root" password="root123"></writeHost>
</dataHost>

<dataHost name="vm2" maxCon="1000" minCon="10" balance="0"
  writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
  <heartbeat>select user()</heartbeat>
  <writeHost host="vm2M1" url="192.168.31.212:3307" user="root" password="root123"></writeHost>

</dataHost>

<dataHost name="vm3" maxCon="1000" minCon="10" balance="0"
  writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
  <heartbeat>select user()</heartbeat>
  <writeHost host="vm3M1" url="192.168.31.150:3307" user="root" password="root123"></writeHost>

</dataHost>

 

rule.xml

 

<tableRule name="auto-sharding-long">
  <rule>
    <columns>id</columns>
    <algorithm>rang-long</algorithm>
  </rule>
</tableRule>

 

<function name="rang-long"
  class="org.opencloudb.route.function.AutoPartitionByLong">
  <property name="mapFile">autopartition-long.txt</property>
  <property name="defaultNode">0</property>
</function>

 

autopartition-long.txt

# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1000M=1
1000M-1500M=2

 

2.1 hint

第一次知道並使用 hint 是在用oracle數據庫調優的時候。

08年的時候,看到生產環境程序的SQL語句有 /* xxxx */ select xxx from table ,當初不知道何為hint,就一把刪了。結果被 TPM 批了一頓~~~

MYCAT 中也可以hint ,這里主要講一下如何通過 hint 指定物理數據庫執行存儲過程。

 

2.2 Mysql 存儲過程 ,傳參形式沒有驗證成功,不知道是否是mycat這個版本目前還不支持

DELIMITER ;

DROP PROCEDURE `test`.`p_travel_recrod_sum`;

DELIMITER //
CREATE PROCEDURE `p_travel_recrod_sum` ()
BEGIN

declare m_id_sum varchar(45);

select sum(id) into m_id_sum from t_demo_travel_record ;

update t_demo_travel_record t set t.context = t.context + m_id_sum ;

END //

DELIMITER ;

grant execute on procedure p_travel_recrod_sum to 'root'@'%';

flush privileges;

 

2.3 MYCAT 通過 hint 執行存儲過程,根據分片規則ID=1的數據應該是在DN1結點上執行 p_travel_record_sum()

mysql> DELIMITER //

mysql> /*!mycat:sql=select * from t_demo_travel_record where id = 1;*/ call p_travel_recrod_sum() //

Query OK, 748003 rows affected, 64 warnings (9.57 sec)

 

查看下物理庫的情況 DN1結點

mysql> select * from t_demo_travel_record limit 100,10;

+-------+---------------+

| id    | context       |

+-------+---------------+

| 10099 | 1870567757749 |

| 10100 | 1870567757749 |

| 10101 | 1870567757749 |

| 10102 | 1870567757749 |

| 10103 | 1870567757749 |

| 10104 | 1870567757749 |

| 10105 | 1870567757749 |

| 10106 | 1870567757749 |

| 10107 | 1870567757749 |

| 10108 | 1870567757749 |

+-------+---------------+

10 rows in set (0.00 sec)

 

DN2結點

mysql>  select * from t_demo_travel_record limit 100,10;

+---------+-----------------+

| id      | context         |

+---------+-----------------+

| 5000101 | context_5000101 |

| 5000102 | context_5000102 |

| 5000103 | context_5000103 |

| 5000104 | context_5000104 |

| 5000105 | context_5000105 |

| 5000106 | context_5000106 |

| 5000107 | context_5000107 |

| 5000108 | context_5000108 |

| 5000109 | context_5000109 |

| 5000110 | context_5000110 |

+---------+-----------------+

10 rows in set (0.00 sec)

 

 

到此為止,通過 hint 執行 指定數據庫 procedure 驗證完成。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM