![](https://img-blog.csdnimg.cn/20201216105307712.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
MyCat
MyCat
杨林伟
像火箭科学家一样思考!
展开
-
42MyCat - 性能测试
Mycat自身提供了一套基准性能测试工具,这套工具可以用于性能测试、疲劳测试等,包括分片表插入性能测试、分片表查询性能测试、更新性能测试、全局表插入性能测试等基准测试工具。这里需要说明的一点是,分片表的性能测试不同于普通单表,因为它的数据是分布在几个Datahost上的,因此插入和查询,都必需要特定的工具,才能做到多个节点同时负载请求,通过观察每个主机的负载,能够确定是否你的测试是合理和正确的。...原创 2019-07-26 10:49:48 · 486 阅读 · 0 评论 -
41MyCat - 常见问题与解决方案
1. Mycat目前有哪些功能与特性?支持 SQL 92标准支持Mysql集群,可以作为Proxy使用支持JDBC连接多数据库支持NoSQL数据库支持galera for mysql集群,percona-cluster或者mariadb cluster,提供高可用性数据分片集群自动故障切换,高可用性支持读写分离,支持Mysql双主多从,以及一主多从的模式支持全局表,数据自动分片到...原创 2019-07-26 10:40:08 · 773 阅读 · 0 评论 -
40MyCat - 权限控制(多租户支持)
单租户就是传统的给每个租户独立部署一套web + db 。由于租户越来越多,整个web部分的机器和运维成本都非常高,因此需要改进到所有租户共享一套web的模式(db部分暂不改变)。基于此需求,我们对单租户的程序做了简单的改造实现web多租户共享。具体改造如下:1.web部分修改:a.在用户登录时,在线程变量(ThreadLocal)中记录租户的idb.修改jdbc的实现:在提交sql时,从...原创 2019-07-26 10:19:04 · 497 阅读 · 0 评论 -
39MyCat - 权限控制(远程连接配置)
目前Mycat对于中间件的连接控制并没有做太复杂的控制,目前只做了中间件逻辑库级别的读写权限控制。<user name="mycat"> <property name="password">mycat</property> <property name="schemas">order</property> <propert...原创 2019-07-26 10:16:02 · 1581 阅读 · 0 评论 -
38MyCat - 分片规则(自然月分片)
按月份列分区 ,每个自然月一个分片,格式 between操作解析的范例。<tableRule name="sharding-by-month"> <rule> <columns>create_time</columns> <algorithm>sharding-by-month</algorithm> &...原创 2019-07-25 17:54:02 · 449 阅读 · 0 评论 -
37MyCat - 分片规则(按单月小时拆分)
此规则是单月内按照小时拆分,最小粒度是小时,可以一天最多24个分片,最少1个分片,一个月完后下月从头开始循环。每个月月尾,需要手工清理数据。<tableRule name="sharding-by-hour"> <rule> <columns>create_time</columns> <algorithm>shardi...原创 2019-07-25 17:52:25 · 622 阅读 · 0 评论 -
36MyCat - 分片规则(一致性hash)
一致性hash预算有效解决了分布式数据的扩容问题<tableRule name="sharding-by-murmur"> <rule> <columns>user_id</columns> <algorithm>murmur</algorithm> </rule> </tabl...原创 2019-07-25 17:50:31 · 612 阅读 · 0 评论 -
35MyCat - 分片规则(字符串hash解析)
此规则是截取字符串中的int数值hash分片<tableRule name="sharding-by-stringhash"> <rule> <columns>user_id</columns> <algorithm>sharding-by-stringhash</algorithm> </r...原创 2019-07-25 17:48:14 · 1045 阅读 · 0 评论 -
34MyCat - 分片规则(应用指定)
此规则是在运行阶段有应用自主决定路由到那个分片。<tableRule name="sharding-by-substring"> <rule> <columns>user_id</columns> <algorithm>sharding-by-substring</algorithm> </rule...原创 2019-07-25 17:45:22 · 411 阅读 · 0 评论 -
33MyCat - 分片规则(ASCII码求模范围约束)
此种规则类似于取模范围约束,此规则支持数据符号字母取模。<tableRule name="sharding-by-prefixpattern"> <rule> <columns>user_id</columns> <algorithm>sharding-by-prefixpattern</algorithm> &...原创 2019-07-25 17:43:50 · 412 阅读 · 0 评论 -
32MyCat - 分片规则(取模范围约束)
此种规则是取模运算与范围约束的结合,主要为了后续数据迁移做准备,即可以自主决定取模后数据的节点分布。<tableRule name="sharding-by-pattern"> <rule> <columns>user_id</columns> <algorithm>sharding-by-pattern</alg...原创 2019-07-25 17:40:09 · 596 阅读 · 0 评论 -
31MyCat - 分片规则(按日期分片)
此规则为按天分片:<tableRule name="sharding-by-date"> <rule> <columns>create_time</columns> <algorithm>sharding-by-date</algorithm> </rule> </tableRule&...原创 2019-07-25 17:36:05 · 816 阅读 · 4 评论 -
30MyCat - 分片规则(求模)
此规则为对分片字段求摸运算。<tableRule name="mod-long"> <rule> <columns>user_id</columns> <algorithm>mod-long</algorithm> </rule> </tableRule> <func...原创 2019-07-25 17:33:53 · 335 阅读 · 0 评论 -
29MyCat - 分片规则(固定分片hash算法)
本条规则类似于十进制的求模运算,区别在于是二进制的操作,是取id的二进制低10位,即id二进制&1111111111。此算法的优点在于如果按照10进制取模运算,在连续插入1-10时候1-10会被分到1-10个分片,增大了插入的事务控制难度,而此算法根据二进制则可能会分到连续的分片,减少插入事务事务控制难度。<tableRule name="rule1"> <rul...原创 2019-07-25 17:31:47 · 659 阅读 · 0 评论 -
28MyCat - 分片规则(分片枚举)
通过在配置文件中配置可能的枚举id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则,配置如下:<tableRule name="sharding-by-intfile"> <rule> <columns>user_id</columns> <algori...原创 2019-07-25 17:22:35 · 278 阅读 · 0 评论 -
27MyCat - 分片规则
在数据切分处理中,特别是水平切分中,中间件最终要的两个处理过程就是数据的切分、数据的聚合。选择合适的切分规则,至关重要,因为它决定了后续数据聚合的难易程度,甚至可以避免跨库的数据聚合处理。前面讲了数据切分中重要的几条原则,其中有几条是数据冗余,表分组(Table Group),这都是业务上规避跨库join的很好的方式,但不是所有的业务场景都适合这样的规则,因此本章将讲述如何选择合适的切分规则。...原创 2019-07-25 17:19:14 · 278 阅读 · 0 评论 -
26MyCat - 自增长主键
说明mysql本身对非自增长主键,使用last_insert_id()是不会返回结果的,只会返回0;mysql只会对定义自增长主键,可以last_insert_id()返回主键值;MyCAT目前提供了自增长主键功能,但是如果对应的mysql节点上数据表,没有定义auto_increment,那么在MyCAT层调用last_insert_id()也是不会返回结果的。正确配置方式如...原创 2019-07-25 17:09:10 · 289 阅读 · 0 评论 -
25MyCat - 全局序列号(其它方式)
方式一:使用catelet注解方式/*!mycat:catlet=demo.catlets.BatchGetSequence */SELECT mycat_get_seq(‘GLOBAL’,100);注:此方法表示获取GLOBAL的100个sequence值,例如当前GLOBAL的最大sequence值为5000,则通过此方式返回的是5001,同时更新数据库中的BLOBAL的最大sequen...原创 2019-07-25 17:02:26 · 333 阅读 · 0 评论 -
24MyCat - 全局序列号(数据库方式)
原理:在数据库中建立一张表,存放sequence名称(name),sequence当前值(current_value),步长(increment int类型每次读取多少个sequence,假设为K)等信息;Sequence获取步骤:1).当初次使用该sequence时,根据传入的sequence名称,从数据库这张表中读取current_value,和increment到MyCat中,并将数据库...原创 2019-07-25 16:59:05 · 327 阅读 · 0 评论 -
23MyCat - 全局序列号(本地文件方式)
在实现分库分表的情况下,数据库自增主键已无法保证自增主键的全局唯一。为此,MyCat 提供了全局sequence,并且提供了包含本地配置和数据库配置等多种实现方式。本地文件方式原理:此方式MyCAT将sequence配置到文件中,当使用到sequence中的配置后,MyCAT会更下classpath中的sequence_conf.properties文件中sequence当前的值。配置方式...原创 2019-07-25 16:51:41 · 400 阅读 · 1 评论 -
22MyCat - Spark/Storm 对join扩展(简略)
看到这个标题,可能会感到很奇怪,Spark和Storm 和Join有关系吗? 有必要用Spark,storm吗?mycat后续的功能会引入spark和storm来做跨分片的join,大致流程是这样的在mycat调用spark,storm的api,把数据传送到spark,storm,在spark,storm进行join,在把数据传回mycat,mycat在返回给客户端。...原创 2019-07-25 16:43:23 · 412 阅读 · 0 评论 -
21MyCat - 分片join(catlet人工智能)
解决跨分片的SQL JOIN的问题,远比想象的复杂,而且往往无法实现高效的处理,既然如此,就依靠人工的智力,去编程解决业务系统中特定几个必须跨分片的SQL的JOIN逻辑,MyCAT提供特定的API供程序员调用,这就是MyCAT创新性的思路——人工智能。以一个跨节点的SQL为例:Select a.id,a.name,b.title from a,b where a.id=b.id其中a在分片...原创 2019-07-25 16:41:22 · 464 阅读 · 0 评论 -
20MyCat - 分片join(Share join)
ShareJoin是一个简单的跨分片Join,基于HBT的方式实现。目前支持2个表的join,原理就是解析SQL语句,拆分成单表的SQL语句执行,然后把各个节点的数据汇集。配置支持任意配置的A,B表,如:A,B的dataNode相同<table name="A" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" /><t...原创 2019-07-25 16:35:19 · 600 阅读 · 0 评论 -
19MyCat - 分片join(ER Join)
MyCAT借鉴了NewSQL领域的新秀Foundation DB的设计思路,Foundation DB创新性的提出了Table Group的概念,其将子表的存储位置依赖于主表,并且物理上紧邻存放,因此彻底解决了JION的效率和性能问题,根据这一思路,提出了基于E-R关系的数据分片策略,子表的记录与所关联的父表记录存放在同一个数据分片上。下面举个例子:customer采用sharding-by-...原创 2019-07-25 16:26:35 · 401 阅读 · 0 评论 -
18MyCat - 分片join(全局表)
一个真实的业务系统中,往往存在大量的类似字典表的表格,它们与业务表之间可能有关系,这种关系,可以理解为“标签”,而不应理解为通常的“主从关系”,这些表基本上很少变动,可以根据主键ID进行缓存,下面这张图说明了一个典型的“标签关系”图:在分片的情况下,当业务表因为规模而进行分片以后,业务表与这些附属的字典表之间的关联,就成了比较棘手的问题,考虑到字典表具有以下几个特性:变动不频繁数据量总...原创 2019-07-25 16:21:40 · 547 阅读 · 0 评论 -
17MyCat - 分片join(join 的概述)
Join绝对是关系型数据库中最常用一个特性,然而在分布式环境中,跨分片的join确是最复杂的,最难解决一个问题。下面我们简单介绍下各种Join操作。1:INNER JOIN内连接,也叫等值连接,inner join产生同时符合A表和B表的一组数据,如图:2:LEFT JOIN左连接从A表(左)产生一套完整的记录,与匹配的B表记录(右表) .如果没有匹配,右侧将包含null,在Mysql...原创 2019-07-25 16:15:02 · 690 阅读 · 0 评论 -
16MyCat - rule.xml配置
rule.xml里面就定义了我们对表进行拆分所涉及到的规则定义。我们可以灵活的对表使用不同的分片算法,或者对表使用相同的算法但具体的参数不同。这个文件里面主要有tableRule和function这两个标签。在具体使用过程中可以按照需求添加tableRule和function。tableRule标签这个标签定义表规则。定义的表规则,在schema.xml:<tableRule nam...原创 2019-07-24 17:40:24 · 272 阅读 · 0 评论 -
15MyCat - server.xml配置
server.xml几乎保存了所有mycat需要的系统配置信息。其在代码内直接的映射类为SystemConfig类。现在就对这个文件中的配置,一一介绍。user标签<user name="test"> <property name="password">test</property> <property name="schemas">TE...原创 2019-07-24 17:37:35 · 500 阅读 · 0 评论 -
14MyCat - schema.xml配置
Schema.xml作为MyCat中重要的配置文件之一,管理着MyCat的逻辑库、表、分片规则、DataNode以及DataSource。弄懂这些配置,是正确使用MyCat的前提。这里就一层层对该文件进行解析。schema标签<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"></schema>...原创 2019-07-24 17:24:09 · 262 阅读 · 0 评论 -
13MyCat - 日志分析
日志配置mycat的日志文件配置MYCAT_HOME/conf/log4j.xml,结构为:日志配置是标准的log4j配置,其中:<param name="file" value="${MYCAT_HOME}/logs/mycat.log" />是日志文件的存放目录。<root> <level value="debug" /> <appe...原创 2019-07-24 16:49:33 · 529 阅读 · 0 评论 -
12MyCat - Linux下安装MyCat
安装包已上传到百度网盘链接:https://pan.baidu.com/s/1gstngWUVfwczJXRSMAmuvg提取码:s3lu1)使用SSH工具上传安装包到Linux下的/usr/local目录下2)进入/usr/local目录并解压安装包[root@localhost ~]# cd /usr/local/[root@localhost local]# tar -xvf ...原创 2019-07-24 16:34:42 · 467 阅读 · 0 评论 -
11MyCat - Window下安装MyCat
安装包已上传到了百度网盘:链接:https://pan.baidu.com/s/1vKIkNGJAKOJ6VJM_asRvug提取码:hu0q下面来讲解安装的步骤:####1)解压到某个目录下,路径不要包含中文2)启动1.命令行的方式启动:打开MyCat解压目录,进入bin目录在路径栏里输入CMD会弹出CMD命令窗口,并执行startup_nowrap.bat在操作注...原创 2019-07-24 16:17:01 · 811 阅读 · 0 评论 -
10MyCat - MyCat安装前期准备
MyCAT是使用JAVA语言进行编写开发,使用前需要先安装JAVA运行环境(JRE),由于MyCAT中使用了JDK7中的一些特性,所以要求必须在JDK7以上的版本上运行。1.环境准备JDK下载http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html注:必须JDK7或更高版本....原创 2019-07-24 15:29:41 · 321 阅读 · 0 评论 -
09MyCat - 概念 - 多租户
多租户技术或称多重租赁技术,是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。在云计算时代,多租户技术在共用的数据中心以单一系统架构与服务提供多数客户端相同甚至可定制化的服务,并且仍然可以保障客户的数据隔离。目前各种各样的云计算服务就是这类技术范畴,例如阿里云数据库服务(RDS)、阿里云服务器等等。多租户在数据存储上存在三种主要的...原创 2019-07-24 15:17:09 · 303 阅读 · 0 评论 -
08MyCat - 概念 - 分片节点、分片规则、全局序列号
分片节点:数据切分后,一个大表被分到不同的分片数据库上面,每个表分片所在的数据库就是分片节点(dataNode)。节点主机:数据切分后,每个分片节点(dataNode)不一定回独占一台机器,同一个机器上面可以有多个分片数据库,这样一个或者多个分片节点(dataNode)所在的机器就是节点主机(datahost),为了规避单节点主机并发数限制,尽量将读写压力高的分片节点(dataNode)均衡的...原创 2019-07-24 14:53:56 · 405 阅读 · 0 评论 -
07MyCat - 概念 - 逻辑表
逻辑表:既然有逻辑库,那么就会有逻辑表,分布式数据库中,对应用来说,读写数据的表就是逻辑表。逻辑表,可以是数据切分后,分布在一个或多个分片库中,也可以不做数据切分,不分片,只有一个表构成。分片表:分片表,是指那些原有的很大数据的表,需要切分到多个数据库的表,这样,每个分片都有一部分数据,所有分片构成了完整的数据。例如在mycat配置中的t_node就属于分片表,数据按照规则被分到dn1,...原创 2019-07-24 14:42:03 · 1079 阅读 · 0 评论 -
06MyCat - 概念 - 逻辑库(schema)
前面一节讲了数据库中间件,通常对实际应用来说,并不需要知道中间件的存在,业务开发人员只需要知道数据库的概念,所以数据库中间件可以被看做是一个或多个数据库集群构成的逻辑库。在云计算时代,数据库中间件可以以多租户的形式给一个或多个应用提供服务,每个应用访问的可能是一个独立或者是共享的物理库,常见的如阿里云数据库服务器RDS。...原创 2019-07-24 14:22:13 · 600 阅读 · 0 评论 -
05MyCat - 概念 - 数据库中间件
前面讲了Mycat是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而Mycat并没有存储引擎,所以并不是完全意义的分布式数据库系统。那么Mycat是什么?Mycat是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。由于前面讲的对数据进行分片处理之后,从原有的一个库,被切分为多个分片数据库,所有的分片数据库集群构成了整个完整的数据库存储。如上图所表示,数据...原创 2019-07-24 14:18:56 · 301 阅读 · 0 评论 -
04MyCat - MyCat概述
功能介绍Mycat是什么?从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的的Server,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务...原创 2019-07-24 14:08:06 · 339 阅读 · 0 评论 -
03MyCat - MyCat的前世今生
当大批软件工程师开始觉醒,用互联网思维思考和规划自己的人生,第四次工业革命才拉开序幕——《Mycat宣言》Mycat最早的版本完成于2013年年底,实现于雾霾中的北京城。Mycat要解决的第一个问题就是要将Cobar后端实现为非阻塞模式。将Cobar从“个人版”提升到真正的“企业版”。据未经证实的渠道了解,非开源的Cobar内部版本已经实现后端NIO,但是并没有开源出来。于是Mycat注定...原创 2019-07-24 13:51:35 · 854 阅读 · 0 评论