使用分库分表时,主要有垂直拆分水平拆分两种拆分模式,都属于物理空间的拆分

分库分表方案:只分库、只分表、分库又分表。

垂直拆分:由于表数量多导致的单个库大。将表拆分到多个库中。

水平拆分:由于表记录多导致的单个库大。将表记录拆分到多个表中。

一,垂直拆分

垂直拆分又称为纵向拆分垂直拆分是将表按库进行分离或者修改表结构按照访问的差异将某些 列拆分出去。应用时有垂直分库和垂直分表两种方式,一般谈到的垂直拆分主要指的是垂直分库。

垂直分库:

垂直分表:将一张表中不常用的字段拆分到另一张表中,从而保证第一张表中的字段较少,避免 出现数据库跨页存储的问题,从而提升查询效率。

可解决问题:一个表中字段过多,还有有些字段经常使用,有些字段不经常使用,或者还有text等字段信 息。可以考虑使用垂直分表方案。

垂直拆分优点:

  1. 拆分后业务清晰,拆分规则明确;
  2. 易于数据的维护和扩展;
  3. 可以使得行数据变小,一个数据块 (Block) 就能存放更多的数据,在查询时就会减少 I/O 次 数;
  4. 可以达到最大化利用 Cache 的目的,具体在垂直拆分的时候可以将不常变的字段放一起,将经常改变的放一起;
  5. 便于实现冷热分离的数据表设计模式。

垂直拆分缺点:

  1. 主键出现冗余,需要管理冗余列;
  2. 会引起表连接 JOIN 操作,可以通过在业务服务器上进行 join 来减少数据库压力,提高了系统的复杂度;
  3. 依然存在单表数据量过大的问题;
  4. 事务处理复杂。

用例: 职位基本信息表与职位详情表进行垂直拆分,从原本职位表中垂直分表

二,水平拆分

水平拆分又称为横向拆分。 相对于垂直拆分,它不再将数据根据业务逻辑分类,而是通过某个字 段(或某几个字段),根据某种规则将数据分散至多个库或表中,每个表仅包含数据的一部分,下面的图为使用类Hash算法去拆分的过程。

水平分表是将一张含有很多记录数的表水平切分,不同的记录可以分开保存,拆分成几张结构相同 的表。如果一张表中的记录数过多,那么会对数据库的读写性能产生较大的影响,虽然此时仍然能 够正确地读写,但读写的速度已经到了业务无法忍受的地步,此时就需要使用水平分表来解决这个 问题。

水平拆分优点:

  1. 拆分规则设计好,join 操作基本可以数据库做;
  2. 不存在单库大数据,高并发的性能瓶颈;
  3. 切分的表的结构相同,应用层改造较少,只需要增加路由规则即可;
  4. 提高了系统的稳定性和负载能力。

水平拆分缺点:

  1. 拆分规则难以抽象;
  2. 跨库Join性能较差;
  3. 分片事务的一致性难以解决;
  4. 数据扩容的难度和维护量极大。

用例:电商中的商家的订单表 ,若在一个库中分表存储,还是存在IO瓶颈,如若数据量很大,可以将单个表拆分了分到不同的服务器中去,但是分到不同的服务器中去之后,需要考虑如何高效的进行数据获取,如果每次查询都要跨越多个节点则会影响查询的效率。

分库之后的问题:

1,事务问题:一次投递需要插入两条记录,且分布在不同的服务器上,数据需要保障一致性。

 2,跨库联合查询的问题。

 3,额外的数据管理负担和数据运算压力:数据库扩容、维护成本变高

三,垂直拆分 & 水平拆分

水平拆分:解决表中记录过多问题。

垂直拆分:解决表过多或者是表字段过多问题


附: 参考资料《MySQL技术内幕 InnoDB存储引擎》

