java多线程    Java入门    vsftp    ftp    linux配置    centos    FRP教程    HBase    Html5缓存    webp    zabbix    分布式    neo4j图数据库    

分库分表的方式和方案

https://www.bilibili.com/video/BV1jJ411M78w

四种方式 垂直分库,水平分库,垂直分表,水平分表

垂直分表

常用的一个表,不常用的一个表,例子:商品数据,名称价格一个表,详情说明另一个表

好处:避免IO争抢,比如修改商品描述行锁,减少锁表概念 2.充分发挥热门数据操作效率

为什么大字段IO效率低

  1. 数据量本身大,需要更长读取时间
  2. 跨页,页是数据库存储单位,单页数据行越多,数据性能越好,大字段占空间大,单页数据行数少
  3. 数据库以行为单位加载到内存,这边表中长度短的且访问频率高的,内存能加载更多数据,命中率更高,减少IO

原则

  1. 不常用的放一个表
  2. text,blob大字段放附表
  3. 经常组合查询的放一个表

垂直分库

按业务把表分类,分布到不同的数据看上面,每个库可以放在不同的服务器上,核心理念:专库专用

好处:减少物理资源竞争

分布式业务的时候,专库专用,每个系统用自己的数据

  • 解决业务层面耦合,业务清晰
  • 能不同的业务数据分级管理,维护,监控,扩展
  • 高并发场景下,提升IO,数据库链接数,降低单机硬件资源瓶颈。

水平分库

把同一个表数据按一定规则拆分到不同的数据库中,每个库可以分到不同的服务器

垂直分库:不同的表,拆分到不同的库

好处:

  • 解决了单库大数据,高并发性能提升
  • 提高系统稳定性和可用性 《稳定性体现在IO冲突减少,锁定减少,可用性体现在部分库出问题,其他库依然可用

水平分表

在同一个数据库内,把同一个表的数据,按一定规则拆到不同的表

//对数据行拆分,不影响表结构,减少数据库实例,降低运维成本

好处:

  • 优化单表数据库过大性能问题
  • 避免IO争抢,降低锁表概率

最佳实践:系统设计阶段就合理的垂直分库分表,影响性能的时候,考虑的不是分库分表了,首先考虑缓存,读写分离,索引技术等方案,如果数据量极大,再考虑水平分库分表

问题:(P8)

  1. 事务一致性
  2. 跨节点关联查询
  3. 跨节点分页,排序,maxid count聚合函数
  4. 主键避重
  5. 公共表 比如地理区域表。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/
无特殊说明,文章均为月小升原创,欢迎转载,转载请注明本文地址,谢谢
您的评论是我写作的动力.

Leave a Reply