架构中的横与纵

--数据库的水平划分和垂直划分

垂直划分:按照功能划分,把数据分别放到不同的数据库和服务器。

当一个网站开始刚刚创建时,可能只是考虑一天只有几十或者几百个人访问,数据库可能就个db,所有表都放一起,一台普通的服务器可能就够了,而且开发人员也非常高兴,而且信心十足,因为所有的表都在一个库中,这样查询语句就可以随便关联了,多美的一件事情。但是随着访问压力的增加,读写操作不断增加,数据库的压力绝对越来越大,可能接近极限,这时可能人们想到增加从服务器,做什么集群之类的,可是问题又来了,数据量也快速增长。

这时可以考虑对读写操作进行分离,按照业务把不同的数据放到不同的库中。其实在一个大型而且臃肿的数据库中表和表之间的数据很多是没有关系的,或者更加不需要(join)操作,理论上就应该把他们分别放到不同的服务器。例如用户的收藏夹的数据和博客的数据库就可以放到两个独立的服务器。这个就叫垂直划分(其实叫什么不重要)。

image

水平划分:一表拆分为多表

image

引申,通常所说的分库分表,针对一张表进行分库分表,可以划归为上面的水平划分,分库和分表水平划分的长度同而已

分表--》单库中对表水平切分

分库--》针对同一张表在数据库维度进行水平切分

对于海量数据的数据库

如果是因为表多而数据不多,这时候适合使用垂直切分,即把关系紧密(比如同一模块)的表切分出来放在一个server上。

如果表并不多,但每张表的数据非常多,这时候适合水平切分,即把表的数据按某种规则(比如按ID散列)切分到多个数据库(server)上。

当然,现实中更多是这两种情况混杂在一起,这时候需要根据实际情况做出选择,也可能会综合使用垂直与水平切分。

--扩容

水平扩展:

Scale Out(也就是Scale horizontally)横向扩展,向外扩展
通常理解的加硬件,加机器。

纵向扩展:

Scale Up(也就是Scale vertically)纵向扩展,向上扩展
通常理解的加机器配置,如加内存、加CPU
举例:

 

095722_C4c5_999023.png

其中,横向扩展(X-axis scaling)通过复制的方式。纵向扩展(Y-axis scaling)通过将应用功能分解,每个服务运行的代码都不同。最后一个Z-axis scaling通过将数据划分成多块,并由多个服务使用。每个服务上运行的代码是一致的,而所负责的数据分区则不同。如果你感兴趣,可以看The Scale Cube这篇文章(上面的图片出于此)。

最后这段话引用自:http://blog.leapoahead.com/2015/10/07/docker-lessons-learned-md/

 

转载于:https://my.oschina.net/zjg23/blog/827577

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值