【IT168 资讯】由于数据量和并发访问量的急剧增加,数据库的连接遇到瓶颈,大数据量的访问速度慢、效率低的问题日益突出。对于海量数据的处理,非关系型数据库使用日益增多,如何部署分布式数据库,解决关系数据库和非关系数据库的共同使用以及大数据量的表访问效率低的问题已成为重中之重,通过把数据拆分到不同的数据库,在应用层对不同数据源整合的方案,是解决数据层性能问题的关键。
1 、数据拆分
随着网络流量爆发式的增长,业务拆分势在必行。拆分的业务形成一个个独立的子系统,RS10系统包括生产、物流、财务等子系统,每个子系统之间耦合度低,功能模块划分清晰,数据易于拆分。把生产、物流、财务等子系统的数据从存放在一个数据库服务器上拆分成存放在不同的数据库服务器上,通过中间数据层框架进行数据整合,使得业务层访问数据仍像访问单个数据库一样,不造成任何影响。业务分级与关联是业务划分、信息共享和资源整合的过程,使用数据层框架解决分布式数据库对业务分级和关联带来的影响。通过分库分表、读写分离,数据库的性能问题也迎刃而解。
数据拆分就是通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。数据拆分同时还可以提高系统的总体可用性,即使单台设备崩溃之后,只是总体数据的某部分不可用,而不是所有数据。
数据拆分根据其拆分规则,可以分为两种拆分模式。一种是按照不同的表拆分到不同的数据库(主机)之上,这种拆分称之为数据的垂直拆分;另外一种则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面,这种拆分称之为数据的水平拆分。
1.1 垂直拆分
数据的垂直拆分,也称纵向拆分,数据库是由很多个数据块组成,我们垂直的将这些数据块拆开,将他们分散到多台数据库主机上面。
一个架构设计较好的应用系统是由多个功能模块所组成的,而每一个功能模块所需要的数据对应到数据库中就是一个或者多个表,不同功能模块的数据存放于不同的数据库主机,可以有效避免跨数据库的连接存在。
垂直拆分的架构,如图1所示:
垂直拆分的优点表现在:
1、数据库的拆分简单明了,拆分规则明确;
2、应用程序模块清晰明确,容易整合;
3、数据维护方便易行,容易定位。
垂直拆分的缺点则表现在:
1、部分表关联无法在数据库级别完成,需要在程序中完成;
2、频繁访问超大数据量的表时会存在性能瓶颈;
3、事务处理更加复杂。
1.2 水平拆分
水平拆分是将访问频繁的大数据量的表,按照某种规则拆分到多个表中,每个表只包含一部分数据。
数据的水平拆分是按照数据行的拆分,将表中的某些行拆分到一个数据库,而另外的某些行拆分到其他的数据库中,且拆分时需按照特定的规则来进行,如根据公司号或者用户编码等进行拆分。基于用户的编码进行数据水平拆分,如图2所示:
水平拆分的优点表现在:
1、表关联能够在数据库端全部完成;
2、不存在超大型数据量和高负载的表;
3、事务处理相对简单;
水平拆分的缺点则表现在:
1、切分规则较复杂,很难抽象出一个满足能整个数据库的切分规则;
2、后期数据的维护难度有所增加,人为手工定位数据更困难;
3、应用系统各模块的耦合度较高,对数据的迁移拆分造成一定的困难。
1.3 联合拆分
在实际的应用场景中,系统的业务逻辑比较复杂,系统负载比较大,无法通过单独的一种数据拆分方式来实现,需要两种拆分方法结合使用,分布式数据库应采用垂直拆分与水平拆分联合的方式,如图3所示:
联合拆分的优点:
1、可以充分利用垂直拆分和水平拆分各自的优势而避免各自的缺陷;
2、系统扩展性得到最大化的提升。
联合拆分的缺点:
1、数据库系统架构比较复杂,维护难度更大;
2、应用程序架构相对更复杂。
2 、数据整合
数据库在经过垂直和(或)水平拆分被存放在不同的数据库之后,RS10系统最大的问题是访问业务数据,让业务数据得到较好的整合,因此,存在两种解决方案:
第一种方案,在每个子系统中配置和管理需要的数据源,直接访问各个数据库,在每个子系统内完成数据的整合;
第二种方案,使用数据层框架来统一管理所有的数据源,数据库集群对每个子系统透明。针对RS10,我们采用第二种解决方案来实现数据的整合。