发表于 2022-01-21 10:04:09 by 月小升
https://www.bilibili.com/video/BV1jJ411M78w
四种方式 垂直分库,水平分库,垂直分表,水平分表
垂直分表
常用的一个表,不常用的一个表,例子:商品数据,名称价格一个表,详情说明另一个表
好处:避免IO争抢,比如修改商品描述行锁,减少锁表概念 2.充分发挥热门数据操作效率
为什么大字段IO效率低
- 数据量本身大,需要更长读取时间
- 跨页,页是数据库存储单位,单页数据行越多,数据性能越好,大字段占空间大,单页数据行数少
- 数据库以行为单位加载到内存,这边表中长度短的且访问频率高的,内存能加载更多数据,命中率更高,减少IO
原则
- 不常用的放一个表
- text,blob大字段放附表
- 经常组合查询的放一个表
垂直分库
按业务把表分类,分布到不同的数据看上面,每个库可以放在不同的服务器上,核心理念:专库专用
好处:减少物理资源竞争
分布式业务的时候,专库专用,每个系统用自己的数据
- 解决业务层面耦合,业务清晰
- 能不同的业务数据分级管理,维护,监控,扩展
- 高并发场景下,提升IO,数据库链接数,降低单机硬件资源瓶颈。
水平分库
把同一个表数据按一定规则拆分到不同的数据库中,每个库可以分到不同的服务器
垂直分库:不同的表,拆分到不同的库
好处:
- 解决了单库大数据,高并发性能提升
- 提高系统稳定性和可用性 《稳定性体现在IO冲突减少,锁定减少,可用性体现在部分库出问题,其他库依然可用
水平分表
在同一个数据库内,把同一个表的数据,按一定规则拆到不同的表
//对数据行拆分,不影响表结构,减少数据库实例,降低运维成本
好处:
- 优化单表数据库过大性能问题
- 避免IO争抢,降低锁表概率
最佳实践:系统设计阶段就合理的垂直分库分表,影响性能的时候,考虑的不是分库分表了,首先考虑缓存,读写分离,索引技术等方案,如果数据量极大,再考虑水平分库分表
问题:(P8)
- 事务一致性
- 跨节点关联查询
- 跨节点分页,排序,maxid count聚合函数
- 主键避重
- 公共表 比如地理区域表。Sharding-JDBC 复制到每一个库
Sharding-JDBC 解决不了分布式事务问题
This entry was posted in
高并发与大数据 and tagged
值得记忆,
分库,
分表. Bookmark the
permalink.
月小升QQ 2651044202, 技术交流QQ群 178491360
首发地址:
月小升博客 –
https://java-er.com/blog/split-database-and-table/
无特殊说明,文章均为月小升原创,欢迎转载,转载请注明本文地址,谢谢
您的评论是我写作的动力.