基于 MyCat 分布式数据库解决方案的学汇总

合集下载

mycat原理

mycat原理

mycat原理Mycat原理。

Mycat是一个开源的分布式数据库系统,它是基于MySQL的分布式数据库架构,旨在提供高性能、高可用性和可伸缩性的数据库服务。

Mycat的原理主要包括分片、分布式事务和分布式查询三个方面。

首先,Mycat采用分片的方式来进行数据存储和管理。

分片是指将数据库中的数据按照一定的规则分成多个片段,每个片段可以存储在不同的物理节点上,从而实现数据的分布式存储和管理。

Mycat通过对数据进行分片,可以实现数据的水平扩展,提高系统的并发处理能力和数据存储容量。

其次,Mycat实现了分布式事务的支持。

在分布式数据库系统中,事务的一致性是非常重要的,Mycat通过采用分布式事务的机制来保证多个节点上的数据操作的一致性。

通过对事务的提交和回滚进行协调管理,Mycat可以确保分布式数据库系统的数据一致性和完整性。

另外,Mycat还实现了分布式查询的支持。

在分布式数据库系统中,查询的效率和性能是非常关键的因素,Mycat通过对查询请求进行分发和并行处理,可以有效地提高查询的效率和响应速度。

同时,Mycat还支持对查询结果的合并和排序操作,从而提供了丰富的查询功能和灵活的数据处理能力。

总的来说,Mycat的原理是基于分片、分布式事务和分布式查询三个方面来实现的。

通过这些原理的支持,Mycat可以实现高性能、高可用性和可伸缩性的分布式数据库服务,为用户提供稳定可靠的数据存储和处理能力。

同时,Mycat还提供了丰富的管理和监控功能,帮助用户更好地管理和维护分布式数据库系统。

在实际应用中,用户可以根据自己的需求和场景,灵活地配置和部署Mycat,从而实现更高效的数据管理和应用服务。

mycat分表策略

mycat分表策略

mycat分表策略Mycat分表策略Mycat是一个开源的分布式数据库中间件,提供了分片和分表的功能,可以实现数据库的水平扩展和负载均衡。

在使用Mycat进行分表时,需要考虑合理的分表策略,以满足业务需求和提高数据库性能。

分表是将一个大的表拆分成多个小的表,将数据分散存储在不同的数据库节点上,以减轻单一数据库的负担。

Mycat提供了多种分表策略,可以根据数据的特点和业务需求选择合适的策略。

一、垂直拆分垂直拆分是将一个表按照列的关系进行拆分,将不同的列存储在不同的表中。

这种策略适合于业务逻辑复杂、数据冗余度高的场景。

例如,一个订单表中既包含订单基本信息,又包含订单明细信息,可以将基本信息和明细信息分别存储在不同的表中,以提高查询效率。

二、水平拆分水平拆分是将一个表按照行的关系进行拆分,将不同的行分散存储在不同的表中。

这种策略适合于数据量大、访问频率高的场景。

例如,一个用户表中包含了数百万甚至上亿的用户数据,可以按照用户ID或者其他字段进行拆分,将不同的用户数据存储在不同的表中,以提高查询效率和并发性能。

三、范围拆分范围拆分是将一个表按照某个字段的范围进行拆分,将不同范围内的数据存储在不同的表中。

这种策略适合于按照某个字段进行查询和统计的场景。

例如,一个商品表中包含了大量的商品数据,可以按照商品价格进行拆分,将价格在一定范围内的商品数据存储在不同的表中,以提高查询效率和统计性能。

四、哈希拆分哈希拆分是根据某个字段的哈希值进行拆分,将哈希值相同的数据存储在同一个表中。

这种策略适合于随机访问的场景,可以将访问频率高的数据分散存储在不同的表中,以提高查询效率和并发性能。

在选择分表策略时,需要考虑以下几点:1. 数据特点:根据数据的特点选择合适的分表策略,例如,如果数据冗余度高,可以选择垂直拆分;如果数据量大,可以选择水平拆分;如果需要按照某个字段进行查询和统计,可以选择范围拆分。

