MySQL分布式集群之MyCAT(三)rule的分析

            首先写在最前面,MyCAT1.4的alpha版本已经发布了,这里面修复了不少的bug,也完善了一细节,之前两篇博客已经做了一些修改

---------------------------------------------------------------------------------这才是本体~----------------------------------------------------------------------------------
            之前已经介绍过了schema的作用了,这一篇会把rule和server一起介绍~
            首先是rule,在这个文件里面会详细的制定多种分片的规则,这次只抽出一些使用率比较高的方法,先上配置文件的内容
         
            可以简单看一下,在截图的上半部分描述的是rule的定义,在下半部分,是rule对应的实际切分规则,这里总工介绍下面四种切分方式~murmur已坑~
-------------------------------------------------------------------------------------------Hash-int---------------------------------------------------------------------------------
            先看hash-int,在这一条切分规则的下面,有一个mapfile,这代表着,这个切分规则是根据partition-hash-int的内容来决定的,那么看一下这个文本文件
         
            很简单的内容,这代表着切分使用的基准列里面,值为10000的时候,放在第一个DN里面(dn1),值为10010的时候,放在第二个DN里面(dn2)
            可以看一下实际效果
         
         
            看一下MyCAT的Debug日志,这两条语句被分配到了dn1和dn2上面,数据库里面也插入了相对应的数据
         
            那么~问题来了(挖掘机滚粗~),如果插入的数据中,基准列的取值不是这个文件里面写明的值,会是什么效果?
         
            直截了当的报错了~

            好了,hash-int的这种切分规则,大体上可以理解为枚举分区,会比较适合于取值固定的场合,比如说性别(0,1),省份(固定值,短时间不会收复日本省吧~),渠道商 or 各种平台的ID
            而且,用逗号分隔可以把多个值放在一个分区里面,所以可以根据实际的数据量/流量/访问量来综合制定切分策略;
            缺点:毕竟不是全能战士╮(╯_╰)╭

-------------------------------------------------------------------------------------------range-long---------------------------------------------------------------------------------
            第二种切分方式,range-long,仔细一看的话,和hash-int是比较像的,也是由特定的文件来决定切分策略,所以还是去看一下文件的内容
         
            从文件内容可以看出,这是一种范围切分的方式,制定基准列的取值范围,然后把这一范围的所有数据都放到一个DN上面,这种方式和hash-int基本一致,就不截图了(懒癌晚期,时间不够了!)
            这种切分策略,个人感觉在业务数据库里面的使用场景会少一些,因为这种切分方式需要预定好整体的数量,这就决定了那种无限增长的数据不能用这个,毕竟要改动这个切分策略会很麻烦
            真要用起来,感觉也就对自增主键用,然后按照一定的数量来均匀切分,比如那种一天固定X条数据的业务(温度采集?数据采集?之类的情况),然后提前建好多个DN(库)。
            当然,也存在一种潜在的问题,如果在短时间发生海量的顺序插入操作,而每一个DN(分库)设定的数量比较高(比如说一个DN设定的放1000W条数据),那么在这个时候,会出现某一个DN(分库)IO压力非常高,而其他几个DN(分库)完全没有IO操作,就会出现类似于DB中常见的热块/热盘的现象,而MySQL经常用自增主键,所以使得MySQL的表出现大量“顺序”插入的机会会多很多。
