摘要:
Mycat 的读写分离是依赖数据库级别的数据主从同步的基础上来实现的(Mysql 的主从配置链接),Mycat 的读写分离是在 schema.xml 配置的 dataHost 节点的 balance 属性来完成,该属性的取值有4种,详细说明如下: balance="0", 不开启读写分离机制,所有读 阅读全文
摘要:
我们知道MySQL 数据库有自己的SQL注解(hint),比如 use index、force index、ignore index 等都是会经常用到的,Mycat 作为一个数据库中间件,最重要的是 SQL 路由,所以 Mycat 中的注解基本上都是和路由功能相关。 主从路由注解 该注解用于解决My 阅读全文
摘要:
Mycat 提供了类似数据库的管理监控方式,可以通过 MySQL 命令行登陆管理端口 9066 执行相应的 SQL 语句进行管理,可以可以通过 JDBC 的方式进行远程连接管理,使用 MySQL 命令行登陆示例如下: # mysql -h192.168.2.214 -umycat -P9066 -p 阅读全文
摘要:
实现方式:基于hash算法的分片中,算法内部是把记录分片到一种叫做"bucket"(hash桶)的内部算法结构中的,然后hash桶与实际的分片节点一一对应,从此实现了分片、路由的功能,在这种一般结构中,在需要增加分片数量来横向扩容时,由于分片节点和hash桶之间的一一对应,导致算法根据原先的hash 阅读全文
摘要:
使用的是 Mycat 提供的 dataMigrate 脚本进行对数据进行迁移和节点扩容,目前支持的 Mycat 是1.6 版本,由于 Mycat 是由 Java 编写的因此在做数据迁移及节点扩容时需要安装JDK等,还有相关的依赖数据库驱动程序等 准备工作 对扩容表的所有数据节点进行备份,以便迁移失败 阅读全文
摘要:
实现方式:其思想和范围取模分片一样,由于日期取模会出现数据热点问题,所以先根据日期分组,再根据时间 hash 使得短期数据分布跟均匀。 优点:避免扩容时的数据迁移,可以在一定程度上避免范围分片的热点问题 缺点:要求日期格式尽量精确,不然达不到局部均匀的目的 配置示例: <tableRule name 阅读全文
摘要:
实现方式:单月内按照小时拆分,最小粒度是小时,一天最多可以有24个分片,最少1个分片,下个月从头开始循环 优点:使数据按照小时来进行分时存储,颗粒度比日期(天)分片要小,适用于数据采集类存储分片 缺点:需要月末手动清理数据 配置示例: <tableRule name="sharding-by-hou 阅读全文
摘要:
实现方式:按照日期来分片 优点:使数据按照日期来进行分时存储 缺点:由于数据是连续的,所以该方案不能有效的利用资源 配置示例: <tableRule name="sharding-by-date"> <rule> <columns>create_time</columns> <algorithm>s 阅读全文
摘要:
实现方式:按照月份列分片,每个自然月一个分片 优点:使数据按照每月来进行分时存储 缺点:由于数据是连续的,所以该方案不能有效的利用资源 配置示例: <tableRule name="sharding-by-month"> <rule> <columns>create_time</columns> < 阅读全文
摘要:
实现方式:该算法先进行取模,然后根据取模值所属范围进行分片 优点:可以自主决定取模后数据的节点分布 缺点:dataNode 划分节点是事先建好的,需要扩展时比较麻烦。 配置示例: <tableRule name="sharding-by-pattern"> <rule> <columns>id</c 阅读全文
摘要:
实现方式:该算法先进行范围分片,计算出分片组,组内在取模 优点:综合了范围分片和取模分片的优点,分片组内使用取模可以保证组内的数据分布比较均匀,分片组之间采用范围分片可以兼顾范围分片的特点,事先规划好分片的数量,数据扩容时按照分片组扩容,则原有分片组的数据不需要迁移,分片组内还可以避免热点数据问题。 阅读全文
摘要:
实现方式:该算法与取模范围算法类似,该算法支持数值、符号、字母取模。首先截取长度为 prefixLength 的子串,在对子串中每一个字符的 ASCII 码求和,然后对求和值进行取模运算(sum%patternValue),就可以计算出子串的分片数 优点:可以自主决定取模后数据的节点分布 缺点:da 阅读全文
摘要:
实现方式:根据字符串的子串(必须是数字)计算分区号(由调用方传递参数,显示指定分区号),例如,id=05-12232323,其中 id 是从 startIndex = 0,size=2,即截取的子串是 05 ,05 就是获取的分区,如果大于分区数,则分配到 defaultPartition 分区中 阅读全文
摘要:
实现方式:该算法类似于十进制的求模运算,但是为二进制的操作,例如,取 id 的二进制低 10 位 与 1111111111 进行 & 运算 优点:这种策略比较灵活,可以均匀分配也可以非均匀分配,各节点的分配比例和容量大小由partitionCount 和 partitionLength两个参数决定 阅读全文
摘要:
ER模型是实体关系模型,基本元素是实体、关系和属性,Mycat 针对ER关系表的切分规则中,使得有相互依赖的表能够按照某一个规则切分到相同的节点上,避免垮库 Join 关系查询,下面的示例为订单(order)和订单明细(order_detail),明细表依赖于订单,这总业务的切分可以设计出合适的切分 阅读全文
摘要:
实现方式:切分规则根据配置中输入的数值n。此种分片规则将数据分成n份(通常dn节点也为n),从而将数据均匀的分布于各节点上。 优点:这种策略可以很好的分散数据库写的压力。比较适合于单点查询的情景 缺点:不方便扩展;出现了范围查询,就需要MyCAT去合并结果,当数据量偏高的时候,这种跨库查询+合并结果 阅读全文
摘要:
实现方式:切分规则根据文件(autopartition-long.txt)配置的范围来进行切片,制定基准列的取值范围,然后把这一范围的所有数据都放到一个DN上面 优点:适用于整体数量可知或总数量为固定值的情况 缺点:dataNode 划分节点是事先建好的,需要扩展时比较麻烦。潜在的问题,如果在短时间 阅读全文
摘要:
实现方式:切分规则根据文件(partition-hash-int.txt)配置的可能的枚举来进行分片,此种分片规则理解为枚举分区,会比较适合于取值固定的场合,比如说省份(固定值) 优点:适用于按照省份或者区县来拆分数据类业务 缺点:其他非枚举情况不适合 配置示例: <tableRule name=" 阅读全文
摘要:
rule.xml 配置文件定义了我们对表进行拆分所涉及到的规则定义。我们可以灵活的对表使用不同的分片算法, 或者对表使用相同的算法但具体的参数不同。 tableRule 标签 该标签用于定义表的拆分规则,示例代码如下: <tableRule name="rule1"> <rule> <columns 阅读全文
摘要:
server.xml 几乎保存了所有mycat需要的系统配置信息,包括 mycat 用户管理、DML权限管理等,其在代码内直接的映射类为SystemConfig 类。 user 标签 该标签主要用于定义登录 mycat的用户和权限。例如,我定义了一个用户,用户名为test、密码也为test,可访问的 阅读全文