2. 业务需求:根据业务需求选择合适的分表策略,例如,如果需要快速查询和统计数据,可以选择哈希拆分;如果需要按照某个字段进行分组和排序,可以选择范围拆分。

mycat 语法

mycat 语法

mycat 语法
Mycat是一款基于MySQL协议的分布式数据库中间件,它可以将多个 MySQL 数据库组成一个逻辑上的整体,从而实现数据的分布式存储和访问。

学习 Mycat 之前,需要了解一些基本的语法知识。

以下是 Mycat 的一些常用语法:
1. 数据库操作语法
Mycat 支持 MySQL 的所有数据库操作语法,包括 CREATE DATABASE、DROP DATABASE、USE、SHOW DATABASES 等语法。

2. 表操作语法
Mycat 支持 MySQL 的所有表操作语法,包括 CREATE TABLE、ALTER TABLE、DROP TABLE、TRUNCATE TABLE 等语法。

此外,Mycat 还支持表的拆分和合并操作,可以将一个表拆分成多个表,也可以将多个表合并成一个表。

3. 数据操作语法
Mycat 支持 MySQL 的所有数据操作语法,包括 SELECT、INSERT、UPDATE、DELETE 等语法。

在进行数据操作时,需要指定数据所在的逻辑库和逻辑表,Mycat 会自动将数据路由到相应的物理库和物理表上。

4. 高级语法
Mycat 还支持一些高级语法,如分片规则配置语法、路由策略配置语法、数据源配置语法等。

这些语法可以帮助我们更好地使用Mycat,提高数据访问效率和稳定性。

总之,学习 Mycat 的语法对于使用 Mycat 进行分布式数据库操作非常重要。

如果你想深入了解 Mycat,可以参考官方文档或者相关书籍。

基于MyCat中间件的分布式数据库实现与应用

基于MyCat中间件的分布式数据库实现与应用

基于MyCat中间件的分布式数据库实现与应用摘要:MyCat中间件是当前主流的分布式代理中间件,能够降低分布式数据库使用的复杂性和代价。

本文结合某运营商IT系统的转型实例,对基于MyCat中间件的分布式数据库实现原理以及其应用进行了详细的介绍,为有关需要提供参考。

关键词:MyCat;分布式数据库;实现;应用引言随着信息时代的发展以及互联网技术的不断推广应用,数据日益累积,社会各个行业都普遍面临着海量数据带来的挑战。

而分布式关系数据库作为大数据存储和处理的主要解决方案之一,在企业生产中得到越来越广泛的应用。

在这背景下,研究基于MyCat中间件的分布式数据库实现与应用具有十分重要的意义。

1.Mycat分片规则随着互联网的快速发展,海量数据的存储问题越来越突出,数据的量级也是指数的增长。

分片,是指通过对某一个字段通过特定的算法进行计算、分片,将原本存放在一个数据库中的数据分散存放到多个数据库,以达到分散单节点数据的压力。

数据分片在维度上可以分为垂直分片和水平分片。

垂直分片:在传统系统设计中应用非常广泛,按照不同的业务进行数据库分库。

在运营商支撑系统就按照业务分为营业数据库、账务数据库、报表数据库等,如图1。

水平分片:将每个独立的表按照一定的计算规则,将每个表中的数据分散到多个数据库中。

每个库的数据表结构一样,但是存储的数据不一样,如图2。

图1系统数据垂直分片图2系统数据水平分片分片规则:Mycat是在数据库和业务应用之间增加的一个数据库中间层,可以对数据量小且不需要做数据切片的表归集到非分片表;对于数据量大,并且业务上有分片需求的表归集为分片表。

分片表按照分片规则分为以下四大类:ER关系分片:ER模型是实体关系模型,基本元素是实体、关系和属性,Mycat 针对ER关系表的切分规则中,使得有相互依赖的表能够按照某一个规则切分到相同的节点上,避免跨库 Join 关系查询。

