您好、欢迎来到现金彩票网!
当前位置:秒速快三 > 水平分片 >

一、mycat实战之理论

发布时间:2019-07-30 20:33 来源:未知 编辑:admin

  在互联网时代,海量数据的存储与访问成为系统设计与使用的瓶颈问题,对于海量数据处理,按照使用场

  景,主要分为两种类型:联机事务处理(OLTP)和联机分析处理(OLAP)。

  联机事务处理(OLTP)也称为面向交易的处理系统,其基本特征是原始数据可以立即传送到计算中心进行处

  联机分析处理(OLAP)是指通过多维的方式对数据进行分析、查询和报表,可以同数据挖掘工具、统计分析

  针对上面两类系统有多种技术实现方案,存储部分的数据库主要分为两大类:关系型数据库与 NoSQL 数据

  关系型数据库,是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库中的

  NoSQL 数据库,全称为 Not Only SQL,意思就是适用关系型数据库的时候就使用关系型数据库,不适用的

  时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。主要分为临时性键值存储

  CouchDB)、面向列的数据库(Cassandra、HBase),每种 NoSQL 都有其特有的使用场景及优点。

  Oracle,mysql 等传统的关系数据库非常成熟并且已大规模商用,为什么还要用 NoSQL 数据库呢?主要是

  由于随着互联网发展,数据量越来越大,对性能要求越来越高,传统数据库存在着先天性的缺陷,即单机(单

  库)性能瓶颈,并且扩展困难。这样既有单机单库瓶颈,却又扩展困难,自然无法满足日益增长的海量数据存储

  及其性能要求,所以才会出现了各种不同的 NoSQL 产品,NoSQL 根本性的优势在于在云计算时代,简单、易于

  相对于垂直拆分,水平拆分不是将表做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中

  包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分

  一个架构设计较好的应用系统,其总体功能肯定是由很多个功能模块所组成的,而每一个功能模块所需要的

  数据对应到数据库中就是一个或者多个表。而在架构设计中,各个功能模块相互之间的交互点越统一越少,系统

  的耦合度就越低,系统各个模块的维护性以及扩展性也就越好。这样的系统,实现数据的垂直切分也就越容易。

  但是往往系统之有些表难以做到完全的独立,存在这扩库 join 的情况,对于这类的表,就需要去做平

  衡,是数据库让步业务,共用一个数据源,还是分成多个库,业务之间通过接口来做调用。在系统初期,数据量

  比较少,或者资源有限的情况下,会选择共用数据源,但是当数据发展到了一定的规模,负载很大的情况,就需

  一般来讲业务存在着复杂 join 的场景是难以切分的,往往业务独立的易于切分。如何切分,切分到何种

  由于垂直切分是按照业务的分类将表分散到不同的库,所以有些业务表会过于庞大,存在单库读写与存储瓶

  相对于垂直拆分,水平拆分不是将表做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中

  包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中的某些行切分

  拆分数据就需要定义分片规则。关系型数据库是行列的二维模型,拆分的第一原则是找到拆分维度。比如:

  从会员的角度来分析,商户订单交易类系统中查询会员某天某月某个订单,那么就需要按照会员结合日期来拆

  分,不同的数据按照会员 ID 做分组,这样所有的数据查询 join 都会在单库内解决;如果从商户的角度来讲,要查

  询某个商家某天所有的订单数,就需要按照商户 ID 做拆分;但是如果系统既想按会员拆分,又想按商家数据,则

  如图,切分原则都是根据业务找到适合的切分规则分散到不同的库,下面用用户 ID 求模举例

  前面讲了垂直切分跟水平切分的不同跟优缺点,会发现每种切分方式都有缺点,但共同的特点缺点有:

  A. 客户端模式,在每个应用程序模块中配置管理自己需要的一个(或者多个)数据源,直接访问各个数据

  B. 通过中间代理层来统一管理所有的数据源,后端数据库集群对前端应用程序透明;

  可能 90%以上的人在面对上面这两种解决思路的时候都会倾向于选择第二种,尤其是系统不断变得庞大复杂

  的时候。确实,这是一个非常正确的选择,虽然短期内需要付出的成本可能会相对更大一些,但是对整个系统的

  Mycat 通过数据切分解决传统数据库的缺陷,又有了 NoSQL 易于扩展的优点。通过中间代理层规避了多数

  据源的处理问题,对应用完全透明,同时对数据切分后存在的问题,也做了解决方案。下面章节就分析,mycat

  第三原则:数据切分尽量通过数据冗余或表分组(Table Group)来降低跨库 Join 的可能。

  第四原则:由于数据库中间件对数据 Join 实现的优劣难以把握,而且实现高性能难度极大,业务读取尽量

  通过在配置文件中配置可能的枚举 id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省

  份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则,配置如下:

  * defaultNode 默认节点:小于 0 表示不设置默认节点,大于等于 0 表示设置默认节点

  * 默认节点的作用:枚举分片时,如果碰到不识别的枚举值,就让它路由到默认节点

  * 如果不配置默认节点(defaultNode 值小于 0 表示不配置默认节点),碰到

  本条规则类似于十进制的求模运算,区别在于是二进制的操作,是取 id 的二进制低 10 位,即 id 二进制

  此算法的优点在于如果按照 10 进制取模运算,在连续插入 1-10 时候 1-10 会被分到 1-10 个分片,增

  大了插入的事务控制难度,而此算法根据二进制则可能会分到连续的分片,减少插入事务事务控制难度。

  本例的分区策略:希望将数据水平分成 3 份,前两份各占 25%,第三份占 50%。(故本例非均匀分区)

  所有的节点配置都是从 0 开始,及 0 代表节点 1,此配置非常简单,即预先制定可能的 id 范围到某个分片

  此种配置非常明确即根据 id 进行十进制求模预算,相比固定分片 hash,此种在批量插入时可能存在批量插入单

  sPartionDay :分区天数,即默认从开始日期算起,分隔 10 天一个分区

  如果配置了 sEndDate 则代表数据达到了这个日期的分片后后循环从开始分片插入。

  此种规则是取模运算与范围约束的结合,主要为了后续数据迁移做准备,即可以自主决定取模后数据的节点

  配置文件中,1-32 即代表 id%256 后分布的范围,如果在 1-32 则在分区 1,其他类推,如果 id 非数据,则

  配置文件中,1-32 即代表 id%256 后分布的范围,如果在 1-32 则在分区 1,其他类推

  此种方式类似方式 6 只不过采取的是将列种获取前 prefixLength 位列所有 ASCII 码的和进行求模

  此方法为直接根据字符子串(必须是数字)计算分区号(由应用传递参数,显式指定分区号)。

  在此配置中代表根据 id 中从 startIndex=0,开始,截取 siz=2 位数字即 05,05 就是获取的分区,如果没传

  此规则是单月内按照小时拆分,最小粒度是小时,可以一天最多 24 个分片,最少 1 个分片,一个月完后下月

  综合了范围分片和求模分片的优点,分片组内使用求模可以保证组内数据比较均匀,分片组之间是范围分片可以

  最好事先规划好分片的数量,数据扩容时按分片组扩容,则原有分片组的数据不需要迁移。由于分片组内数据比

  以下配置一个范围代表一个分片组,=号后面的数字代表该分片组所拥有的分片的数量。

  思想与范围求模一致,当由于日期在取模会有数据集中问题,所以改成 hash 方法。

  根据日期查询日志数据 冷热数据分布 ,最近 n 个月的到实时交易库查询,超过 n 个月的按照 m 天分片。

  按月份列分区 ,每个自然月一个分片,格式 between 操作解析的范例。

  有状态分片算法与之前的分片算法不同,它是为(在线)数据自动迁移而设计的. 数据自动迁移分片算法需要满足一致性哈希的要求,尤其是单调性。

  直至 2018 年 7 月 24 日为止,现支持有状态算法的分片策略只有 crc32slot 欢迎大家提供更多有状态分片算法. 一个有状态分片算法在使用过程中暂时存在两个操作

  一种是初始化,使用 mycat 创建配置带有有状态分片算法的 table 时(推介)或者第一次配置有状态分片算法的

  table 并启动 mycat 时,有状态分片算法会根据表的 dataNode 的数量划分分片范围并生成 ruledata 下的文件, 这个分片范围规则就是’状态’,一个表对应一个状态,对应一个有状态分片算法实例,以及对应一个满足以下命

  行数就是 table 的分片节点数量,每行的’数字-数字’就是分片算法生成的范围,这个范围与具体算法实现有关,一

  个分片节点可能存在多个范围,这些范围以逗号,分隔.一般来说,不要手动更改这个文件,应该使用算法生成范围,而

  且需要注意的是,物理库上的数据的分片字段的值一定要落在对应范围里. 一种是添加操作,即数据扩容。

  添加节点,有状态分片算法根据节点的变化,重新分配范围规则,之后执行数据自动迁移任务.

  crc32solt 是有状态分片算法的实现之一,是一致性哈希,具体参考第六章 数据自动迁移方案设计

  slot 按照范围均匀分布在 dataNode 上,针对每张表进行实例化,通过一个文件记录 slot 和节点

  其中需要在分片表中增加 slot 字段,用以避免迁移时重新计算,只需要迁移对应 slot 数据即可

  分片最大个数为 102400 个,短期内应该够用,每分片一千万,总共可以支持一万亿数据

  crc32 会根据用户指定的分片字段,即图中的 id,算出 slot 的值

  不能为_slot.。_slot 是为了数据自动迁移过程中不需要重复根据分片字段计算_slot 而在数据库存储层面做的数

  据冗余。考虑数据冗余带来的数据存储空间与传输层面的开销与重复计算_slot 的时间开销,冗余 crc32 计算

  结果是值得的。如果有特殊原因可以提供一个选项给用户选择是否创建_slot 字段.此为后续 mycat 开发的一个

  一:简介在数据切分处理中,特别是水平切分中,中间件最终要的两个处理过程就是数据的切分、数据的聚合。选择合适的切分规则,至关重要,因为它决定了后续数据聚合的难易程度,甚至可以避免跨库的数据聚合处理。可以...博文来自:vbirdbest的博客

  Mycat学习实战-Mycat分片1.分片规则配置文件2.连续分片和离散分片3.综合类分片规则4.Mycat分片场景和策略...博文来自:ygqygq2的IT博客

  MyCat官网:数据库分库垂直拆分垂直分库按照业务将项目中的数据库表分成很多库,比如:商品库、用户库、订单库、系统库…… 水平拆分水平拆分也叫数据分片  M...博文来自:MrLi_IT的博客

  有段时间没有更新博客了,今天就为大家带来一篇关于Mycat数据分片的文章。今天,我们不讲理论,也不对Mycat的配置进行详细剖析,有兴趣的童鞋可以阅读Mycat官方的权威指南,其中,对Mycat的原理...博文来自:冰河的专栏

  Mycat是阿里推广的一个开源组件,其核心的概念为库表分离实现操作,利用合理的库表分离可以用更高效的方式来进行SQL数据库的开发与处理,适合高并发的数据访问处理。在本课程中将为读者讲解库表分离的设计思...博文来自:yootk的博客

  1SAAS多租户案例SAAS多租户的案例是Mycat粉丝的创新性应用案例之一,思路巧妙并且实现方式简单。SAAS应用中,不同租户的数据是需要进行相互隔离的,比较常用的一种方式是不同的租户采用不同的Da...博文来自:wangshuang1631的博客

  周六将编写内容,敬请期待..在这之前,我先把上篇文章里面的效果图展示下,不知道大家是否和我完成的效果一样!上图中,右侧是运行中的5节点mysql集群和2节点的haproxy集群,在每个haproxy节...博文来自:欢迎来到>

  热爱生活

  目录 1.安装mycat以及更改相应的配置文件2.检查mycat服务是否开启3.用客户端验证是否成功1.安装mycat以及更改相应的配置文件[~]#lsanaconda-ks.c...博文来自:朱海燕的博客日记

  前言由于公司业务不断扩大,数据量也在不断提高,现有的架构(单库mysql)在性能上已经不能满足日常查询需求,所以借这个周末在本地搭建了一套基于mycat的mysql集群环境的流程,可以做到多主-多从,...博文来自:liwei2633的专栏

  目录目录前言一主一从读写分离MySQL数据库配置Mycat的配置测试参考资料前言笔者在《MySQL数据库实现主从复制》这一篇文章中有提到读写分离这个技术,这个技术时基于主从复制之后的一种技术。在数据库...博文来自:夜雨飘零

  近来实习公司要求我们要去了解mycat,以后用来搭建分布式数据库。本人就跟着网上的教程内容和官网的权威指南自学了一下,一下是学习过程中自己写的一个比较简单的单主机形式下的分库分表案列。 做案列之前推荐...博文来自:kwz4400的博客

  1、分片枚举通过在配置文件中配置可能的枚举id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则,配置如下:lt;ta...博文来自:挖坑埋你

  我们先来做mysql的准备工作,假装一张大表分成了3张表。一:创建3个数据库db1、db2、db3。二:在三个分片里分别创建travelrecord表usedb1;createtabletravelr...博文来自:李秀才的博客

  1.前言记得是2016年3月15日,红色石头坐在下班的地铁上,跟往常一样,打开手机,看看新闻。突然,一条醒目的新闻吸引力我的注意:《AlphaGo最终局战胜李世石人机大战总比分1:4》!虽然,我之前也...博文来自:红色石头的专栏

  看完本书,感觉还有非常、非常、非常多知识需要不断加深,特别是python基础知识,适合有空就拿出来看看翻翻加深理论。了解了线性代数、概率、统计、语言学在自然语言处理中的基本方法及使用场景;学习了语料库...博文来自:简单-生活

  mysql读写分离什么是读写分离读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导...博文来自:chengweixin的博客

  本书是一本全面介绍相对价值策略、股票市场中性策略、统计套利和配对交易策略的普及类入门书籍。全书分为两部分:第一部分介绍套利与相对价值策略,适合对量化投资几乎不了解的入门级读者;第二部分介绍统计套利与配对交易,适合有一定基础,希望了解统计套...

  郑重声明:本文分享系统来自互联网,请勿商业用途,分享目的在于传递更多信息,帮助大家,并不代表本人赞同其观点和 对其真实性负责。如涉及作品内容、版权和其它问题,请在七日内与本人联系,我将在第一时间删除内容!

  HAProxy:HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy相比LVS的使用要简单很多,功能方面也很丰富,...博文来自:a281246240的专栏

  Mycat自身提供了一套基准性能测试工具,这套工具可以用于性能测试、疲劳测试等,包括分片表插入性能测试、分片表查询性能测试、更新性能测试、全局表插入性能测试等基准测试工具。这里需要说明的一点是,分片表...博文来自:wangshuang1631的博客

  我们知道MySql的存储引擎有两种:InnoDB和MyISAM,其中MyISAM是MySql的默认存储引擎,其实平时不会有太多人关心这个东西,但是对于实际的业务,存储引擎的合理选择是会对性能影响很大的...博文来自:小萌猿的博客

  name表名称;primaryKey为该表的主键type=”global”是啥?有几个特性:1、和具体物理表一一对应2、多节点配置时出现新增、修改操作时,则mycat会对所有节点(dataNode),...博文

  目录一.简介二.非分片表配置1.在数据库中使用单个节点2.server.xml在之前时就配置完毕了3.schema.xml配置4.修改配置模板5.修改xml6.历经九九八十一难,终于过了,浪费我一个小...博文来自:LiuY521的博客

  先吐个槽,这点东西折腾了我四五天,最后还是一条告警拯救了我,下面进入正文零、说在前面    看了几个MySQL的读写分离的中间件,貌似这个是比较流行的一个,虽然我不是BAT的粉丝,但是有好用的也可以拿...博文来自:暗黑世界

  Codis是由豌豆荚推出的一款高性能的Redis集群架构设计方案,利用Codis可以有效的整合所有Redis可用资源,并且形成大的内存操作池,这样可以实现高性能的数据存储。在本课程中将为读者讲解Cod...博文来自:yootk的博客

  初期测试过程中,原本采用kingshard中作为中间件的项目,但在测试的过程中,发现了不支持不同分表的join,只能选择放弃,改成mycat做测试...博文来自:熊出陌

  针对MyCat1.5版本,对MyCat的事务管理机制进行简要分析博文来自:CrazyPig的技术博客

  huangpeigui:这个工具问题了,跟yaml没关系,在官网也有人遇到相同issue,我最终通过手工修改来解决了

http://poisondarts.net/shuipingfenpian/180.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有