Mycat最佳实践_第1页
Mycat最佳实践_第2页
Mycat最佳实践_第3页
Mycat最佳实践_第4页
Mycat最佳实践_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、MYCAT最佳实践支持1000亿大数据中国第一开源分布式数据库中间件MYCAT的原理分表分库Mysql2Mysql1分片原则与限制每个分片的记录量为1000万左右,分片数量是双刃剑,不易过多分片字段不支持多个字段的组合原则上以最频繁查询的字段为分片字段,分片字段不能改变值,分片字段的选择很大程度上影响系统性能非分片字段的查询语句,会并发发送到每个分片上去,导致资源消耗更多非范围分片,扩容难度大,一致性Hash也只是做出了一定的改善分片导致某些SQL语句的执行结果不符合预期,可以视为不支持分片产生了跨分片排序和分组统计等问题分片产生了表关联问题分片产生了分布式事务问题MYCAT目前不能支持的SQ

2、LInsert into values( xxxx)Insert into b select * from aSelect * from a where partionCol like “xxxx”Select * from b where pationCol 4 and pationC between Lock table a Select * from a for update - /*!mycat: sql = update a */ 任意的分片表的Join语句Select a from A order by bselect count(*) from A group by bSelec

3、t distinct a.* from a 存储过程中有输出参数的,目前不支持MYCAT注解方式解决特殊分片SQL路由问题对于一个特殊的复杂SQL,Mycat的语法解析器如果解析失败,无法通过,则可以通过注解方式“偷梁换柱”,从而基本解决这一问题Select * from a for update /*!mycat: sql = update a */ Select * from a for update 跨分片JOIN的几种策略关联字段采用相同的分片规则ER关系分片全局表编程方案: Catlet或自行处理任意两个分片表JION目前业界并没有很好的通用性解决方案,所以要尽可能避免大量在线的JO

4、IN SQL,而是采用后台预先定期计算并存储结果的方式Catlet是Java编写的一段程序,类似数据库中的存储过程,可以实现任意复杂SQL的Join、Group、Order等功能MYCAT ER分片DN1DN2MycatCustomer1Customer100Customer1Customer100Custermer1 - Order1Cutermer100 - Order4Custermer1 - Order2Custermer100 - Order 3Order1Order2Order3Order4存在关联关系的父子表在数据插入的过程中,子表会被Mycat路由到其相关父表记录的节点上,从而

5、父子表的Join查询可以下推到各个数据库节点上完成,这是最高效的跨节点Join处理技术,也是Mycat首创MYCAT全局表ordershost1ordershost2ordershost3ordershost4insert into orders (xxx)Mycat每个节点同时并发插入和更新数据,每个节点都可以读取数据,提升读性能的同时解决跨 节点Join的效率全局表的建议和限制全局表记录数在1000万以内更新频率低常见如用户、商户、商品等建议把变动频率高的字段从全局表剥离全局表目前是采用弱XA事务,存在局部失败的可能性MYCAT分布式事务问题XA分布式事务产生的代价较大,互联网领域多倾向于

6、抵制MySQL 直到5.7的某个版本,才修复了一直以来的XA缺陷,即binlog不写prepare日志,导致主从数据可能不一致Mycat目前沿用了Cobar的弱XA事务模型Mycat 2.0计划实现标准的事务,供应用自行决定使用当一个普通事务内的SQL被路由到多个节点上去执行时,就产生了分布式事务问题弱模型update sqlDN1DN2DN3commit任意错误回滚标志只能ollback在Update SQL执行成功的情况下,随后的Commit失败的概率非常小因此此模型还是能满足大多少应用的要求MYCAT读写分离和自动切换机制Mycat 支持基于MySQL主从复制状态的高级读写分离控制机制,

7、比如 Slave_behind_master 100则开启,而一旦检测到主从同步出错或者延时超过发展,则自动排除readHost,防止程序读到很久的旧数据MYCAT的高可靠业务数据存储方案MycatGalera clusterMysql Master/SlaveNoSQL多主同时写入,高可靠性,适合系统中的关键表帐务表、订单表等用户表、字典表、常规数据日志类的数据主从故障切换,可能有数据丢失的问题存储大量一次性非业务数据ClientOne SchemaMYCAT生产案例超过300个案例某电信领域海量交易数据实时查询案例分析每天2亿交易数据,保持最近一个月内的交易数据主要查询条件为某天(某几天)

8、某个交易手机号的交易记录查询时间要求3秒内返回结果MYCAT方案采用交易时间字段进行分片,分片规则为日期范围分片,每小时一个分片,总共24*31=744个分片,保存了31天的记录,744个分片均匀分布在4台X86服务器上,月末手工清理(转移历史数据),手机号建立索引数据库用InnoDBMYCAT方案系统实际的查询响应时间平均小于1秒研究了MySQL内存表与InnoDB两种引擎,结果表明,大多数情况下InnoDB是比较理想的选择,内存表对内存的要求很高,而且不太合适查询同时有大量的插入/更新操作的场景此方案具有很强的代表性,意味着当前很多SQL缓存数据库记录的方案都可以用MyCAT简单可靠替换。

9、大内存调优关键wrapper.java.additional.3=-XX:MaxPermSize=64Mwrapper.java.additional.4=-XX:+AggressiveOptswrapper.java.additional.5=-XX:MaxDirectMemorySize=2Gwrapper.java.additional.6=-Dcom.sun.management.jmxremotewrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=1984wrapper.java.additional.8=-Dc

10、om.sun.management.jmxremote.authenticate=falsewrapper.java.additional.9=-Dcom.sun.management.jmxremote.ssl=falsewrapper.java.additional.10=-Xmx4Gwrapper.java.additional.11=-Xms1G当有超过8G可用内存时候,建议大部分分配给XX:MaxDirectMemorySize,比如比如16G,而,而Xmx与与Xms则在则在4G左右左右MaxDirectMemorySize的大部分,比如的大部分,比如90%,分配给,分配给Mycat

11、的网络堆内存,为的网络堆内存,为system.xml中的以下两个参数:中的以下两个参数:processorBufferPool,单位字节,建议设置为 MaxDirectMemorySize的的90%左右,比如左右,比rocessorBufferChunk,BufferPool里单元大小,默认里单元大小,默认4096字节字节于于是总共有是总共有processorBufferPool/ processorBufferChunk 个单元格个单元格 :即:/4096= 3774873 个单元格个单元格单元单元格越多,通常性能越好,可以在管理端口格越多,通常性能越好,可以在管理端口(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论