比如订单表和订单明细表就存在依赖关系,可以抽象为父子关系。

基于Mycat的分布式数据库的应用研究

基于Mycat的分布式数据库的应用研究

栏目编辑:梁丽雯 E-mail:liven_01@基于Mycat的分布式数据库的应用研究■ 中国人民银行朔州市中心支行 高鹏祥 中国人民银行太原中心支行 陈文俊摘要:近年来,人民银行业务规模快速增长,作为业务系统核心的数据库面临着存储性能低和业务连续性弱等多方面的挑战。

分布式数据库的出现为突破大规模、突发性、高并发量的业务场景提供了有效的解决方案。

本文结合人民银行业务需求,对基于Mycat的分布式数据库进行了研究。

经模拟测试,基于Mycat的分布式数据库具有高性能、高可用等特点,可用于弥补集中式数据库在人民银行业务应用中的不足。

关键词:Mycat;分布式数据库;可用性作者简介: 高鹏祥(1988-),男,山西朔州人,工学硕士,工程师,供职于中国人民银行朔州市中心支行,研究方向:分布式系统架构; 陈文俊(1980-),男,广东兴宁人,工学硕士,高级工程师,供职于中国人民银行太原中心支行,研究方向:金融大数据。

收稿日期: 2018-11-06一、研究背景随着金融信息化建设不断的更新和完善,人民银行业务规模持续扩大,业务量快速增长,对数据管理技术提出了更高的要求。

传统的集中式数据库数据处理瓶颈逐渐凸显,难以满足日益增长的业务需求,主要体现在以下几个方面。

(一)性能与存储不足以支付业务为例,2017年,人民银行支付系统共处理支付业务122.89亿笔,金额3 964.57万亿元,日均处理业务3 528.45万笔,金额15.68万亿元。

受制于单机设备的最大容量和处理能力,数据量的爆发式增长会导致单机存储能力严重不足,而频繁的数据查询使单机处理和响应性能严重下降,严重削弱了系统的服务能力。

(二)难以保障业务连续性按照《中国人民银行信息系统业务连续性分级保障标准》的要求,人民银行二级(L2)以上信息系统可用性至少达到99%,第五级(L5)信息系统可用性要达到99.999%。

而集中式数据库中所有数据存储并运行在单点主机上,硬件故障、软件错误、操作失误、恶意破坏都可能导致主机系统运行的非正常中断,造成数据服务无法响应,严重降低系统的整体可用性。

mycat作用及工作原理

mycat作用及工作原理

mycat作用及工作原理Mycat是一个开源的分布式数据库中间件,可以提供高性能和高可用性的数据访问服务。

它基于MySQL协议,可以将多个MySQL 服务器组织成一个逻辑上的数据库集群,对应用程序透明,提供统一的访问接口。

本文将介绍Mycat的作用及其工作原理。

一、Mycat的作用1.1 数据库分片Mycat可以将一个数据库分片成多个片段,每个片段可以存储一部分数据。

这样可以将数据分散存储在不同的物理节点上,提高了数据库的可扩展性和并发性能。

1.2 数据库读写分离Mycat可以将数据库的读操作和写操作分离,将读操作分发到多个从节点上执行,提高了数据库的读取性能。

1.3 数据库负载均衡Mycat可以根据不同的负载均衡策略,将数据库的请求分发到不同的物理节点上,实现负载均衡,提高了数据库的并发性能和稳定性。

1.4 数据库透明切换Mycat可以在数据库的主从切换时,对应用程序透明,无需修改代码,实现数据库的高可用性和容灾性能。

二、Mycat的工作原理2.1 数据库分片Mycat将一个数据库分片成多个片段,每个片段可以存储一部分数据。

它通过对数据进行哈希或范围分片,将数据均匀地分布到不同的片段中。

这样可以将数据分散存储在不同的物理节点上,提高了数据库的可扩展性和并发性能。

