数据库集群布置(3) --- mycat中间件简介

1 mycat简介(推荐"分布式数据库架构及企业实践—基于mycat中间件"一书)

1.一个彻底开源的,面向企业应用开发的大数据库集群
2.支持事务、ACID、可以替代MySQL的加强版数据库
3.一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
4.一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
5.结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
6.一个新颖的数据库中间件产品

2 实战中mycat解决的问题

2.1 发现问题
单库单表中的数据,随着时间的推移数据量的增多,数据操作CRUD的开销会越来越大.
同时一台服务器的资源是有限的数据不可能无限量的增加
2.2 解决问题 -- 分库,分表(我这里是针对数据库表)
以商品的id,商品的编号,商品的详细描述为例:product:proId,productName,proDetail 
1.垂直切分
	效果: 
		productSimple:proId,productName
		productDetail:proId,proDetail
垂直切分:顾名思义就是按照实际的需求将一张大表例如有100个字段,将其切分成若干个表,以一个字段(proId)进行
一一对应的切分.思路(将经常用到字段用到一张表,数据量大不常用的字段分到领一张表等等)
发现问题:将表进行垂直切分后,能解决一部分问题,但是随着时间的推移表的数据行还是不断的切分,如500万行数据,
1000万行数据.....,到这时CRUD的开销大的问题依然还是没有解决.这就引出下一个解决方案,水平切分
2.水平切分
	效果(原表:product:proId,productName,proDetail(1亿条数据)): 
	 product:proId,productName,proDetail(按id,每1000万条放到一张表),这样就会有10张同样的表(副本)
水平切分:将表按照一定的规则(如按id量,hash等)将数据放到副表中
发现问题:将数据按一定规则中水平切分后,那么查询数据时,我该查询那个副本呢?逻辑的判断,将表数据集中等的花销,自己实现都比较的困难,所以就引出了本文的主题----mycat

3 mycat相关概念

3.1 逻辑库(schema)

通常对实际应用来说,并不需要知道中间件的存在,业务开发人员只需要知道数据库的概念,
所以数据库中间件可以被看做是一个或多个数据库集群构成的逻辑库。

3.2 逻辑表(table)

既然有逻辑库,那么就会有逻辑表,分布式数据库中,对应用来说,读写数据的表就是逻辑表。
逻辑表,可以是数据切分后,分布在一个或多个分片库中,也可以不做数据切分,不分片,只有一个表构成。

分片表:是指那些原有的很大数据的表,需要切分到多个数据库的表,这样,每个分片都有一部分数据,
所有分片构成了完整的数据。 总而言之就是需要进行分片的表。

非分片表:一个数据库中并不是所有的表都很大,某些表是可以不用进行切分的,非分片是相对分片表来说的,
就是那些不需要进行数据切分的表。

3.3 分片节点(dataNode)

数据切分后,一个大表被分到不同的分片数据库上面,
每个表分片所在的数据库就是分片节点(dataNode)。

3.4 节点主机(dataHost)

数据切分后,每个分片节点(dataNode)不一定都会独占一台机器,同一机器上面可以有多个分片数据库,
这样一个或多个分片节点(dataNode)所在的机器就是节点主机(dataHost),
为了规避单节点主机并发数限制,尽量将读写压力高的分片节点(dataNode)
均衡的放在不同的节点主机(dataHost)。

3.5 分片规则(rule)

前面讲了数据切分,一个大表被分成若干个分片表,就需要一定的规则,
这样按照某种业务规则把数据分到某个分片的规则就是分片规则,数据切分选择合适的分片规则非常重要,
将极大的避免后续数据处理的难度。

你可能感兴趣的:(sql总结)