典型数据库架构设计
以用户中心为例,当数据库访问量增大的时候,我们设计可以通过数据库主从分离进行分组,然后通过分片减小单库的数据量,特定需求下可以通过垂直切分减少单库的数据量。
水平切分
水平切分就是库和库之间不关联,数据库结构相同,并集为全局数据。
算法常用的分片算法有范围法和哈希法
- 范围法 uid为0到一千万的落到s1上,1千万到2千万的落到s2上
- 哈希法 uid%2=1的落到s1上,uid%2的落到s2上
存在的问题
-
水平切分,能够减少单库的数据量,但是还是会存在数据库读写锁冲突的问题
-
数据库一旦挂了,就没了。。
-
读写不分离的情况下读写一个库,性能很低
解决:数据库主从的方式
-
主库专注于写从库专注于读,
-
多个数据库实例数据结构完全相同,存储的数据也是相同的主从同步通过Binlog方式同步
垂直切分
垂直切分的特点是实例之间没有关系,表的结构不相同,存储的数据之间必有一列为交集,所有数据构成全量数据
- 长度较短的,访问频率比较高的放在一起。长度比较长(登录名,密码,性别,年龄)
- 访问频率比较低的放在一起(自我介绍,个性签名)
最终建构图如下所示
知悉
仅仅为个人学习笔记个人总结,参考文章链接如下
https://zhuanlan.51cto.com/columnlist/shenj/#