2.2 数据库读写分离Mycat通过将读操作和写操作分离,将读操作分发到多个从节点上执行,提高了数据库的读取性能。

它可以根据负载均衡策略,将读操作请求分发到不同的从节点上,实现负载均衡。

2.3 数据库负载均衡Mycat可以根据负载均衡策略,将数据库的请求分发到不同的物理节点上,实现负载均衡。

它可以根据请求的类型、请求的来源、物理节点的负载情况等因素,选择合适的节点来处理请求,提高了数据库的并发性能和稳定性。

2.4 数据库透明切换Mycat可以在数据库的主从切换时,对应用程序透明,无需修改代码。

它可以通过监控数据库的主从状态,当主节点发生故障或不可用时,自动切换到从节点,保证数据库的高可用性和容灾性能。

mycat知识点

mycat知识点
17
Mycat数据拆分原则
能不分就不分;分片数量尽量少且尽量均匀分布;分片规则需要慎重选择;尽量不要在一个事务中的SQL跨越多个分片;查询条件尽量优化
18
Mycat优点
拆分后业务清晰,拆分规则明确;系统之间整合或扩展容易;数据维护简单
19
Mycat缺点
部分业务表无法join,提高了系统复杂度;存在单库性能瓶颈,不易数据扩展和性能提高;事务处理复杂
4
Mycat工作原理
拦截用户发送的SQL语句;解析SQL语句并进行特定分析(如分片分析、路由分析、读写分离分析、缓存分析等);将SQL语句发送到后端真实的数据库;处理返回的结果(如结果合并、聚合处理、排序处理、分页处理等);将最终结果返回给用户
5
Mycat架构
包含逻辑库、逻辑表、dataNode、dataHost、writeHost、readHost等关键组件
6
逻辑库
Mycat中数据库服务的定义、管理的数据库
7
逻辑表dataNode
数据节点(分片节点),逻辑表分片的存放节点
9
dataHost
数据主机(节点主机),即数据节点dataNode所在的主机
10
writeHost
写主机,包含真实数据库的地址、用户名、密码等配置
11
14
Mycat非分片表
指数据量不是很大,不需要拆分的表
15
Mycat ER表
数据量很大的表需要拆分,但表有父子关系,为避免跨库join,有父子关系的表可放到一个数据库上
16
Mycat全局表
一个真实的业务系统中,存在大量类似字典的表,且这些表基本很少变动;为跨库join,会在定义表的每个dataNode上都冗余一张该表的拷贝

Mycat配置及使用详解.

Mycat配置及使用详解.

