通过某种特定的条件,将存放在同一个数据库中的数据分散存放到多个数据库上,实现分布存储,通过路由规则路由访问特定的数据库,这样一来每次访问面对的就不是单台服务器了,而是N台服务器,这样就可以降低单台机器的负载压力。提示:sqlserver 2005版本之后,可以友好的支持“表分区”。

  垂直(纵向)拆分:是指按功能模块拆分,比如分为订单库、商品库、用户库...这种方式多个数据库之间的表结构不同。

  水平(横向)拆分:将同一个表的数据进行分块保存到不同的数据库中,这些数据库中的表结构完全相同。


▲(纵向拆分)


▲(横向拆分)

  1,实现原理:使用垂直拆分,主要要看应用类型是否合适这种拆分方式,如系统可以分为,订单系统,商品管理系统,用户管理系统业务系统比较明的,垂直拆分能很好的起到分散数据库压力的作用。业务模块不明晰,耦合(表关联)度比较高的系统不适合使用这种拆分方式。但是垂直拆分方式并不能彻底解决所有压力问题,例如 有一个5000w的订单表,操作起来订单库的压力仍然很大,如我们需要在这个表中增加(insert)一条新的数据,insert完毕后,数据库会针对这张表重新建立索引,5000w行数据建立索引的系统开销还是不容忽视的,反过来,假如我们将这个表分成100个table呢,从table_001一直到table_100,5000w行数据平均下来,每个子表里边就只有50万行数据,这时候我们向一张只有50w行数据的table中insert数据后建立索引的时间就会呈数量级的下降,极大了提高了DB的运行时效率,提高了DB的并发量,这种拆分就是横向拆分

  2,实现方法:垂直拆分,拆分方式实现起来比较简单,根据表名访问不同的数据库就可以了。横向拆分的规则很多,这里总结前人的几点,

  (1)顺序拆分:如可以按订单的日前按年份才分,2003年的放在db1中,2004年的db2,以此类推。当然也可以按主键标准拆分。

  优点:可部分迁移

  缺点:数据分布不均,可能2003年的订单有100W,2008年的有500W。

  (2)hash取模分: 对user_id进行hash(或者如果user_id是数值型的话直接使用user_id的值也可),然后用一个特定的数字,比如应用中需要将一个数据库切分成4个数据库的话,我们就用4这个数字对user_id的hash值进行取模运算,也就是user_id%4,这样的话每次运算就有四种可能:结果为1的时候对应DB1;结果为2的时候对应DB2;结果为3的时候对应DB3;结果为0的时候对应DB4,这样一来就非常均匀的将数据分配到4个DB中。

  优点:数据分布均匀

  缺点:数据迁移的时候麻烦;不能按照机器性能分摊数据 。

  (3)在认证库中保存数据库配置

  就是建立一个DB,这个DB单独保存user_id到DB的映射关系,每次访问数据库的时候都要先查询一次这个数据库,以得到具体的DB信息,然后才能进行我们需要的查询操作。

  优点:灵活性强,一对一关系

  缺点:每次查询之前都要多一次查询,会造成一定的性能损失。