Mysql 分库分表相关推荐

  1. mysql分库分表分页查询语句_MySQL分库分表分库后的查询(8th)

    前言 这边我们以使用python程序要展示一下再分库分表后,我们需要如何对数据库进行操作. python操作数据库 我们这边还是沿用之前的那5中:场景1:购买者下订单#!/usr/bin/env py ...

  2. 企业Shell实战-MySQL分库分表备份脚本

    本文来自 http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.ht ...

  3. php+mysql分库分表的哈希(hash)算法

    转自:http://itlab.idcquan.com/linux/PHP/905174.html php+mysql分库分表的哈希(hash)算法: 我们在实际开发的时候,难免会遇到大访问量的问题, ...

  4. 使用EntityFrameworkCore实现Repository, UnitOfWork,支持MySQL分库分表

    昨天(星期五)下班,19:00左右回到家,洗个澡,然后20:30左右开始写代码,写完代码之后,上床看了<生活大爆炸10季>17.18两集,发现没有更新到19集,瞄了一眼手机,竟然已经是凌晨 ...

  5. mysql 分库分表 建表,mysql 分库分表 建表MySQL常用操作

    通过命令行启动.停止MySQL服务器: start: net start mysql stop: net stop mysql 连接MySQL服务器:\>mysql -h127.0.0.1 -u ...

  6. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变...

    [Mysql主从复制] 解决的问题 数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了. 负载均 ...

  7. 如何彻底解决烦人的 MySQL 分库分表问题?写一个更好的数据库!

    作者 | 黄东旭 责编 | 郭   芮 我还清楚记得,五年前的这个时候,当时还在豌豆荚,午后与刘奇和崔秋的闲聊关于未来数据库的想象,就像一粒种子一样,到了今天看起来也竟枝繁叶茂郁郁葱葱,有点感慨.按照 ...

  8. 超实用的mysql分库分表策略,轻松解决亿级数据问题

    超实用的mysql分库分表策略,轻松解决亿级数据问题 参考文章: (1)超实用的mysql分库分表策略,轻松解决亿级数据问题 (2)https://www.cnblogs.com/xichji/p/1 ...

  9. MySQL分库分表多维度查询——比较好的方法

    转载自:http://blog.itpub.net/29254281/viewspace-2086198/ MySQL分库分表,一般只能按照一个维度进行查询. 以订单表为例, 按照用户ID mod 6 ...

  10. MySQL运维(二)MySQL分库分表概念及实战、读取分离详解

    MySQL运维(二)MySQL分库分表详解.读取分离详解 1.MySQL分库分表相关概念 1.1 分库分表概念 1.1.1 分库的原因 分库:就是一个数据库分成多个数据库,部署到不同机器. 如果业务量 ...

最新文章

  1. Java学习总结:7
  2. 多传感器融合(算法)综述
  3. MVC4学习笔记(二)- MVC设计实例,5分钟内完成你的Mvc项目
  4. WCFAppFabric :异常消息: 内存入口检查失败
  5. python 检测四边形,并矫正
  6. python 中文乱码问题解决方案
  7. RecyclerView添加头条目显示空白的解决方案
  8. javaweb学习总结(十四)——JSP原理
  9. android fitsSystemWindows的使用
  10. 学机械也想转嵌入式?
  11. jQuery遍历not的用法
  12. 华为nova4是不是鸿蒙系统,华为nova 4手机什么时候可以升级鸿蒙系统?鸿蒙系统nova4升级时间介绍...
  13. HDU 5773 The All-purpose Zero(O(nlgn)求LIS)
  14. Silverlight中使用Timer的方法
  15. ITIL 4Foundation题目-2
  16. 100行代码做一个周杰伦歌词生成器--python
  17. KusionStack 是什么?
  18. 《重构:改善既有代码的设计》读书笔记(上)
  19. ubuntu下使用github安装R Packages[已解决]
  20. 【英语六级】【仔细阅读】(1)

热门文章

  1. 服装ERP系统在工业4.0“+”互联网+的处境
  2. NC 供应链金额计算
  3. 树莓派安装raspberry os,两种方式连接树莓派,并设置静态ip开机自动连接WiFi
  4. 年薪50万的百度云资源分享
  5. 2018百度指数采集方法与工具
  6. 土木向计算机转专业,【土木转行·续集】土建类同学转行计算机,什么时间转最合适?...
  7. react这几年重大意义的变化
  8. vscode无法打开源文件的问题
  9. oracle dg 状态检查
  10. 移远BC26模组使用MQTT协议接入阿里云(NB-IoT专栏—进阶篇4)