系列文章是博主对沈剑的《架构师训练营》分享内容的个人笔记总结,原内容公众号“成为架构师”。
什么是垂直拆分
垂直拆分就是将一张大表按照业务拆分成几个小表,小表字段的并集就是原先的大表。(垂直拆分并不是某种特殊的手段,倒不如说它在大部分业务场景都是应该实施的操作)
垂直拆分的方法
垂直拆分的方法论,尽量把:
- 长度较短
- 访问频率较高
- 经常一起访问
的属性放在主表里。
为什么要将字段短,访问频率高的属性放到一个表内?原因是:数据库缓冲池,逻辑上,以row为单位缓冲数据(物理上是以数据页)
举个例子,假设缓冲池1G:
- user表,1行记录为1k,只能缓存100w行数据
- user_base表,1行记录为0.1k,能缓存1000w行记录,user_ext表,1行记录为0.9k,但访问频率较低
对于垂直拆分,我们在业务上一个典型的例子就是List显示和详细信息的显示。
数据库高可用
数据库的高可用设计在方法论上也是:冗余+故障自动转移,但是冗余会有数据一致性的问题。
对于站点、服务这些来说,它们都是无状态的,而数据库天然就是有状态的,它保存的就是状态。
读库的高可用增加读库节点,然后由连接池来完成即可。
写库的高可用可以使用keppalibed + VIP的方式,但是这样只有50%的效率,也就是图片右边的方式。
而左边,双主都是对外提供写入接口的,它们之间会有数据同步和数据不一致性问题
其中涉及的主从一致性、主主一致性问题将在下一篇关于一致性问题的文章中进行讨论。
上一篇回顾:【成为架构师3-8】数据库:如何提升数据库的读性能
下一篇更精彩:【成为架构师3-10】数据库:主从一致性和主主一致性