Mycat配置及使⽤详解.⾸先我们来看下什么是Mycat:MyCat:开源分布式数据库中间件, 这⾥定义的很简单, 就是分布式数据库的中间件.其实Mycat 是可以时mysql进⾏集群的中间件, 我们可以对mysql来分库分表来应对⽇益增长的数据量. 每台机器只存少量数据, 数据总和是分布式的机器上数据量总和.例如我们⼀个表中有512条数据(当然实际情况可能有成千上万条数据), 那么现在我们有三台机器装有mysql数据库, 我们想将这些数据按照⼀定规则的存储在三台机器上, 那么我们设定规则:表的id%/512 取的结果按照区间分别存储在三个不同的数据库中, 但是这三个数据库⼜要统⼀的对外提供服务.那么这些分割算法以及统⼀对外提供服务是谁来提供⽀持的呢? 当然就是我们今天要讲的Mycat了.在Linux下连接Mysql:连接Linux中的mysql数据库:(这⾥我们的Linux IP为192.168.200.140)查看表结构:查看1库中的商品ID(这个已经是通过Mycatt分好的)查看1库中的商品ID(这个已经是通过Mycatt分好的)查看1库中的商品ID(这个已经是通过Mycatt分好的)启动Mycat连接Mycat:在项⽬组中设置默认连接为Mycat:(关于这⾥数据库为什么是babasport⽽不是babasport1或babasport2等, 后⾯会说明)Mycat的配置:1, ⽤户名及密码设置:server.xml:2, 逻辑库中的定义表:schema.xml:这⾥需要说⼀下, 因为bbs_color和bbs_brand表中的数据很少, 所以这⾥不需要分库分表, 直接设置成全局表就⾏, 也就是这两个表中的数据在1,2,3 库中都是⼀样的.还有就是childTable, 我们拿bbs_product和bbs_sku来说, 因为商品product和库存bbs_sku是⼀对多的关系, 那么我们就希望商品id为1 的商品所对应的库存都是在同⼀个库中的, 这样查询的话就不⽤跨库了.同样这⾥还有⼀个属性是rule="sharding-by-pattern", 那么接下来我们就要看下这⾥设定的规则了.因为上⾯的schema标签中有定义的那么为babasport, ⽽且dataNode节点⼜分别指向dn1, dn2, dn3, 所以这⾥就可以做到对应了.我们在项⽬连接的时候直接是连接babasport的.3, 查看分⽚规则: rule.xml这⾥指定算法为sharding-by-pattern.查看算法sharding-by-pattern, 这⾥指定算法存储在partition-pattern.txt这⾥是通过PartitionByPattern这个类来实现的, 这⾥是对512进⾏取模, 如果取模过程中出现异常, 那么就放到3库(0,1,2)中进⾏存储.查看算法指定⽂件:这⾥就可以⼀⽬了然的查看到 0-127 是放在1库中, 128-255 是放在2库中, 256-512 是放在3库中.同样Mycat还⽀持动态扩容, 当我们的数据量越来越⼤时我们还可以加机器来分担压⼒, Mycat可以动态的取扩容. 这⾥就不再讲具体的实现原理了.关于Mycat的内容就说到这⾥, 更深层次的东西⼤家可以继续查阅相关资料, 我这⾥只是做⼀个介绍和⼊门.。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于MyCat 分布式数据库解决方案的学汇总最近公司推荐了mycat分布式中间件解决数据库分布式方案,今天到mycat官网学了一翻(),汇总下几个重点:1、mycat是什么?mycat是一个开源的分布式数据库系统,是一个实现了MySQL 协议的Server,前端用户可以把它看作是一个数据库代理,用MySQL 客户端工具和命令进行访问,后端可以用MySQL 原生(Native)协议访问数据库(不限于MYSQL数据库), 其核心功能是分表分库,即将一个多表水平分割为N 个小表,存储在后端的数据库中。

以下是几种通俗的方式介绍MYCAT:1)对于DBA 来讲:Mycat 就是MySQL Server,而Mycat 后面连接的MySQL Server,就好象是MySQL 的存储引擎,如InnoDB,MyISAM 等,因此,Mycat 本身并不存储数据,数据是在后端的MySQL 上存储的,因此数据可靠性以及事务等都是MySQL 保证的,简单的说,Mycat 就是MySQL 最佳伴侣,它在一定程度上让MySQL 拥有了能跟Oracle PK 的能力。

2)对于开发来讲:Mycat 就是一个近似等于MySQL 的数据库服务器,你可以用连接MySQL 的方式去连接Mycat(除了端口不同,默认的Mycat 端口是8066 而非MySQL 的3306,因此需要在连接字符串上增加端口信息),大多数情况下,可以用你熟悉的对象映射框架使用Mycat,但建议对于分片表,尽量使用基础的SQL 语句,因为返样能达到最佳性能,特别是几千万甚至几百亿条记录的情况下。

3)对于架构师来讲:Mycat 是一个强大的数据库中间件,不仅仅可以用作读写分离、以及分表分库、容灾备份,而且可以用于多租户应用开发、平台基础设施、让你的架构具备很强的适应性和灵活性,借助于即将发布的Mycat 智能优化模块,系统的数据访问瓶颈和热点一目了然,根据返些统计分析数据,你可以自动或手工调整后端存储,将不同的表映射到不同存储引擎上,而整个应用的代码一行也不用改变。

