mycat

分布式 | MyCat如何迁移到DBLE之分片算法对比解析:stringhash分片

我怕爱的太早我们不能终老 提交于 2020-01-07 12:38:23
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 原创作者: 钟悦 关于作者 钟 悦 - 资深DBLE用户 某宇宙行资深架构师,在大型重点项目中使用 DBLE。 常年与 MySQL 纠缠不清,经常运用技术处理大企业病的技术or非技术问题的一个挨踢从业者。 当分片索引不是纯整型的字符串时,只接受整型的内置 hash 算法是无法使用的。为此,stringhash 按照用户定义的起点和终点去截取分片索引字段中的部分字符,根据当中每个字符的二进制 unicode 值换算出一个长整型数值,然后就直接调用内置 hash 算法求解分片路由:先求模得到逻辑分片号,再根据逻辑分片号直接映射到物理分片。 用户需要在 rule.xml 中定义 partitionLength[] 和 partitionCount[] 两个数组和 hashSlice 二元组。 在 DBLE 的启动阶段,点乘两个数组得到模数,也是逻辑分片的数量 并且根据两个数组的叉乘,得到各个逻辑分片到物理分片的映射表(物理分片数量由 partitionCount[] 数组的元素值之和) 此外根据 hashSlice 二元组,约定把分片索引值中的第 4 字符到第 5 字符(字符串以 0 开始编号,编号 3 到编号 4 等于第 4 字符到第 5 字符)字符串用于 “字符串->整型” 的转换 在 DBLE 的运行过程中

使用MYCAT轻松实现MYSQL水平分片

筅森魡賤 提交于 2020-01-07 12:36:52
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分到一个数据库,而另外的某些行切分到其他的数据库中,其中选择合适的切分规则至关重要,因为它决定了后续数据聚合的难易程度。 有几种典型的分片规则包括: (1)按照用户主键ID求模,将数据分散到不同的数据库,具有相同数据用户的数据都被分散到一个库中。 (2)按照日期,将不同月甚至日的数据分散到不同的库中。 (3)按照某个特定的字段求摸,或者根据特定范围段分散到不同的库中。 一、 MYCAT常用分片规则 MYCAT常用的分片规则如下,另外还有一些其他分片方式这里不全部列举: (1)分片枚举:sharding-by-intfile (2)主键范围:auto-sharding-long (3)一致性hash:sharding-by-murmur (4)字符串hash解析:sharding-by-stringhash (5)按日期(天)分片:sharding-by-date (6)按单月小时拆分:sharding-by-hour (6)自然月分片:sharding-by-month 二、 MYCAT分片配置说明 下文以使用分片枚举规则和主键范围规则分片为例: 1、分片枚举规则(sharding-by-intfile) (1)使用规则:/src

Mycat 快速入门

故事扮演 提交于 2020-01-07 07:04:31
什么是Mycat 至于什么是Mycat,可能在不同的角色下有不同的理解。对MySQL架构有过了解的话,都知道MySQL实际上是由Server层和存储引擎层组成的。所以 对于DBA来说 ,Mycat 就是 MySQL 的Server层。而 Mycat 后面连接的 MySQL Server,就好象是 MySQL 的存储引擎。因此,Mycat 本身并不存储数据,数据是在后端的 MySQL 上存储的,因此数据的可靠性 以及事务等依旧是 MySQL 保证的。 对于开发人员来说 ,Mycat基本等同于MySQL。因为完全可以使用连接MySQL的方式去连接Mycat,除了默认端口不同之外,连接方式上没有区别。所以Mycat对于开发人员来说是透明的,只不过在SQL的使用上有一些限制。 而对于架构师来说 ,Mycat 是一个数据库中间件,可以用作读写分离、分表分库以及容灾备份等。对于使用Mycat的应用来说,其隐藏了数据库的存储逻辑。让我们无需在代码上去对读写分离等存储逻辑进行控制,从而达到不修改应用代码的前提下,扩展数据库架构。 由于Mycat是国内的开源项目,有非常完善且丰富的中文文档。所以本文就不对基础概念进行赘述了,建议参考 Mycat权威指南在线版 或到 Mycat官网 中了解更多关于Mycat的内容。 什么是数据库中间件 数据库中间件,就是介于数据库与应用之间

