zoukankan      html  css  js  c++  java
  • Mycat了解下

    首先说下,因为本身不怎么推荐中间件,所以我对这东西也只是了解,业内mycat用的最好的应该顺风算一个,但是他们是做过二次开发的,咱菜鸡比不了,据说最近出来一个叫cetus的还不错,有空可以关注下

    Ⅰ、Mycat安装走一走

    这玩意就是一个jar包

    cd /usr/local/src
    yum install java-1.8.0-openjdk -y
    wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
    tar zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 
    ./mycat/bin/mycat start
    

    默认启动8066端口,也就是说8066就是个中间件,它的通信协议就是mysql的,咱们是可以通过mysql的协议(用mysql的原生客户端)去访问的,也就是说直接连8066端口就行

    连上去会发现Server version:是5.6.29,这不是说server是5.6.29,是指通信协议是5.6.29

    和直接用mysql是一样的,这就是对业务透明,至于库里面的表是怎么分的,你并不知道

    Ⅱ、Mycat配置

    所有的配置文件都是xml,这是个不好的点,这个年代谁还用xml啊,改成json也好啊,而且是不持久化的,元数据不存在数据库中,是通过xml来存放的,比较差,吐槽一下

    咱这里只看最重要的三个配置文件

    2.1 server.xml——Mycat服务参数调整和用户授权的配置文件

    配置mycat的账号密码

    <user name="db_w">
    		<property name="password">123456</property>
    		<property name="schemas">db</property>
    </user>   
    
    <user name="db_r">
    		<property name="password">123456</property>
    		<property name="schemas">db</property>
    		<property name="readOnly">true</property>
    </user>
    

    2.2 schema.xml——逻辑库定义和表以及分片定义的配置文件

    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
    	<schema name="db" checkSQLschema="false" sqlMaxLimit="100">
    		<table name="whh" dataNode="dbdn$1-3" rule="mod-long-id" />
    	</schema>
    	
    	<dataNode name="dbdn$1-3" dataHost="host_n127.0.0.1_3306" database="db_$1-3" />
    
    	<dataHost name="host_n127.0.0.1_3306" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
    		<heartbeat> select user() </heartbeat>
    		<writeHost host="hostM" url="127.0.0.1:3306" user="root" password="123">
    		</writeHost>
    	</dataHost>
    </mycat:schema>
    

    这里我们把whh这张表分成三个分片放到3306这个实例的db_1、db_2、db_3三个库中

    2.3 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="http://io.mycat/">
    	<tableRule name="mod-long-id">
    		<rule>
    			<columns>a</columns>
    			<algorithm>func1</algorithm>
    		</rule>
    	</tableRule>
    ...
    <function name="func1" class="io.mycat.route.function.PartitionByLong">
    		<property name="partitionCount">8</property>
    		<property name="partitionLength">128</property>
    	</function>
    

    根据字段a来分片

    2.4 验证一把

    (db_w@127.0.0.1) [db]> explain select * from whh;
    +-----------+-----------------------------+
    | DATA_NODE | SQL                         |
    +-----------+-----------------------------+
    | dbdn1     | SELECT * FROM whh LIMIT 100 |
    | dbdn2     | SELECT * FROM whh LIMIT 100 |
    | dbdn3     | SELECT * FROM whh LIMIT 100 |
    +-----------+-----------------------------+
    3 rows in set (0.01 sec)
    

    Ⅲ、题外话

    复杂查询不要用中间件去实现,如果选出来的结果集有50g,这意味着什么?意味着中间件需要50g的内存来存数据,比如做个order by什么的捞出来到中间件的数据很大,你有这么大的内存吗?

    其实中间件对你的限制还是很多的,Mycat可以尝试用一下,这是开源社区里比较靠谱的一个中间件,但是olap场景下数据量太大,千万别用中间件,很多表关联,估计mycat都不支持这种语句

    唉,分布式数据库运维很麻烦,sharding-jdbc吧,基于jdbc驱动层来做的分库分表,只支持java,不推荐,太老了,proxy吧不能实现分片,只能实现读写分离,简单的逻辑在业务里控制和在中间件没什么区别,复杂逻辑中间件也控制不了,反正不推荐中间件

  • 相关阅读:
    Python selenium —— 一定要会用selenium的等待,三种等待方式解读
    python3 selenium 切换窗口的几种方法
    转:对UI自动化测试的一些感悟
    Docker
    【转】selenium之 定位以及切换frame
    selenium——键盘操作
    selenium——鼠标事件
    python 读取Excel表格方法
    springboot maven 更新jar包速度慢的问题
    Python3 读写utf-8文本文件
  • 原文地址:https://www.cnblogs.com/---wunian/p/9266230.html
Copyright © 2011-2022 走看看