数据切分:按照特定的条件,把存入一个数据的数据存到多个数据库(主机)上,数据的切分可以按照两种切分方式,
数据垂直切分:按照不同的表分到不同主机上。
数据水平切分:一个表中的不同数据进行拆分到不同的主机上
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文件
添加:
Mysql样创建db1.db2.db3三个数据库分别创建表demo。列添加id和name
注释负载均衡,修改访问数据库用户密码
进入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文件
dn1,dn2,dn3三个数据库分别创建dtwo表,创建列id,did,,value
mycat数据库测试插入语句:INSERT INTO dtwo (id,did,value
) VALUES (7,1,“1cc”) 根据表id关联自动分表
配置文件连接数据库改成mycat端口号用户密码即可