天天看点

mycat的使用,配置分库分表安装使用代码操作

数据切分:按照特定的条件,把存入一个数据的数据存到多个数据库(主机)上,数据的切分可以按照两种切分方式,

​ 数据垂直切分:按照不同的表分到不同主机上。

​ 数据水平切分:一个表中的不同数据进行拆分到不同的主机上

mycat,一个开源的分布式数据库系统,核心功能是分库分表,把一张大表分成多个小表,针对于开发者来说

连接多个数据库,连接完成后我们可以通过mycat访问我们所需要的数据库,本质类似于一个拦截器。比如6万条数据,可以分三个库来查找

mycat就是一个数据库服务器,可以使用连接MySQL的方式连接,然后管理MySQL,一个强大的数据库中间件。

原理:

重点拦截,拦截发送给MySQL数据库的SQL语句,然后进行分析处理,最后发送给不同的主机

应用场景:

jmeter,mycat高并发下mycat对程序的提优,jvm在高并发下的的处理

1、单纯的读写分离,此时配置最为简单,支持读写分离,主从切换;

2、分表分库,对于超过 1000 万的表进行分片,最大支持 1000 亿的单表分片;

3、多租户应用,每个应用一个库,但应用程序只连接 Mycat,从而不改造程序本身,实现多租户化;

4、报表系统,借助于 Mycat 的分表能力,处理大规模报表的统计;

5、替代 Hbase,分析大数据;

6、作为海量数据实时查询的一种简单有效方案,比如 100 亿条频繁查询的记录需要在 3 秒内查询出来结果,

除了基于主键的查询,还可能存在范围查询或其他属性查询,此时 Mycat 可能是最简单有效的选择

重要概念:

0、逻辑库/表:mycat中存在的库和表

1、分片表:原本有大量数据的表

2、ER表:关系表

3、全局表:类似于字典表这种表,字典表和很多表都有关联,mycat采用数据冗余存储

4、分片节点(dataNode):一张大表分为多个数据库上,每个数据库就是分片节点

5、分片主机(dataHost):分片节点可以在不同的主机,一个或者多个节点所在的主机就是分片主机

6、分片规则(rule):数据划分的规则

7、全局序列号:数据切分后原本的主键就无法使用了,因此需要引入一个值保证数据唯一性。

8、多租户(很重要):多个环境下公用相同的系统,并且保证隔离性

​ 8-1:独立数据库,隔离性高,但是代价比较庞大

​ 8-2:共享一个数据库,不是完全隔离,隔离性不高,容易出错

​ 8-3:共用数据结构,数据架构,通过ID进行区分租户数据(也就是用mycat)

安装

注意先安装Java环境以及MySQL数据库

安装包解压

进入bin目录下,双击运行startup_nowrap.bat

启动后可以使用native连接mycat,连接端口是8066

使用

Schema.xml 作为 MyCat 中重要的配置文件之一,管理着 MyCat 的逻辑库、表、分片规则、DataNode 以及 DataSource。

schema 
	配置表
	table
		primaryKey	真实表主键
        rule	分片规则,在rule.xml中定义
            常用分片规则
                分片枚举(hash-int):在配置文件中配置可能出现的枚举id,配置分片
                固定分片Hash算法(func1):二进制操作的求模运算
                范围约定(rang-long):提前规定好字段范围属于哪个分片
                取模(mod-long):根据ID进行10进制的求模运算
                日期分片(sharding-by-date):按照时间划分
                取模范围(sharding-by-pattern):按照取模运算和范围运算结合
                应用指定(sharding-by-substring):运行阶段有应用自主决定路由到那个分片
                。。。。。


dataNode
	配置数据节点 数据库

dataHost
	配置数据库连接,读写分离和心跳语句
	balance		负载均衡类型
		1. balance=“0”, 所有读操作都发送到当前可用的writeHost上。
        2. balance=“1”,所有读操作都随机的发送到readHost。
        3. balance=“2”,所有读操作都随机的在writeHost、readhost上分发。
    writeType	写的负载均衡
    	1. writeType=“0”, 所有写操作都发送到可用的writeHost上。
        2. writeType=“1”,所有写操作都随机的发送到readHost。
        3. writeType=“2”,所有写操作都随机的在writeHost、readhost分上发。
	heartbeat	心跳检查语句
	writeHost标签、readHost标签
		连接数据库,writeHost指定写实例、readHost指定读实例
	
           

rule.xml 配置分表规则

tableRule	分表规则
	columns	针对哪一个列进行拆分
	algorithm	function中的name,指定分表具体算法

function	分表算法
	class	路由算法具体类
	property	算法需要用到的参数

           

修改mycat>conf>schema文件

添加:<table name="demo" primaryKey="id" dataNode="dn1,dn2,dn3" rule="mod-long"/>
           

Mysql样创建db1.db2.db3三个数据库分别创建表demo。列添加id和name

mycat的使用,配置分库分表安装使用代码操作

注释负载均衡,修改访问数据库用户密码

进入bin目录下,双击运行startup_nowrap.bat

mysql创建新连接,注意端口8066,用户root密码123456 打开demo表报错将schema.xml第5行false改成true

多表操作

多表操作

select * from 表1 inner join 表2 on 连接条件

表1的数据在db1

表2的数据在db2

修改schema文件

<table name="demo" primaryKey="id" dataNode="dn1,dn2,dn3" rule="mod-long">
      <childTable name="dtwo" primaryKey="id" joinKey="did"
            parentKey="id" />
    </table>
           

dn1,dn2,dn3三个数据库分别创建dtwo表,创建列id,did,,value

mycat数据库测试插入语句:INSERT INTO dtwo (id,did,

value

) VALUES (7,1,“1cc”) 根据表id关联自动分表

代码操作

配置文件连接数据库改成mycat端口号用户密码即可