应用部署优化方案分享

白昼怎懂夜的黑 提交于 2020-01-07 04:12:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> ​ 转载本文需注明出处:微信公众号EAWorld,违者必究。 引言: 在企业级应用实施和运营过程中,为了解决企业中部分业务场景访问量大、并发量高的问题,就需要对系统架构及应用参数做出优化和调整,如架构优化、数据库优化、应用优化等。 应用系统部署优化是一个不断尝试、实践、总结的过程,并针对不同企业的特点制定相关解决方案。通过应用系统架构、数据库及应用优化入手,并通过相关案例加以说明和解释。 目录: 1、应用系统架构简介 2、数据库及应用优化方案 3、优化案例分析 1. 应用系统架构简介 应用系统架构的发展 当今互联网技术发展日新月异,应用系统架构也在不断的更新迭代,从传统的单一架构演变为如今的集群架构、分布式、微服务架构等,以便满足用户对系统的要求。 NO1.单机部署架构 互联网建设初期,用户访问量有限,数据量不大,多数系统采用单台服务器部署应用服务,系统服务、文件、数据库等所有系统资源部署在一台服务器上. NO2.应用和数据分离 随着用户量和数据量的不断攀升,业务对系统的性能要求越来越高,这是需要将应用和数据分离,单独部署相关的业务组件。 NO3.引入NoSQL数据库架构 随着用户不断的增加,关系型数据库压力变大,访问延迟,性能下降,这时加入缓存技术,将查询较多数据缓存起来,以加快应用访问速度。 NO4

数据库中间件分片算法之hash

北慕城南 提交于 2020-01-07 03:39:55
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 前言 夜深人静的时候,打开 云音乐 ,点上一曲 攀登 ,带上真无线蓝牙耳机,瞬间燃到爆,键盘打字如飞倦意全无。 分片规则 这几天有人问我,dble和MyCat到底有什么不同。其实dble作为MyCAT的同门,吸收了MyCat的精华,同时也相应的做了一些减法。只支持MySQL显得更加的纯粹。所以选择对比学习两者我觉得挺好。 前面我们学习了schema.xml文件的配置,我们能独立的把 逻辑库 和 逻辑表 搭建起来,让数据表跟随我们的定义规则(取模)进行分布。今天我们介绍具体的分片算法。 dble 相对于 mycat 来说,是做了一些减法的。比如一致hash算法就没有,而是使用了 jumpstringhash 代替了一致性hash。具体原因可以参考文章 dble 沿用 jumpstringhash,移除 Mycat 一致性 hash 原因 hash分区算法 stringhash分区算法 enum分区算法 numberrange分区算法 patternrange分区算法 date分区算法 jumpstringhash算法 HASH分区算法 Hash分区算法是一种比较典型而且常用的算法。要使用HASH分区算法需要在rule.xml中定义两个部分。 分区规则定义 如下所示,使用 tableRule 标签定义

docker安装常用软件,没有比我这里更全了!

笑着哭i 提交于 2020-01-07 02:24:21
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。下面就介绍一些常用软件的安装,后期在补充更多! 大家可以关注公众号,程序员社群 docker安装mysql docker pull registry.cn-hangzhou.aliyuncs.com/wanggw/mysql:8.0 docker run --name mysql8 -d --restart=unless-stopped –log-driver json-file --log-opt max-size=1000 –log-opt max-file=1 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=“root” -e TZ=“Asia/Shanghai” -v /data/wang/mysql/data/:/var/lib/mysql registry.cn-hangzhou.aliyuncs.com/wanggw/mysql:8.0 –character-set-server=utf8 --collation-server=utf8_general_ci docker 安装nginx docker pull

我的面试标准:1.能干活;2.Java基础好;3.熟悉分布式框架

