MyCat01-概述

分库分表概述

分库分表应用注意

1. 在数据库设计时考虑垂直分库和垂直分表
2. 数据量增加时,不要马上做水平分割,而是先考虑缓存处理、读写分离、使用索引等方式。如果以上方式不能解决,再考虑水平分库和水平分表

分库分表问题

1. 跨节点连接查询问题(查询垂直分库中的关联数据),这种情况需要分多次查询
2. 管理的数据库变多了

分类

纵向切分:将单表拆分成多个表,分散到不同的数据库。或者将单个数据库的多个表按业务类别分散到不同的数据库上

水平分割:按照表中某个字段的某种规则,把表中的许多记录按行切分,分散到多个数据库中

mycat 概述

mycat 是基于 Java 的分布式数据库系统中间层,支持 JDBC(java 数据库连接)形式连接,支持 MYSQL、Oracle、Sqlserver、Mongdb 等。提供数据读写分离服务。可以实现数据库服务器高可用。提供数据分片服务

mycat 工作原理

mycat 拦截用户发送的 SQL 语句,先解析这个 SQL 查找涉及到的表,然后获取 SQL 里分片字段的值,并匹配分片函数,获得分片列表,再将 SQL 发往这些分片去执行,最后收集和处理所有分片结果数据,并返回到客户端

Mycat 支持提供 10 种分片规则

vim /usr/local/mycat/conf/rule.xml

枚举法                  sharding-by-intfile 固定分片                rule1 范围约定                auto-sharding-long 求模法                  mod-long 日期列分区法            sharding-by-date 通配取模                sharding-by-pattern ASCII码求模通配         sharding-by-prefixpattern 编程指定                sharding-by-substring 字符串拆分hash解析       sharding-by-stringhash 一致性                  hash sharding-by-murmur

目录结构

ls /usr/local/mycat

bin                  与服务相关的命令,如:启动、停止
catlet               空的,作用是安扩展功能,比如多表联查
conf                 配置文件
lib                  使用的 jar 包,服务运行过程中调用的程序和模块
logs                 启动日志和运行日志
wrapper.log          mycat 服务启动日志
mycat.log            记录 SQL 脚本执行后的报错内容

重要配置文件
server.xml        设置连接 mycat 的用户授权
rule.xml            定义 mycat 分片规则及规则对应的算法
schema.xml      逻辑库表的配置文件

ls /usr/local/mycat/conf/*.txt
autopartition-long.txt  partition-hash-int.txt  partition-range-mod.txt

ls /usr/local/mycat/conf/*.xml
ehcache.xml  log4j.xml  router.xml  rule.xml  schema.xml  server.xml

Mycat 逻辑结构