2)双活部署mycat、zk均采用双中心部署3、常见的数据库切分优化方案传统数据库存在着先天性的弊端,但是NoSQL 数据库又无法将其替今,NoSQL 只能作为传统数据的补充而不能将其替今,数据库性能优化除了在应用层对数据检索方面的调优,在架构方面主要对数据库进行切分,接下来主要从数据库切分的两个方面进行介绍:1)垂直切分:如果应用系统各业务或服务之间的耦合度低,相互影响小,可以接不同的模块分解,将数据库切分到不同的数据库。

2)水平切分:上面垂直切分,当某个业务量很大时仍然会有性能问题,比如某个表的数据量过大,这时需要进行水平切分,将大表切分为多个子表。

各个子表之间根据预先设置的分布规则,再通过数据库查询JOIN在一起。

水平分片常见的规则有:用户ID日期其它特定的字段有了数据分布,现在要解决的问题是如何让应用更加透明的访问分片的数据,目前主要有两种思路:1)客户端模式:在每个应用程序模块中配置管理自己需要的一个或多个数据源,直接访问各个数据库,在模块内完成数据的整合;2)通过中间代理层来统一管理数据源,后端数据库集群对前端应用程序透明;mycat提供了模式2的解决方案。

不过,因为分片需要注意以下几件事:能不切分尽量不切分如果要切分要选择合适的规则数据切分尽量通过数据冗余或表分组来降低跨库JOIN的可能4、mycat的几个主要组成概念MyCAT使用MySQL的通讯协议模拟成一个MySQL服务器,并建立了完整的Schema(数据库)、Table (数据表)、User (用户)的逻辑模型,并将这套逻辑模型映射到后端的存储节点DataNode(MySQL Instance)上的真实物理库中,这样一来,所有能使用MySQL的客户端以及编程语言都能将MyCAT当成是MySQLServer来使用,不必开发新的客户端协议。

当MyCAT收到一个客户端发送的SQL请求时,会先对SQL 进行语法分析和检查,分析的结果用于SQL路由,SQL路由策略支持传统的基于表格的分片字段方式进行分片,也支持独有的基于数据库E-R关系的分片策略,对于路由到多个数据节点(DataNode)的SQL,则会对收到的数据集进行“归并”然后输出到客户端。

SQL执行的过程,简单的说,就是把SQL通过网络协议发送给后端的真正的数据库上进行执行,对于MySQL Server 来说,是通过MySQL网络协议发送报文,并解析返回的结果,若SQL不涉及到多个分片节点,则直接返回结果,写入客户端的SOCKET流中,这个过程是非阻塞模式(NIO)。

DataNode是MyCAT的逻辑数据节点,映射到后端的某一个物理数据库的一个Database,为了做到系统高可用,每个DataNode可以配置多个引用地址(DataSource),当主DataSource被检测为不可用时,系统会自动切换到下一个可用的DataSource上,这里的DataSource即可认为是Mysql的主从服务器的地址。

在介绍mycat的主要组成部份时,先了解一下MYCAT的原理:MyCat技术原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。

1)数据库中间件数据被分到多个分片数据库后,应用如果需要读取数据,需要多个数据源的数据,如果没有数据库中间件,那么应用需要花大量的工作去处理分片后的数据访问问题,所以mycat 首先是一个数据库中间件,对于数据库能用的事务、数据处理由中间件处理。

数据库中间件的方式,使底层分布式数据对于上层应用而言是透明的,相当一个逻辑数据库。

2)逻辑表上面提到MYCAT是一个逻辑库,那上面的表即是逻辑表,具体包括:分片表:一个表被切分多个表部署在多个为上;非分片表:不需要分片的表ER表:父子关联的表,为了保证效率,数据上有关联的表需要放在一个库上,减少跨库访问全局表:变动不频繁、能用的配置、参数类型的表3)分片节点:数据切分到多个不同的数据库,切分后的数据库可以按主从方式组成一组,分片节点就是datanode4)分片规则:数据分片需要提前定好规则,即大表要被分成若干分片表,要有一定的规则。

