数据库读写分离

来源:互联网 发布:windows设置共享文件夹 编辑:程序博客网 时间:2024/04/29 09:40
如:Mysql

第一步:先做mysql的主从(Master/Slave Replication),实现数据同步
第二部:通过Amoeba来实现读写分离,也可以通过mysql proxy(比较麻烦)。

MySqL Proxy就是这么一个中间层代理,简单地说,MySql Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用Lua脚本,实现复杂的连接控制和过渡,从而实现读写分离和负载平衡。

对于应用来说,Mysql Proxy是完全透明的,应用则只是需要连接到MySql Proxy的监听端口即可。当然,这样Proxy机器可能成为单点失效,但完全可以使用多个Proxy机器作为冗余,在应用服务器的连接池配置中配置多个Proxy的连接参数即可。

MySql Proxy更强大的一项功能是实现“读写分离”,基本原理是让主数据库处理事务性查询,让从数据库处理SELECT查询,数据复制(Replication)用来把主库的变更同步到集群中的从库上。在生成MySql的M-S结构后,实现读写分离,需要使用MySql Proxy

主从复制原理:

主服务器将更新写入二进制文件,并维护文件的一个索引以跟踪日志循环。从服务器从在主服务器最后一次读取位置更新

如 Oracle :ActiveDataGuard


数据切分:
通过一系列的切分规则将数据水平分布到不同的DB或table中,在通过相应的DB路由 或者 table路由规则找到需要查询的具体的DB或者table,以进行Query操作。这里所说的“sharding”通常是指“水平切分”

数据切分可以是物理 上的,对数据通过一系列的切分规则将数据分布到不同的DB服务器上,通过路由规则路由访问特定的数据库,这样一来每次访问面对的就不是单台服务器了,而是N台服务器,这样就可以降低单台机器的负载压力。

数 据切分也可以是数据库内的 ,对数据通过一系列的切分规则,将数据分布到一个数据库的不同表 中,比如将article分为article_001,article_002等子表,若干个子表水平拼合有组成了逻辑上一个完整的article表,这 样做的目的其实也是很简单的

举个例子说明,比如article表中现在有5000w条数据,此时我们需要在这个表中增加(insert)一条新的数 据,insert完毕后,数据库会针对这张表重新建立索引,5000w行数据建立索引的系统开销还是不容忽视的。但是反过来,假如我们将这个表分成100 个table呢,从article_001一直到article_100,5000w行数据平均下来,每个子表里边就只有50万行数据,这时候我们向一张 只有50w行数据的table中insert数据后建立索引的时间就会呈数量级的下降,极大了提高了DB的运行时效率,提高了DB的并发量


分布式数据方案提供功能如下:

1)分库分表路由规则分库规则和路由规则(RouteRule简称RR)(N台机器组成了一个完整的DB)

2)引入读/写分离,提高数据的查询速度;

3)集群 Group

4)负载均衡 LoadBanlance



0 0
原创粉丝点击