数据库优化-水平拆分 垂直拆分相关推荐

  1. 水平拆分 垂直拆分 分表 什么意思

    1,水平分割: 首先 :表的记录很多  根据一列或多列数据的值把数据行放到两个独立的表中. 例:QQ的登录表.假设QQ的用户有100亿,如果只有一张表,每个用户登录的时候数据库都要从这100亿中查找, ...

  2. 分布式系统水平和垂直拆分

  3. 数据库垂直拆分 水平拆分

    转载:https://www.cnblogs.com/firstdream/p/6728106.html 数据库拆分简单来说,就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数据库中的数据分 ...

  4. mysql数据库垂直切分_mysql数据库的水平拆分与垂直拆分

    近端时间在面试,发现很多面试官或者面试都把数据的水平拆分合垂直拆分给搞混了,今天特意写了一篇博客来说说水平拆分和垂直拆分希望对程序猿们有所帮助. 数据库水平与垂直拆分: 垂直(纵向)拆分:是指按功能模 ...

  5. 数据库的垂直拆分和水平拆分

    2019独角兽企业重金招聘Python工程师标准>>> 当我们使用读写分离.缓存后,数据库的压力还是很大的时候,这就需要使用到数据库拆分了. 数据库拆分简单来说,就是指通过某种特定的 ...

  6. 数据库表的垂直拆分/水平拆分

    垂直拆分 1. 垂直拆分的定义 所谓的垂直拆分,就是把原来一个有很多列的表拆分成多个表,这解决了表的宽度问题. 2. 垂直拆分的原则: 1. 把不常用的字段表单独存放到一个表中. 2. 把大字段独立存 ...

  7. 数据库和数据库表的水平拆分和垂直拆分

    数据库垂直拆分(按照功能模块拆分) 数据库水平拆分(根据某种规则划分,比如对id取余) 数据库表的垂直拆分 数据库表的水平拆分 数据拆分前其实是要首先做准备工作的,然后才是开始数据拆分 第一步:采用分 ...

  8. MYSQL水平拆分与垂直拆分

    目前很多互联网系统都存在单表数据量过大的问题,这就降低了查询速度,影响了客户体验.为了提高查询速度,我们可以优化sql语句,优化表结构和索引,不过对那些百万级千万级的数据库表,即便是优化过后,查询速度 ...

  9. 数据切分 垂直切分、垂直拆分与水平拆分的优缺点

    数据切分 垂直切分 关于数据库的水平切分和垂直切分的一些概念垂直拆分垂直拆分就是要把表按模块划分到不同数据库表中(当然原则还是不破坏第三范式),这种拆分在大型网站的演变过程中是很常见的.当一个网站还在 ...

  10. mysql水平拆分查询_MYSQL水平拆分与垂直拆分

    目前很多互联网系统都存在单表数据量过大的问题,这就降低了查询速度,影响了客户体验.为了提高查询速度,我们可以优化sql语句,优化表结构和索引,不过对那些百万级千万级的数据库表,即便是优化过后,查询速度 ...

最新文章

  1. hbase,根据前缀匹配进行搜索并分批次获取结果
  2. RIP协议无法适应网络环境
  3. Android-简单拨号器案例
  4. 程序挂起时自动创建转储文件
  5. 编程语言对比 循环语句
  6. cmake 安装_linux下安装cmake
  7. Java 日期格式工具类
  8. MATLAB VMD分解 变分模态分解 信号预处理 特征提取 及其改进算法
  9. 拼多多运营模式分析 | 如何杀出电商重围?
  10. somachine3.1安装包和安装方法
  11. Tesseract-OCR识别 学习(一)命令识别
  12. 多元线性回归方差分析表理解
  13. java弹窗代码_JAVA的弹窗怎么做?
  14. yolo系列的head模块
  15. linux的sssd服务,Linux sssd 认证
  16. mybatis类型转换器处理PostGis数据库geometry类型转换
  17. 3DMAX解析愤怒的小鸟
  18. 门户通专访月光博客:第一博客是如何打造成的
  19. 每日一道 LeetCode (16):求 x 的平方根
  20. zabbix web 检测

热门文章

  1. 递归计算二叉树的叶子节点个数
  2. 用递归法计算从n个人中选择k个人的组合数
  3. pcb板可挖孔吗_PCB板上的过孔的种类及打孔注意事项
  4. SRNTT:Image Super-Resolution by Neural Texture Transfer
  5. android studio for android learning (十) android之activity的启动和关闭
  6. 【Gym - 101234J】Zero Game【单调队列】
  7. 微信小程序开发04-打造自己的UI库
  8. IntelliJ IDEA,WebStorm,PyCharm 2017+缓存位置修改
  9. 【UnityEditor】根据枚举的不同显示各自对应的内容
  10. 如何使用Python3连接MySQL