yeyedeyatou 2013-01-22
数据库的扩展有两种:
第一是横向扩展:Scale out,增加服务器(增加处理节点提供整体处理能力)
第二是水平扩展:Scale up,升级现有服务器配置(提高节点处理能力,如增加内存、cpu等)
集群主要是指数据库的横向扩展
其中在集群中最主要的技术是数据的复制:replication
mysql的复制:
主要解决几个问题:数据的分布,负载均衡,备份,高可用性和容错
主要的过程分为三步:
首先是在master在提交事务之前会写日志,将操作数据库的操作记录日志
第二是slave会起一个io线程获取master里的日志(此时master也会起io线程)写入slave的中继日志
第三是slave起sql线程将日志读取事件并执行,完成复制
其中,slave也是可以作为其他数据库的master,此时需要在read之前将写slave自己的二进制日志
(如果你设置log_slave_updates,slave可以是其它slave的master,从而扩散master的更新)
数据库
垂直切分:根据业务分不同模块,相近的功能模块的放在相同的数据库里
水平切分:基于一张表里有大数据量时,可以将数据分到不同的数据表里,这样在写和读以及索引功能有效提高
主从分离:主写从读,MySQL Proxy机制实现读写分离
集群,群节点的可用性探测机制 ,或者是可用性的数据推送机制
水平切分之后,通过分表的路由规则,例如hash算法分表,可以找到逻辑上的数据库,到
物理上数据库之前还需要使用负载均衡作用,例如,写操作对均衡到master数据库,
读操作会均衡到slave数据库中,均衡有两种:随机负载均衡和加权负载均衡
数据库连接池负责分配、管理和释放数据库连接
连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,
而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。
而连接的建立、断开都由连接池自身来管理。
cobar client 轻量级分布式数据访问层,基于ibatis和spring框架实现
支持垂直和水平数据切分数据库集群的访问
关于cobarclient的使用主要是在ibatis.xml中配置,
首先配置基本的使用cobar的说明:
使得应用程序依赖于cobaeclient的cobarSqlMapClientTemplate以及使用multipleDataSourcesTransactionManager
其次是关于数据分区多数据源的依赖管理说明:
主要是dataSources
在这里主要是配置数据源信息,其中包括唯一标关于识,涉及到启用路由协议是读写分离的数据库标识,再一个是关于主要目标数据源和备用数据源与目标数据源一致
第三个配置是数据路由相关配置,主要是指定路由协议的路径和文件名
具体说明:
http://www.open-open.com/doc/view/64671baa9d6a4f30849e1b1c6c0b3ba8