5)常用的几个配置文件MyCAT目前通过配置文件的方式来定义逻辑库和相关配置:· MYCAT_HOME/conf/schema.xml中定义逻辑库,表、分片节点等内容;· MYCAT_HOME/conf/rule.xml中定义分片规则;· MYCAT_HOME/conf/server.xml中定义用户以及系统相关变量,如端口等。

5、重点概念介绍之:【实施难点】分库分表首先先讲讲分库分表的步骤:1)寻找大表:2)扩大拆分表范围:有些表的数据可能没有达到预定的大表数据量,但这些表与第一步提到的大表有关联查询,这些表需要一并找出来,然后定分片算法和拆分策略3)定分片策略:这项工作很重要不仅需要懂mycat的同学参与,还需要懂应用的同学参与进来。

以下是互联网上的一个案例以上面几点的说明:1)单表数据量在800以上视为大表2)针对业务特点,按经营区域、订单单位、管理城市、经营城市、店铺、时间等进行拆分3)对于部份字段拆表仍很大的情况,采用多个字段共同拆表接下来讲讲分片的细节:现在大部分表都不是孤立存在,以一个用户表与用户明细表为例,为了能够执行t_user与t_user_detail的联合查询,MyCAT将子表的存储位置依赖于主表,并且物理上紧邻存放,解决了JOIN的效率和性能问题,根据这一思路,提出了基于E-R关系的数据分片策略,子表的记录与所关联的父表记录存放在同一个数据分片上。

以t_user与t_user_detail例子为例,schema.xml中定义如下的分片配置:<table name="t_user" dataNode="dn$1-32"rule="mod-long"><childTable name="t_user_detail" primaryKey="id" joinKey="user_id"parentKey="user_id" /></tablet_user采用mod-long这个分片策略,分片在dn1-dn32上,t_user_detail依赖父表进行分片,两个表的关联关系为t_user_er_id=t_user.id。

于是数据分片和存储的示意图如下:这样一来,分片dn1-32上的t_user与hn1-32上的t_user_detail就可以进行局部的JOIN联合,再合并两个节点的数据即可完成整体的JOIN,试想一下,每个分片上t_user_detail表有1000万条,则10个分片就有1个亿,基于E-R映射的数据分片模式,基本上解决了80%以上的企业应用所面临的问题。

多对多的表通常情况下,有以下几种:l 主表+关系表+字典表l 主表A+关系表+主表B对于第一种,字典表可以被定义为“全局表”,字典表的记录规模可以在几千到几十万之间,基本是变动比较少的表,由MyCAT自动实时同步到所有分片,这样就可以三个表都做JOIN操作了。

对于第二种,需要从业务角度来看,关系表更偏向哪个表,即“A的关系”还是“B的关系”,来决定关系表跟从那个方向存储。

目前还暂时无法很好支持这种模式下的3个表之间的关联。

未来版本中将考虑将中间表进行双向复制,以实现从A-关系表以及B-关系表的双向关联查询。

关于全局表的实现方式,全局表在数据**或更新的时候,会自动在全局表定义的所有数据节点上执行相同的操作,以保证所有数据节点都一致,由于这个特性,全局表可以跟任何分片或不分片的表格进行JOIN操作。

对数据更新不频繁的,规模不是很大的(100万之内)的表都可以定义为MyCAT 的全局表,以实现用存储换性能的目标。

配置为:6、重点概念介绍之:MYSQL主从复制经验告诉我们数据库的性能问题往往出在SQL查询之上,正常情况下一个查询语句几十毫秒内可以完成,但查询则可能几秒,或几分钟以上。

在没有读写分离的系统上,一些复杂的SQL查询会导致数据库CPU爆表,系统陷入瘫痪,严重情况下可能导致数据库崩溃。

下面这个是MYSQL提供的主从数据库的机制:注:主从数据库数据的复制可以通过日志、SQL等方式进行同步、异步、半异步的方式处理。

相关文档
最新文档