软件开发数据库优化设计之负载均衡、读写分离、分库分表表分区概述
小白浏览:5652022-09-10 21:39:42本文累计收益:0我也要赚钱
一、数据库负载均衡

数据库的负载均衡跟应用程序完全不同,因为数据是唯一准确的,多个数据库里面的数据是一样的。

常见的Sql Server数据库负载均衡软件Moebius for Sql Server,实现原理如下图:

读的时候可以负载均衡,写基于触发器,写完第一个数据库之后,会触发日志写另外两个数据库。

只有一个IP,适合做查询业务多的。

同步效率不敢保证。中间层如果宕掉就都宕掉了。

二、读写分离

读写分离源于一个客观情况,二八原则,20%是写,80%是读。

数据库是硬盘存的,写很麻烦,把读和写操作分开(程序也是分开的),可以有效降低压力。

SqlServer读写分离方式

1、日志传送:

基于文件共享操作日志,从数据库根据日志完成数据更新。有延迟,不大用。

2、事务复制:

1)快照复制,定时做快照(snapshot),也是通过共享文件夹,定时传输,从数据库周期性恢复,及时性很差,不适合大批量修改的,适合做报表数据库。

2)事务复制:主流方式,延迟有几秒。

发布服务器(主数据库):

订阅服务器(从数据库):

复制代理(分发服务器):发布服务器的时候指定的,在发布服务器,叫推,如果在订阅服务器,叫拉。

三、分库分表表分区
1、分库:

垂直分库:

把一个数据库按照业务拆分成多个数据库,用多个服务器分担压力。如何解决一个业务需要多块数据?

不是一个程序同时访问多个数据库连接,一般是通过服务的形式提供。

如果解决事务?

最终一致性策略,A完成,写个任务,B完成,失败重试,彻底失败,回滚或者人工介入。

水平分库:

把数据库按照时间、地域分成多个数据库,多个库的结构是一样的。

2、分表:

垂直分表:把一张表分成两张表,表是硬盘里面的一个文件,文件越大,访问越慢。有些数据占空间,更新少,查询少,就适合垂直分出去。

水平分表:因为数据多了,体积大了,分完多个表的结构是一模一样的,可以按照时间分表,很多数据有实时性,过期的数据大部分情况下是没用的。按地域拆分,不同地域的数据是不冲突的。可按唯一标识分表,上亿条数据要存,按照Id取余分配。

按照唯一标识分有数据的更新如何解决?

根据ID定位表,再更新,查询不好解决,利用全文检索可以完成查询。

3、表分区:

数据库提供的功能,可以按照条件,把一张表的数据分开成不同的硬盘文件。

 

评论列表
发表评论
+ 关注