type="global" dataNode="dn1,dn2" />
主键分片 :
非主键分片 : 对于非主键分片的 table,填写属性 primaryKey,此时 MyCAT 会将你根据主键查询的 SQL 语句的第一次执行结果进行分析,确定该 Table 的某个主键在什么分片上,并进行主键到分片 ID 的缓存。第二次或后续查询 mycat 会优先从缓存中查询是否有 id–>node 即主键到分片的映射,如果有直接查询,通过此种方法提高了非主键分片的查询性能
数据库切分策略
1> 分片枚举 : 通过在配置文件中配置可能的枚举 id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则
`rule.xml
user_id
`partition-hash-int.txt
10000=0
10010=1
DEFAULT_NODE=1
标签标识将要分片的表字段, 标签标识分片函数。在分片函数配置中,所有的节点配置都是从 0 开始,及 0 代表节点 1,defaultNode 设置默认节点,小于 0 表示不设置默认节点,大于等于 0 表示设置默认节点。默认节点用于枚举分片时,如果碰到不识别的枚举值,就让它路由到默认节点,如果不配置默认节点 (defaultNode 值小于 0 表示不配置默认节点),碰到不识别的枚举值就会报错 like this:can’ t find datanode for sharding column:column_name val:ffffffff
2> 固定分片 hash 算法 : 这种方式似于十进制的求模运算,区别在于是二进制的操作,是取 id 的二进制低 10 位,即 id 二进制 &1111111111。此算法的优点在于如果按照 10 进制取模运算,在连续插入 1-10 时候 1-10 会被分到 1-10 个分片,增大了插入的事务控制难度,而此算法根据二进制则可能会分到连续的分片,减少插入事务事务控制难度
分区长度 : 默认为最大 2^n=1024,即最大支持 1024 分区
约束 :
count,length 两个数组的长度必须是一致的
1024 = sum((count[i]*length[i])). count 和 length 两个向量的点积恒等于 1024
用法例子 : 将数据水平分成 3 份,前两份各占 25%,第三份占 50% (非均匀分区)
|<————————————————————1024————————————————————>|
|<———256——>|<——-256——>|<————————-512—————————->|
| partition0 | partition1 | partition2 |
| 共2份,故 count[0]=2 | 共1份,故count[1]=1 |
int[] count = new int[] { 2, 1 };
int[] length = new int[] { 256, 512 };
PartitionUtil pu = new PartitionUtil(count, length);
# 下面代码演示分别以 offerId 字段或 memberId 字段根据上述分区策略拆分的分配结果
int DEFAULT_STR_HEAD_LEN = 8; // cobar 默认会配置为此值
long offerId = 12345;
String memberId = "qiushuo";
# 若根据 offerId 分配,partNo1 将等于 0,即按照上述分区策略,offerId 为 12345 时将会被分配 到 partition0 中
int partNo1 = pu.partition(offerId);
# 若根据 memberId 分配,partNo2 将等于 2,即按照上述分区策略,memberId 为 qiushuo 时将会被 分到 partition2 中
int partNo2 = pu.partition(memberId, 0, DEFAULT_STR_HEAD_LEN);
如果需要平均分配设置 : 平均分为 4 分片,partitionCount*partitionLength=1024
3> 范围约定 : 此分片适用于,提前规划好分片字段某个范围属于哪个分片,start <= range <= end
range start-end , data node index
K=1000 , M=10000
`rule.xml
user_id
`autopartition-long.txt
# range start-end ,data node index
# K=1000,M=10000.
0-500M=0
500M-1000M=1
1000M-1500M=2
配置说明 : 所有的节点配置都是从 0 开始,及 0 代表节点 1,此配置非常简单,即预先制定可能的 id 范围到某个分片
0-500M=0
500M-1000M=1
1000M-1500M=2
或
0-10000000=0
10000001-20000000=1
4> 取模 : 此规则为对分片字段求摸运算
此种配置非常明确即根据 id 进行十进制求模预算,相比固定分片 hash,此种在批量插入时可能存在批量插入单事务插入多数据分片,增大事务一致性难度
5> 按日期分片
<1> 按天分片
`rule.xml
create_time
class="org.opencloudb.route.function.PartitionByDate">
如果配置 sEndDate 则代表数据达到这个日期的分片后,循环从开始分片插入
Assert.assertEquals(true, 0 == partition.calculate("2014-01-01"));
Assert.assertEquals(true, 0 == partition.calculate("2014-01-10"));
Assert.assertEquals(true, 1 == partition.calculate("2014-01-11"));
Assert.assertEquals(true, 12 == partition.calculate("2014-05-01"));
<2> 按月分片
6> 取模范围约束 : 此种规则是取模运算与范围约束的结合,主要为后续数据迁移做准备,即可以自主决定取模后数据的节点分布
`rule.xml
user_id
class="org.opencloudb.route.function.PartitionByPattern">
`partition-pattern.txt : 配置文件中,1-32 即代表 id%256 后分布的范围,如果在 1-32 则在分区 1,其他类推,如果 id 非数据,则会分配在 defaoultNode 默认节点
# id partition range start-end ,data node index
###### first host configuration
1-32=0
33-64=1
65-96=2
97-128=3
######## second host configuration
129-160=4
161-192=5
193-224=6
225-256=7
0-0=7
String idVal = "0";
Assert.assertEquals(true, 7 == autoPartition.calculate(idVal));
idVal = "45a";
Assert.assertEquals(true, 2 == autoPartition.calculate(idVal));
7> 截取数字做 hash 求模范围约束 : 此种规则类似于取模范围约束,此规则支持数据符号字母取模
`rule.xml
user_id
sharding-by-prefixpattern
class="org.opencloudb.route.function.PartitionByPrefixPattern">
`partition-pattern.txt : 配置文件中,1-32 即代表 id%256 后分布的范围,如果在 1-32 则在分区 1,其他类推
# range start-end ,data node index
# ASCII
# 8-57=0-9 阿拉伯数字
# 64、 65-90=@、 A-Z
# 97-122=a-z
###### first host configuration
1-4=0
5-8=1
9-12=2
13-16=3
###### second host configuration
17-20=4
21-24=5
25-28=6
29-32=7
0-0=7
此种方式类似方式 6 只不过采取的是将列种获取前 prefixLength 位列所有 ASCII 码的和进行求模 sum%patternValue,获取的值,在范围内的分片数
String idVal="gf89f9a";
Assert.assertEquals(true, 0==autoPartition.calculate(idVal));
idVal="8df99a";
Assert.assertEquals(true, 4==autoPartition.calculate(idVal));
idVal="8dhdf99a";
Assert.assertEquals(true, 3==autoPartition.calculate(idVal));
8> 应用指定 : 此规则是在运行阶段由应用自主决定路由到那个分片
`rule.xml
user_id
class="org.opencloudb.route.function.PartitionDirectBySubString">
此方法为直接根据字符子串 (必须是数字) 计算分区号 (由应用传递参数,显式指定分区号)
例如 id=05-100000002
在此配置中代表根据 id 中从 startIndex=0,开始,截取 siz=2 位数字即 05,05 就是获取的分区,如果没传默认分配到 defaultPartition
9> 截取数字 hash 解 : 此规则是截取字符串中的 int 数值 hash 分片
`rule.xml
user_id
class="org.opencloudb.route.function.PartitionByString">
hashSlice : 0 means str.length(), -1 means str.length()-1
/**
* "2" -> (0,2)
* "1:2" -> (1,2)
* "1:" -> (1,0)
* "-1:" -> (-1,0)
* ":-1" -> (0,-1)
* ":" -> (0,0)
*/
String idVal=null;
rule.setPartitionLength("512");
rule.setPartitionCount("2");
rule.init();
rule.setHashSlice("0:2");
// idVal = "0";
// Assert.assertEquals(true, 0 == rule.calculate(idVal));
// idVal = "45a";
// Assert.assertEquals(true, 1 == rule.calculate(idVal));
// last 4
rule = new PartitionByString();
rule.setPartitionLength("512");
rule.setPartitionCount("2");
rule.init();
// last 4 characters
rule.setHashSlice("-4:0");
idVal = "aaaabbb0000";
Assert.assertEquals(true, 0 == rule.calculate(idVal));
idVal = "aaaabbb2359";
Assert.assertEquals(true, 0 == rule.calculate(idVal));
10> 一致性 hash : 一致性 hash 预算有效解决分布式数据的扩容问题
11> 按单月小时拆分 : 此规则是单月内按照小时拆分,最小粒度是小时,可以一天最多 24 个分片,最少 1 个分片,一个月完后下月从头开始循环。每个月月尾,需要手工清理数据
`rule.xml
create_time
class="org.opencloudb.route.function.LatestMonthPartion">
columns : 拆分字段,字符串类型 (yyyymmddHH)
LatestMonthPartion partion = new LatestMonthPartion();
partion.setSplitOneDay(24);
Integer val = partion.calculate("2015020100");
assertTrue(val == 0);
val = partion.calculate("2015020216");
assertTrue(val == 40);
val = partion.calculate("2015022823");
assertTrue(val == 27 * 24 + 23);
Integer[] span = partion.calculateRange("2015020100", "2015022823");
assertTrue(span.length == 27 * 24 + 23 + 1);
assertTrue(span[0] == 0 && span[span.length - 1] == 27 * 24 + 23);
span = partion.calculateRange("2015020100", "2015020123");
assertTrue(span.length == 24);
assertTrue(span[0] == 0 && span[span.length - 1] == 23);
12> 范围求模分片 : 先进行范围分片计算出分片组,组内再求模。优点是可以避免扩容时的数据迁移,又可以一定程度上避免范围分片的热点问题综合了范围分片和求模分片的优点,分片组内使用求模可以保证组内数据比较均匀,分片组之间是范围分片可以兼顾范围查询。最好事先规划好分片的数量,数据扩容时按分片组扩容,则原有分片组的数据不需要迁移。由于分片组内数据比较均匀,所以分片组内可以避免热点数据问题
`rule.xml
id
class="org.opencloudb.route.function.PartitionByRangeMod">
`partition-range-mod.txt :
range start-end ,data node group size
以下配置一个范围代表一个分片组,=号后面的数字代表该分片组所拥有的分片的数量
0-200M=5 // 代表有 5 个分片节点
200M1-400M=1
400M1-600M=4
600M1-800M=4
800M1-1000M=6
13> 日期范围 hash 分片 : 思想与范围求模一致,当由于日期在取模会有数据集中问题,所以改成 hash 方法。先根据日期分组,再根据时间 hash 使得短期内数据分布的更均匀。优点是可以避免扩容时的数据迁移,又可以一定程度上避免范围分片的热点问题,要求日期格式尽量精确些,不然达不到局部均匀的目的
`rule.xml
col_date
class="org.opencloudb.route.function.PartitionByRangeDateHash">
14> 冷热数据分片 : 根据日期查询日志数据冷热数据分布 ,最近 n 个月的到实时交易库查询,超过 n 个月的按照 m 天分片
15> 自然月分片 : 按月份列分区 ,每个自然月一个分片,格式 between 操作解析的范例
`rule.xml
create_time
class="org.opencloudb.route.function.PartitionByMonth">
PartitionByMonth partition = new PartitionByMonth();
partition.setDateFormat("yyyy-MM-dd");
partition.setsBeginDate("2014-01-01");
partition.init();
Assert.assertEquals(true, 0 == partition.calculate("2014-01-01"));
Assert.assertEquals(true, 0 == partition.calculate("2014-01-10"));
Assert.assertEquals(true, 0 == partition.calculate("2014-01-31"));
Assert.assertEquals(true, 1 == partition.calculate("2014-02-01"));
Assert.assertEquals(true, 1 == partition.calculate("2014-02-28"));
Assert.assertEquals(true, 2 == partition.calculate("2014-03-1"));
Assert.assertEquals(true, 11 == partition.calculate("2014-12-31"));
Assert.assertEquals(true, 12 == partition.calculate("2015-01-31"));
Assert.assertEquals(true, 23 == partition.calculate("2015-12-31"));
如果想增加自定义分片方法可以下载 Mycat-Server (https://github.com/MyCATApache/Mycat-Server),。编译打包后放在 MyCat 运行文件的 {MYCAT_HOME}/lib 替换 Mycat-server-1.6-RELEASE.jar 文件
$ pwd
/opt/modules/mycat/lib
$ ll
总用量 17M
-rwxrwxrwx. 1 root root 45K 10月 28 2016 asm-4.0.jar
-rwxrwxrwx. 1 root root 562K 10月 28 2016 commons-collections-3.2.1.jar
-rwxrwxrwx. 1 root root 278K 10月 28 2016 commons-lang-2.6.jar
-rwxrwxrwx. 1 root root 72K 10月 28 2016 curator-client-2.11.0.jar
-rwxrwxrwx. 1 root root 195K 10月 28 2016 curator-framework-2.11.0.jar
-rwxrwxrwx. 1 root root 276K 10月 28 2016 curator-recipes-2.11.0.jar
-rwxrwxrwx. 1 root root 79K 10月 28 2016 disruptor-3.3.4.jar
-rwxrwxrwx. 1 root root 307K 10月 28 2016 dom4j-1.6.1.jar
-rwxrwxrwx. 1 root root 2.1M 10月 28 2016 druid-1.0.26.jar
-rwxrwxrwx. 1 root root 1.3M 10月 28 2016 ehcache-core-2.6.11.jar
-rwxrwxrwx. 1 root root 380K 10月 28 2016 fastjson-1.2.12.jar
-rwxrwxrwx. 1 root root 2.3M 10月 28 2016 guava-19.0.jar
-rwxrwxrwx. 1 root root 44K 10月 28 2016 hamcrest-core-1.3.jar
-rwxrwxrwx. 1 root root 52K 10月 28 2016 hamcrest-library-1.3.jar
-rwxrwxrwx. 1 root root 86K 10月 28 2016 jline-0.9.94.jar
-rwxrwxrwx. 1 root root 614K 10月 28 2016 joda-time-2.9.3.jar
-rwxrwxrwx. 1 root root 33K 10月 28 2016 jsr305-2.0.3.jar
-rwxrwxrwx. 1 root root 137K 10月 28 2016 kryo-2.10.jar
-rwxrwxrwx. 1 root root 225K 10月 28 2016 leveldb-0.7.jar
-rwxrwxrwx. 1 root root 9.1K 10月 28 2016 leveldb-api-0.7.jar
-rwxrwxrwx. 1 root root 24K 10月 28 2016 libwrapper-linux-ppc-64.so
-rwxrwxrwx. 1 root root 12K 10月 28 2016 libwrapper-linux-x86-32.so
-rwxrwxrwx. 1 root root 15K 10月 28 2016 libwrapper-linux-x86-64.so
-rwxrwxrwx. 1 root root 479K 10月 28 2016 log4j-1.2.17.jar
-rwxrwxrwx. 1 root root 37K 10月 28 2016 log4j-1.2-api-2.5.jar
-rwxrwxrwx. 1 root root 144K 10月 28 2016 log4j-api-2.5.jar
-rwxrwxrwx. 1 root root 1.1M 10月 28 2016 log4j-core-2.5.jar
-rwxrwxrwx. 1 root root 23K 10月 28 2016 log4j-slf4j-impl-2.5.jar
-rwxrwxrwx. 1 root root 406K 10月 28 2016 mapdb-1.0.7.jar
-rwxrwxrwx. 1 root root 4.9K 10月 28 2016 minlog-1.2.jar
-rwxrwxrwx. 1 root root 410K 10月 28 2016 mongo-java-driver-2.11.4.jar
-rwxrwxrwx. 1 root root 1.8M 10月 28 2016 Mycat-server-1.6-RELEASE.jar
-rwxrwxrwx. 1 root root 128K 10月 28 2016 mysql-binlog-connector-java-0.4.1.jar
-rwxrwxrwx. 1 root root 1.2M 10月 28 2016 netty-3.7.0.Final.jar
-rwxrwxrwx. 1 root root 36K 10月 28 2016 objenesis-1.2.jar
-rwxrwxrwx. 1 root root 14K 10月 28 2016 reflectasm-1.03.jar
-rwxrwxrwx. 1 root root 470K 10月 28 2016 sequoiadb-driver-1.12.jar
-rwxrwxrwx. 1 root root 25K 10月 28 2016 slf4j-api-1.6.1.jar
-rwxrwxrwx. 1 root root 318K 10月 28 2016 univocity-parsers-2.2.1.jar
-rwxrwxrwx. 1 root root 439K 10月 28 2016 velocity-1.7.jar
-rwxrwxrwx. 1 root root 82K 10月 28 2016 wrapper.jar
-rwxrwxrwx. 1 root root 775K 10月 28 2016 zookeeper-3.4.6.jar
你可能感兴趣的:(MyCat)
从入门到精通:Spring MVC的矩阵参数、数据预处理与HTTP缓存实战
Solomon_肖哥弹架构
spring mvc java SpringMVC
肖哥弹架构跟大家“弹弹”SpringMVC设计与实战应用,需要代码关注欢迎点赞,点赞,点赞。关注公号Solomon肖哥弹架构获取更多精彩内容历史热点文章MyCat应用实战:分布式数据库中间件的实践与优化(篇幅一)图解深度剖析:MyCat架构设计与组件协同(篇幅二)一个项目代码讲清楚DO/PO/BO/AO/E/DTO/DAO/POJO/VO写代码总被Dis:5个项目案例带你掌握SOLID技巧,代码有
MySql读写分离部署(一主一从,双主双从,Mycat)
PH = 7
mysql 数据库
参考资料:参考视频参考博客视频参考资料及安装包:https://pan.baidu.com/s/1xT_WokN_xlRv0h06b6F3yg提取码:aag3Mysql主从复制部署指南(一主一从)NotePad++编辑Linux服务器文档Mysql高版本(8.0及以后)Linux安装Mysql分库分表(基于Mycat)的基本部署MySQL垂直分库(基于MyCat)
mysql分区表
咸鱼爱吃橙子
mysql 数据库
背景最近遇到一个接口查询很慢超时了,界面数据无法显示出来。分析后,发现是因为MySQL中有张表的数据量很大(1500万)导致查询很慢。除了优化索引(如联合索引、覆盖索引)、归档历史数据、引入缓存、垂直拆分(将大表中的字段按访问频率拆分成多个小表,例如:高频访问的字段放在主表中,不常访问的大字段(如JSON、TEXT类型)放在辅助表中)、水平拆分(使用Sharding-JDBC或MyCat等中间件实
Mysql水平分表(基于Mycat)及常用分片规则
PH = 7
mysql 数据库
参考资料:参考视频参考博客视频资料:链接:https://pan.baidu.com/s/1xT_WokN_xlRv0h06b6F3yg提取码:aag3Mysql分库分表(基于Mycat)的基本部署MySQL垂直分库(基于MyCat)概述:本例是在垂直分库的基础上,又作的水平分库,参照前文也可以单独拿出来做水平分库水平分表:水平分表相对于垂直分库,就多了个分片规则,即按什么规则进行分表如上,要对t
NotePad++编辑Linux服务器文档
PH = 7
服务器 运维
参考资料:参考文章相关插件链接:链接:https://pan.baidu.com/s/1PBX9NY0pPz0sBqtfNxngXA提取码:r3t7概要:通常简单的文件编辑,可以直接在Linux服务器,或客户端利用VIM命令编辑,编辑即可但是过于复杂的文件,比如Mycat的XML编辑,就很不方便,需要利用Notepad++的远程编辑功能插件的离线安装使用:因为Notepad++的插件,在线安装很容
实战!用Redisson来实现分布式锁,真香!
公众号-芋道源码
分布式 中间件 java 数据库 redis
点击上方“芋道源码”,选择“设为星标”管她前浪,还是后浪?能浪的浪,才是好浪!每天10:33更新文章,每天掉亿点点头发...源码精品专栏原创|Java2021超神之路,很肝~中文详细注释的开源项目RPC框架Dubbo源码解析网络应用框架Netty源码解析消息中间件RocketMQ源码解析数据库中间件Sharding-JDBC和MyCAT源码解析作业调度中间件Elastic-Job源码解析分布式事务
MySQL高可用
2501_91112123
adb
目录一、引言二、MySQL高可用核心技术2.1数据复制(Replication)2.2故障检测与自动切换(Failover)三、主流高可用方案对比与选型3.1主从复制(Master-Slave)3.2主主复制(Master-Master)3.3多节点集群(GroupReplication)3.4分布式中间件方案(如MyCat、ProxySQL)四、实战案例:基于MHA的主从高可用搭建4.1环境准备
Mycat中间件
只会copy的搬运工
中间件 数据库
一、案例目标(1)了解Mycat提供的读写分离功能。(2)了解MySQL数据库的主从架构。(3)构建以Mycat为中间件的读写分离数据库集群。二、案例分析1.规划节点使用Mycat作为数据库中间件服务构建读写分离的数据库集群。IP主机名节点192.168.200.70mycatMycat中间件服务节点192.168.200.80db1MariaDB数据库集群主节点192.168.200.90db2
大文件上传:秒传、断点续传、分片上传
公众号-芋道源码
中间件 java 分布式 android redis
点击上方“芋道源码”,选择“设为星标”管她前浪,还是后浪?能浪的浪,才是好浪!每天10:33更新文章,每天掉亿点点头发...源码精品专栏原创|Java2021超神之路,很肝~中文详细注释的开源项目RPC框架Dubbo源码解析网络应用框架Netty源码解析消息中间件RocketMQ源码解析数据库中间件Sharding-JDBC和MyCAT源码解析作业调度中间件Elastic-Job源码解析分布式事务
分库分表实战-- Mycat实战
Captain Leo
MySQL 数据库分布式方案 学习笔记 学习 Mycat 分库分表 架构 MySQL
Mycat实战Mycat简介Mycat是一个实现了MySQL协议的Server,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议或JDBC协议与多个MySQL服务器通信,其核心功能是分库分表和读写分离,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。对于DBA来说,可以这么理解MycatMycat就是MySQL
SpringBoot和微服务学习记录Day1
小斌的Debug日记
spring boot 微服务 学习
分布式架构为了解决大量的用户请求,需要多台服务器,为处理某些请求将一些服务器划分为一个集群,通过一种技术来处理集群的请求典型应用:nginx:Tomcat集群Redis:哨兵模式MySQL:mycat微服务微小的服务,是针对于某一个功能或模块的小功能,单独部署微服务架构原来写的是项目都是单体架构,在架构设计中,如果用户请求量很大,某些功能频繁使用建议将功能拆分为不同模块,也就是不同的微服务Spri
Mycat与Sharding-JDBC的区别:深入对比与分析
一碗黄焖鸡三碗米饭
Java知识全面解析 java jvm 分库分表 mycat Sharding-JDBC MySQL
目录Mycat与Sharding-JDBC的区别:深入对比与分析1.Mycat和Sharding-JDBC概述1.1什么是Mycat?1.2什么是Sharding-JDBC?2.设计理念的区别2.1Mycat的架构设计2.2Sharding-JDBC的架构设计3.功能对比3.1支持的分库分表策略Mycat的分库分表策略Sharding-JDBC的分库分表策略对比:3.2读写分离Mycat的读写分离
go mysql 中间件_GitHub - wushilong/go-sharding: Mysql 分库分表中间件
网络安全技术联盟
go mysql 中间件
Go-Sharding简介数据库分库分表中间件,尽可能兼容ShardingSphere的golang实现,基于小米Gaea魔改,但是路由算法支持ShardingSphere的inline表达式风格,而不是Mycat/kingshard这类晦涩而又不灵活的配置,移除多租户功能(配置太复杂了,部署多套即可)为什么造这个轮子尝试了ShardingSphereProxy,其有着糟糕的insert性能和CP
Mycat 与分布式 ID 生成方案
今天你慧了码码码码码码码码码码
分布式
Mycat与分布式ID生成方案1.Mycat简介Mycat是一个开源的分布式数据库中间件,主要用于解决数据库分库分表、读写分离、负载均衡等问题。它支持MySQL协议,可以像使用单机数据库一样使用分布式数据库。主要功能:分库分表:将数据分散到多个数据库实例中。读写分离:将读操作和写操作分发到不同的数据库节点。负载均衡:均衡分配数据库请求,提高系统性能。分布式事务:支持分布式事务管理。2.分布式ID生
Sharding-Sphere vs Mycat vs TiDB
木一番
分库分表 TiDB
强烈推荐TiDB,这是未来大中型公司的数据库,一定的NewSQL优点:传统数据库面向磁盘设计,基于内存的存储管理及并发控制,NewSQL数据库那般高效利用中间件模式SQL解析、执行计划优化等在中间件与数据库中重复工作,效率相比较低分布式事务相比于XA进行了优化,性能更高基于paxos(或Raft)协议的多副本,实现了真正的高可用、高可靠天生支持数据分片,数据的迁移、扩容都是自动化的,大大减轻了DB
数据库必知必会系列:数据库分片与分布式事务
AI天才研究院
AI大模型企业级应用开发实战 大数据 人工智能 语言模型 Java Python 架构设计
文章目录1.背景介绍分库分表分片集群分布式事务数据迁移2.核心概念与联系主从复制活动复制CAP原则BASE理论3.核心算法原理和具体操作步骤以及数学模型公式详细讲解分库分表水平分表垂直分库分片集群垂直拆分水平切分垂直切分水平拆分根据主键范围根据业务字段划分分布式事务两阶段提交协议三阶段提交协议可靠消息最终一致性ACID四要素4.具体代码实例和详细解释说明MyCat配置文件server.xml文件s
mycat 分布式mysql_MySQL 部署分布式架构 MyCAT (五)
weixin_39782573
mycat 分布式mysql
分片(水平拆分)4.全局表业务使用场景:如果你的业务中有些数据类似于数据字典,比如配置文件的配置,常用业务的配置或者数据量不大很少变动的表,这些表往往不是特别大,而且大部分的业务场景都会用到,那么这种表适合于Mycat全局表,无须对数据进行切分,要在所有的分片上保存一份数据即可,Mycat在Join操作中,业务表与全局表进行Join聚合会优先选择相同分片内的全局表join,避免跨库Join,在进行
MySQL的集群配置和读写分离配置
lqg_zone
数据库相关 mysql 数据库
MySQL重点概念介绍分布式集群方案主从节点复制分库分表mycat读写分离参数配置MySQL主节点MySQL从节点实例讲演分布式部署性能演示独立mysql对比主从复制+读写分离参考资料:浅谈mysql集群浅谈mysql集群_mysql不同集群连接-CSDN博客MySQLReplication主从复制全方位解决方案MySQLReplication主从复制全方位解决方案-惨绿少年-博客园MySQL主从
使用mycat实现mysql的分表功能
qiaosaifei
mysql 数据库
需求:项目中需要对用户的操作日志进行记录,现在数据库中日志量过大(超过1000W),导致数据查询速度过慢,根据客户需求将日志表进行拆分。一、mycat安装及主从同步配置参考博客:https://blog.csdn.net/qiaosaifei/article/details/121424494?spm=1001.2014.3001.5502二、mycat实现单库分表参考博客:https://blo
centos8 stream 部署mycat2.0实现读写分离主从(多主)自动切换
kylin-运维
centos8stream mycat2.0 运维
内容有时间整理上传读写分离参考http://blog.ws.baby/posts/msb/mysql/mysql-read-write-separation/#mycat-2-主从自动切换需修改内容vim/usr/local/mycat/conf/clusters/master_slave.cluster.json改18“switchType”:“NOT_SWITCH”为“switchType”:
mycat和mysql
沐漜
Java学习 zookeeper
MyCat是数据库中间件,支持数据库集群,提供高可用性的数据分片集群。可以管理多个机器上的数据库组成的集群。MyCat分片:海量数据存储的解决方案。由该中间件将不同的逻辑分片(逻辑分片对应不同的数据库)进行组装。MyCat分片:什么是分片:简单的说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。数据的切片(sharding
Mycat2使用教程
晨晨OvO
工具使用教程 mycat2
运行环境框架包下载地址:mycat2-install-template-1.20.zip运行包下载地址:mycat2-1.21-release-jar-with-dependencies.jar说明解压运行环境框架包,将运行包放到mycat的lib目录下配置数据源打开conf/datasources/prototypeDs.datasource.json,修改password和url{"dbTyp
mycat配置双主双从实现mysql读写分离
Zozzoooz
mycat读写分离 mysql 数据库 java docker
docker容器下mysql主从配置mycat配置双主双从实现mysql读写分离拉取mysql5.7dockerpullmysql:5.7运行mysql镜像mysqlM1主容器:dockerrun-p3301:3306--namemysql-master1-v/usr/local/mysql-master1/conf:/etc/mysql/conf.d-v/usr/local/mysql-mast
MHA+MYCAT 高可用架构
第九系艾文
linux Linux tools 服务器 数据库 mycat mha linux
架构图如下:本次是4服务器架构如下环境:centos7.2x64mariadb10.4MHA5.7MyCat1.6.7IP规划IP功能10.1.41.166VIP10.1.41.167master,mycat,mha.node10.1.41.168slave(master),mha.node10.1.41.165slave,mycat,keepalived10.1.41.169slave,myca
mycat双主高可用架构部署-MySQL5.7环境部署第一台
龙哥·三年风水
MySQL5.7.36 分布式 高可用 架构 mysql 分布式
MySQL5.7服务器IP是192.168.31.209及192.168.31.2101、192.168.31.209:3307实例部署a、配置文件mkdir-p/data/mysql/mysql3307/{data,logs}#创建MySQL数据及日志目录vi/data/mysql/mysql3307/my3307.cnf#配置文件整理[client]#password=your_passwor
中间件的学习理解总结
DCDDDDcccc
中间件 学习
目录一、定义与作用二、主要类型数据库中间件远程过程调用中间件面向消息的中间件事务处理中间件三、特点与优势独立性高效性可扩展性可靠性四、应用场景企业应用集成分布式系统电子商务移动应用开发五、数据库中间件功能细节:应用优势:六、远程过程调用中间件功能细节:应用优势:七、面向消息的中间件功能细节:应用优势:八、事务处理中间件功能细节:应用优势:数据库中间件MyCat:ShardingSphere:远程过
32次8.21(学习playbook-roles,脚本创建数据库和表,mycat读写分离)
祎安139
运维 数据库
1.roles目录介绍files:⽤来存放由copy模块或script模块调⽤的⽂件。tasks:⾄少有⼀个main.yml⽂件,定义各tasks。handlers:有⼀个main.yml⽂件,定义各handlers。templates:⽤来存放jinjia2模板。vars:有⼀个main.yml⽂件,定义变量。meta:有⼀个main.yml⽂件,定义此⻆⾊的特殊设定及其依赖关系。注意:在每个⻆
云计算33------学习playbook-roles,脚本创建数据库和表,mycat读写分离
是小梅吖~
云计算 学习 数据库
上午1、roles(角色)介绍roles(⻆⾊):就是通过分别将variables,tasks及handlers等放置于单独的⽬录中,并可以便捷地调⽤它们的⼀种机制。假设我们要写⼀个playbook来安装管理lamp环境,那么这个playbook就会写很⻓。所以我们希望把这个很⼤的⽂件分成多个功能拆分,分成apache管理,php管理,mysql管理,然后在需要使⽤的时候直接调⽤就可以了,以免重复
Mycat2.0实战2:mycat2.0安装和启动
baiyeooo
Mycat2.0实战 运维 dba mysql
以下操作均为windows下,Linux以后看情况再补充1、在哪里下载最新版本①进入官网:MyCat2②点击下载文件服务:Indexof/2.0/(mycat.org.cn)③选择最新的版本,下载我下载的是1.22的最新版本Indexof/2.0/1.22-release/(mycat.org.cn)下载安装模板:Indexof/2.0/install-template/(mycat.org.cn
MyCat实现单库分表+代理所有表
爱笑的人、
数据库
MyCAT支持水平分片与垂直分片:水平分片:一个表格的数据分割到多个节点上,按照行分隔。垂直分片:一个数据库中多个表格A,B,C,A存储到节点1上,B存储到节点2上,C存储到节点3上。MyCat通过定义表的分片规则来实现分片,每个表格可以绑定一个分片规则,每个分片规则指定一个分片字段并绑定一个函数,来实现动态分配算法。安装mycat后解压tar-zxvfMycat-server-1.6.7.4-r
面向对象面向过程
3213213333332132
java
面向对象:把要完成的一件事,通过对象间的协作实现。
面向过程:把要完成的一件事,通过循序依次调用各个模块实现。
我把大象装进冰箱这件事为例,用面向对象和面向过程实现,都是用java代码完成。
1、面向对象
package bigDemo.ObjectOriented;
/**
* 大象类
*
* @Description
* @author FuJian
Java Hotspot: Remove the Permanent Generation
bookjovi
HotSpot
openjdk上关于hotspot将移除永久带的描述非常详细,http://openjdk.java.net/jeps/122
JEP 122: Remove the Permanent Generation
Author Jon Masamitsu
Organization Oracle
Created 2010/8/15
Updated 2011/
正则表达式向前查找向后查找,环绕或零宽断言
dcj3sjt126com
正则表达式
向前查找和向后查找
1. 向前查找:根据要匹配的字符序列后面存在一个特定的字符序列(肯定式向前查找)或不存在一个特定的序列(否定式向前查找)来决定是否匹配。.NET将向前查找称之为零宽度向前查找断言。
对于向前查找,出现在指定项之后的字符序列不会被正则表达式引擎返回。
2. 向后查找:一个要匹配的字符序列前面有或者没有指定的
BaseDao
171815164
seda
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
public class BaseDao {
public Conn
Ant标签详解--Java命令
g21121
Java命令
这一篇主要介绍与java相关标签的使用 终于开始重头戏了,Java部分是我们关注的重点也是项目中用处最多的部分。
1
[简单]代码片段_电梯数字排列
53873039oycg
代码
今天看电梯数字排列是9 18 26这样呈倒N排列的,写了个类似的打印例子,如下:
import java.util.Arrays;
public class 电梯数字排列_S3_Test {
public static void main(S
Hessian原理
云端月影
hessian原理
Hessian 原理分析
一. 远程通讯协议的基本原理
网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络 IO 来实现,其中传输协议比较出名的有 http 、 tcp 、 udp 等等, http 、 tcp 、 udp 都是在基于 Socket 概念上为某类应用场景而扩展出的传输协
区分Activity的四种加载模式----以及Intent的setFlags
aijuans
android
在多Activity开发中,有可能是自己应用之间的Activity跳转,或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例,而不是产生大量重复的Activity。
这需要为Activity配置特定的加载模式,而不是使用默认的加载模式。 加载模式分类及在哪里配置
Activity有四种加载模式:
standard
singleTop
hibernate几个核心API及其查询分析
antonyup_2006
html .net Hibernate xml 配置管理
(一) org.hibernate.cfg.Configuration类
读取配置文件并创建唯一的SessionFactory对象.(一般,程序初始化hibernate时创建.)
Configuration co
PL/SQL的流程控制
百合不是茶
oracle PL/SQL编程 循环控制
PL/SQL也是一门高级语言,所以流程控制是必须要有的,oracle数据库的pl/sql比sqlserver数据库要难,很多pl/sql中有的sqlserver里面没有
流程控制;
分支语句 if 条件 then 结果 else 结果 end if ;
条件语句 case when 条件 then 结果;
循环语句 loop
强大的Mockito测试框架
bijian1013
mockito 单元测试
一.自动生成Mock类 在需要Mock的属性上标记@Mock注解,然后@RunWith中配置Mockito的TestRunner或者在setUp()方法中显示调用MockitoAnnotations.initMocks(this);生成Mock类即可。二.自动注入Mock类到被测试类 &nbs
精通Oracle10编程SQL(11)开发子程序
bijian1013
oracle 数据库 plsql
/*
*开发子程序
*/
--子程序目是指被命名的PL/SQL块,这种块可以带有参数,可以在不同应用程序中多次调用
--PL/SQL有两种类型的子程序:过程和函数
--开发过程
--建立过程:不带任何参数
CREATE OR REPLACE PROCEDURE out_time
IS
BEGIN
DBMS_OUTPUT.put_line(systimestamp);
E
【EhCache一】EhCache版Hello World
bit1129
Hello world
本篇是EhCache系列的第一篇,总体介绍使用EhCache缓存进行CRUD的API的基本使用,更细节的内容包括EhCache源代码和设计、实现原理在接下来的文章中进行介绍
环境准备
1.新建Maven项目
2.添加EhCache的Maven依赖
<dependency>
<groupId>ne
学习EJB3基础知识笔记
白糖_
bean Hibernate jboss webservice ejb
最近项目进入系统测试阶段,全赖袁大虾领导有力,保持一周零bug记录,这也让自己腾出不少时间补充知识。花了两天时间把“传智播客EJB3.0”看完了,EJB基本的知识也有些了解,在这记录下EJB的部分知识,以供自己以后复习使用。
EJB是sun的服务器端组件模型,最大的用处是部署分布式应用程序。EJB (Enterprise JavaBean)是J2EE的一部分,定义了一个用于开发基
angular.bootstrap
boyitech
AngularJS AngularJS API angular中文api
angular.bootstrap
描述:
手动初始化angular。
这个函数会自动检测创建的module有没有被加载多次,如果有则会在浏览器的控制台打出警告日志,并且不会再次加载。这样可以避免在程序运行过程中许多奇怪的问题发生。
使用方法: angular .
java-谷歌面试题-给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数
bylijinnan
java
public class SearchInShiftedArray {
/**
* 题目:给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数。
* 请在这个特殊数组中找出给定的整数。
* 解答:
* 其实就是“旋转数组”。旋转数组的最小元素见http://bylijinnan.iteye.com/bl
天使还是魔鬼?都是我们制造
ducklsl
生活 教育 情感
----------------------------剧透请原谅,有兴趣的朋友可以自己看看电影,互相讨论哦!!!
从厦门回来的动车上,无意中瞟到了书中推荐的几部关于儿童的电影。当然,这几部电影可能会另大家失望,并不是类似小鬼当家的电影,而是关于“坏小孩”的电影!
自己挑了两部先看了看,但是发现看完之后,心里久久不能平
[机器智能与生物]研究生物智能的问题
comsci
生物
我想,人的神经网络和苍蝇的神经网络,并没有本质的区别...就是大规模拓扑系统和中小规模拓扑分析的区别....
但是,如果去研究活体人类的神经网络和脑系统,可能会受到一些法律和道德方面的限制,而且研究结果也不一定可靠,那么希望从事生物神经网络研究的朋友,不如把
获取Android Device的信息
dai_lm
android
String phoneInfo = "PRODUCT: " + android.os.Build.PRODUCT;
phoneInfo += ", CPU_ABI: " + android.os.Build.CPU_ABI;
phoneInfo += ", TAGS: " + android.os.Build.TAGS;
ph
最佳字符串匹配算法(Damerau-Levenshtein距离算法)的Java实现
datamachine
java 算法 字符串匹配
原文:http://www.javacodegeeks.com/2013/11/java-implementation-of-optimal-string-alignment.html------------------------------------------------------------------------------------------------------------
小学5年级英语单词背诵第一课
dcj3sjt126com
english word
long 长的
show 给...看,出示
mouth 口,嘴
write 写
use 用,使用
take 拿,带来
hand 手
clever 聪明的
often 经常
wash 洗
slow 慢的
house 房子
water 水
clean 清洁的
supper 晚餐
out 在外
face 脸,
macvim的使用实战
dcj3sjt126com
mac vim
macvim用的是mac里面的vim, 只不过是一个GUI的APP, 相当于一个壳
1. 下载macvim
https://code.google.com/p/macvim/
2. 了解macvim
:h vim的使用帮助信息
:h macvim
java二分法查找
蕃薯耀
java二分法查找 二分法 java二分法
java二分法查找
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年6月23日 11:40:03 星期二
http:/
Spring Cache注解+Memcached
hanqunfeng
spring memcached
Spring3.1 Cache注解
依赖jar包:
<!-- simple-spring-memcached -->
<dependency>
<groupId>com.google.code.simple-spring-memcached</groupId>
<artifactId>simple-s
apache commons io包快速入门
jackyrong
apache commons
原文参考
http://www.javacodegeeks.com/2014/10/apache-commons-io-tutorial.html
Apache Commons IO 包绝对是好东西,地址在http://commons.apache.org/proper/commons-io/,下面用例子分别介绍:
1) 工具类
2
如何学习编程
lampcy
java 编程 C++ c
首先,我想说一下学习思想.学编程其实跟网络游戏有着类似的效果.开始的时候,你会对那些代码,函数等产生很大的兴趣,尤其是刚接触编程的人,刚学习第一种语言的人.可是,当你一步步深入的时候,你会发现你没有了以前那种斗志.就好象你在玩韩国泡菜网游似的,玩到一定程度,每天就是练级练级,完全是一个想冲到高级别的意志力在支持着你.而学编程就更难了,学了两个月后,总是觉得你好象全都学会了,却又什么都做不了,又没有
架构师之spring-----spring3.0新特性的bean加载控制@DependsOn和@Lazy
nannan408
Spring3
1.前言。
如题。
2.描述。
@DependsOn用于强制初始化其他Bean。可以修饰Bean类或方法,使用该Annotation时可以指定一个字符串数组作为参数,每个数组元素对应于一个强制初始化的Bean。
@DependsOn({"steelAxe","abc"})
@Comp
Spring4+quartz2的配置和代码方式调度
Everyday都不同
代码 配置 spring4 quartz2.x 定时任务
前言:这些天简直被quartz虐哭。。因为quartz 2.x版本相比quartz1.x版本的API改动太多,所以,只好自己去查阅底层API……
quartz定时任务必须搞清楚几个概念:
JobDetail——处理类
Trigger——触发器,指定触发时间,必须要有JobDetail属性,即触发对象
Scheduler——调度器,组织处理类和触发器,配置方式一般只需指定触发
Hibernate入门
tntxia
Hibernate
前言
使用面向对象的语言和关系型的数据库,开发起来很繁琐,费时。由于现在流行的数据库都不面向对象。Hibernate 是一个Java的ORM(Object/Relational Mapping)解决方案。
Hibernte不仅关心把Java对象对应到数据库的表中,而且提供了请求和检索的方法。简化了手工进行JDBC操作的流程。
如
Math类
xiaoxing598
Math
一、Java中的数字(Math)类是final类,不可继承。
1、常数 PI:double圆周率 E:double自然对数
2、截取(注意方法的返回类型) double ceil(double d) 返回不小于d的最小整数 double floor(double d) 返回不大于d的整最大数 int round(float f) 返回四舍五入后的整数 long round