--------------------------------------------------------------------------------------------mod-long-----------------------------------------------------------------------------------
            mod-long,从mod来看这应该是一种取余数的方法,来看一下具体配置的信息
         
            count=4,这是代表着总共把数据切分成四份,一般是和具体的DN数量对应,从而达到把数据均匀的分布在四个DN上(当然,count
            看一下实际的效果
         
            看一下MyCAT的Debug日志,看看MyCAT是如何处理的
         
            采用这种取余数的方式时,这四条数据分别插入了四个DN(库),而且可以看到,顺序插入时,数据是被均匀的分散在多个DN(库)上面
            相比较于上面的range的方法,这种切分策略会更好的分散数据库写的压力,但是问题也很明显,一旦出现了范围查询,就需要MyCAT去合并结果,当数据量偏高的时候,这种跨库查询+合并结果消耗的时间有可能会增加很多,尤其是还出现了order by的时候。
            所以这种切分策略会比较适合于单点查询的情景,比如说.....我也不知道......真的不知道,也许在银行,查询个人账户信息的时候,一些和用户信息的表可以做好冗余,然后利用这种方式来提供更为高效的查询(毕竟银行的用户数量多,恩恩~)

--------------------------------------------------------------------------------partition-by-long----------------------------------------------------------------------------------
            partition-by-long,处于range-long和mod-long之间的一个略微折中的划分策略,具体切分形势依照如下描述:
            以1024为一个单位,每个DN存放partitionLength数量的数据,且,partitionCount x partitionLength=1024
            看起来有点难以理解,形象点描述的话,以partitionCount(4) x partitionLength(256)为例,sid%1024=0-255的放在DN1,256-511的放在DN2,以此类推
            试着以128为偏移值插入了八条数据,直接看MyCAT的日志
         
            可以看到,八条数据均匀的分布在这四个DN里面~
            值得一提的是,这种切分策略也支持非均匀分布~实在是测不动了,盗图两张~
          
          
            这两张图基本上也说明白了这种非均匀分布的划分策略,重点还是在2x256+1x512=1024上面~
            这种划分策略在range-long和mod-long之间取了一个折中点,同时,也还算是比较灵活,可以根据不同的情况进行非均匀划分,实际上能应用的场景会稍微多一点吧,或者说,不少场景都能用一用,相对减少了跨DN的情形,又把数据比较均匀的切分开来了,单点查询也不会太慢。

-----------------------------------------------------------------------------------写在最后-------------------------------------------------------------------------------------
            其实MyCAT支持的切分方式还有不少,比如说按照时间的切分策略,可以按月,按天切分等,在这里也没办法把所有的策略都放上来,见谅了o( ̄ヘ ̄o#)
            实际上从个人的观点来看,时间的切分依照数据库本身的分区策略来分也没什么问题,半年度,季度的数据也还是会需要查询的....PS:   _(:з」∠)_真不是懒...
            可以说,MyCAT的分库分表的重点,基本全部在这个rule里面体现了,表要不要分,表的数据怎么切分,都是需要根据实际业务来决定,充分根据业务的特点去决定最合适的划分策略~
            下一章预告>>server,对MyCAT调优的主要部分

            第一篇http://blog.itpub.net/29510932/viewspace-1664499/
            第二篇http://blog.itpub.net/29510932/viewspace-1667814/

时间: 2024-09-26 13:30:34

MySQL分布式集群之MyCAT(三)rule的分析的相关文章

MySQL分布式集群之MyCAT(二)schema详解(修正)

        在第一部分,有简单的介绍MyCAT的搭建和配置文件的基本情况,这一篇详细介绍schema的一些具体参数,以及实际作用         首先贴上自己测试用的schema文件,双引号之前的反斜杠不会消除,姑且当成不存在吧... 点击(此处)折叠或打开 ?xml version=\"1.0\"?> !DOCTYPE mycat:schema SYSTEM \"schema.dtd\"> mycat:schema xmlns:mycat=\&qu

有生之年系列----MySQL分布式集群之MyCAT调优初探(四)

这是有生之年系列的填坑_(:з」∠)_ 前作第一篇:http://blog.itpub.net/29510932/viewspace-1664499/ 前作第二篇:http://blog.itpub.net/29510932/viewspace-1667814/ 前作第三篇:http://blog.itpub.net/29510932/viewspace-1678591/ MyCAT基准测试:http://blog.itpub.net/29510932/viewspace-1726924/和ht

MySQL分布式集群搭建

1.准备集群搭建环境 使用6台虚拟机来搭建MySQL分布式集群,相应的实验环境与对应的MySQL节点之间的对应关系如下图所示: 管理节点(MGM):这类节点的作用是管理MySQLCluster内的其他节点,如提供配置数据,并停止节点,运行备份等.由于这类节点负责管理其他节点的配置,应该在启动其他节点之前启动这类节点.MGM节点是用命令"ndb_mgmd"启动的: 数据节点(NDB):这类节点用于保存Cluster的数据,数据节点的数目与副本的数目相关,是片段的倍数.例如,对于两个副本,

MySQL Cluster集群的初级部署教程_Mysql

Mysql Cluster概述    MySql Cluster最显著的优点就是高可用性,高实时性,高冗余,扩展性强.    它允许在无共享的系统中部署"内存中"数据库的Cluster.通过无共享体系结构,系统能够使用廉价的硬件.此外,由于每个组件有自己的内存和磁盘,所以不存在单点故障.    它由一组计算机构成,每台计算机上均运行者多种进程,包括mysql服务器,NDB cluster的数据节点,管理服务启,以及专门的数据访问程序    所有的这些节点构成一个完整的mysql集群体系

MySQL大型分布式集群

本套课程将通过分布式集群和分库分表两部分内容进行讲解 1.主要解决针对大型网站架构中持久化部分中,大量数据存储以及高并发访问所带来是数据读写问题.分布式是将一个业务拆分为多个子业务,部署在不同的服务器上.集群是同一个业务,部署在多个服务器上. 2.着重对数据切分做了细致丰富的讲解,从数据切分的原理出发,一步一步深入理解数据的切分,通过深入理解各种切分策略来设计和优化我们的系统.这部分中我们还用到了数据库中间件和客户端组件来进行数据的切分,让广大网友能够对数据的切分从理论到实战都会有一个质的飞跃.

亿级Web系统搭建:单机到分布式集群

当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层面搭建多个层次的缓存机制.在不同的压力阶段,我们会遇到不同的问题,通过搭建不同的服务和架构来解决. Web负载均衡 Web负载均衡(Load Balancing),简单地说就是给我们的服务器集群分配"工作任务",而采用恰当的分配方式,对于保护处于后端的Web服务器来说,非常重要. 负载均衡

很不错的文章---【问底】徐汉彬:亿级Web系统搭建——单机到分布式集群

原文:很不错的文章---[问底]徐汉彬:亿级Web系统搭建--单机到分布式集群 [导读]徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设.  大规模流量的网站架构,从来都是慢慢"成长"而来.而这个过程中,会遇到很多问题,在不断解决问题的过程中,Web系统变得越来越大.并且,新的挑战又往往出现在旧的解决方案之上.希望这篇文章能够为技术人员提供一定的参考和帮助.  以下为原文 当一个Web系统从日访问量

漫谈分布式集群的负载均衡—口水篇

1 什么是分布式集群 为了理解分布式集群这个概念,我们先说说这两个概念:"集群"和"分布式".艺术来源于生活,计算机科学亦是如此.我们先通过例子,来了解一下现实生活中的"集群"和"分布式". 从开餐馆说起:你开了一家餐馆,自己掌勺后厨(即做菜).随着生意越来越好,发现自己忙不过来.于是你聘请了两个厨师,你们三位厨师就是一个"集群".主要的职责是:洗菜.配菜.炒菜.你们关系如下: 随着生意越来越好,两种方式增

【干货】Apache Hadoop 2.8 完全分布式集群搭建超详细过程,实现NameNode HA、ResourceManager HA高可靠性

最近在自己的笔记本电脑上搭建了Apache Hadoop分布式集群,采用了最新的稳定版本2.8,并配置了NameNode.ResourceManager的HA高可用,方便日常对Hadoop的研究与测试工作.详细的搭建过程如下: 1.安装docker,创建docker容器,用于搭建hadoop节点 docker真是个好东西啊,当要在自己的笔记本上搭建分布式集群时,由于CPU.内存.磁盘有限,无法在VMware上虚拟出太多节点,这时使用docker创建几个容器,就能轻松搭建一个分布式集群了. (1)