心不动则不痛 提交于 2020-01-06 22:02:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文授权转载自: https://www.cnblogs.com/JavaArchitect/p/10011253.html . awesome-java: https://github.com/Snailclimb/awesome-java (Github 上非常棒的 Java 开源项目集合) 我的面试标准 在上周,我密集面试了若干位 Java 后端的候选人,工作经验在3到5年间。我的标准其实不复杂: 第一能干活; 第二 Java 基础要好; 第三最好熟悉些分布式框架; 我相信其它公司招初级开发时,应该也照着这个标准来面的。 我也知道,不少候选人能力其实不差,但面试时没准备或不会说,这样的人可能在进团队干活后确实能达到期望,但可能就无法通过面试,但面试官总是只根据面试情况来判断。 但现实情况是,大多数人可能面试前没准备,或准备方法不得当。要知道,我们平时干活更偏重于业务,不可能大量接触到算法,数据结构,底层代码这类面试必问的问题点,换句话说,面试准备点和平时工作要点匹配度很小。 作为面试官,我只能根据候选人的回答来决定面试结果。不过,与人方便自己方便,所以我在本文里,将通过一些常用的问题来介绍面试的准备技巧。大家在看后一定会感叹:只要方法得当,准备面试第一不难,第二用的时间也不会太多。 框架是重点

mycat的schema.xml 配置文件详情

夙愿已清 提交于 2020-01-06 20:17:19
文章目录 一、概念与图示 二、schema 标签:逻辑数据库 2.1、属性列表 2.2、其他注意事项: 2.2.1、dataNode属性 2.2.2、checkSQLschema 属性 2.2.3、sqlMaxLimit 属性 2.3、table 标签——逻辑表 2.3.2、childTable 标签 三、dataNode 标签:分片信息,也就是分库相关配置 四、dataHost 标签:物理数据库,真正存储数据的数据库 4.1、heartbeat标签 4.2、writeHost 标签、 readHost 标签 一、概念与图示 schema.xml 是 Mycat对应的物理数据库和数据库表的配置。 schema.xml 配置的几个术语与其关系图示: 二、schema 标签:逻辑数据库 schema 标签用于定义 MyCat 实例中的逻辑库。 MyCat 可以有多个逻辑库,每个逻辑库都有自己的相关配置,可以使用 schema 标签来划分这些不同的逻辑库。 ps:如果不配置 schema 标签,所有的表配置,会属于同一个默认的逻辑库。 < schema name = " USERDB " checkSQLschema = " false " sqlMaxLimit = " 100 " dataNode = " dn1 " > </ schema > < schema name = "

MySQL分库分表之MyCat实现(五)

半世苍凉 提交于 2020-01-02 21:40:50
一 . 分库分表 什么是分库分表 ? 分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据大表分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。 2.分库分表的方式 2.1 分库 : 1. 垂直分库 : 是指按照业务将表进行分类,分布到不同的数据库上面,每个库可以放不同的服务器上,它的核心理念是专库专用。 2 水平分库 : 把同一个表的数据按一定规则拆分到不同的数据库中,每个库可以放不同的服务器上 2.2 分表 : 1. 垂直分表 : 将一个表按照字段分成多表,每个表存储其中一部分字段 2. 水平分 表 : 在同一个数据库内,把同一个表的数据按一定规则拆到多个表中。 二. MyCat 实现 2.1 什么是 MyCat? MyCat 是目前最流行的基于 java 语言编写的数据库中间件,是一个实现了 MySQL 协议的服务器,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL 原生协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信,其核心功能是分库分表。配合数据库的主从模式还可实现读写分离。 MyCat 是基于阿里开源的 Cobar 产品而研发, Cobar 的稳定性、可靠性

mycat实现读写分离,实现数据库负载均衡

可紊 提交于 2019-12-31 23:22:44
系统存在2个Mariadb 10.3数据库主从集群 数据库 master slave 用户名 密码 mall 192.168.1.100 192.168.1.110 root 123456 member 192.168.1.150 192.168.1.160 root 123456 schema.xml文件如下: <?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="mall" checkSQLschema="false" sqlMaxLimit="100" dataNode="mall_dn" > </schema> <schema name="member" checkSQLschema="false" sqlMaxLimit="100" dataNode="member_dn" > </schema> <dataNode name="mall_dn" dataHost="malldbhost" database="mall" /> <dataNode name="member_dn" dataHost="memberdbhost" database="member" />