zoukankan      html  css  js  c++  java
  • 水平切分和垂直切分的理解

    前言

    做数据库分表的时候,总是能看到水平切分、垂直切分,但是并不能理解何为水平、何为垂直。仅此做个记录。

    1.切分

    一般情况下说的水平切分、垂直切分,都是指的数据库层面的。

    随着业务量的增加,数据量肯定快速增长,拿Mysql来说,单表数据量在百万级内读取效率还是可以的,可是一旦达到千万级,性能会有较大的降低。如果是复杂的搜索,那么组合索引对于内存来说也是一笔很大的开销。这个时候就需要从数据库层面来进行优化了。

    普遍采用的方式就是数据库 垂直切分+ 水平切分的方式来进行改进。

    1.1垂直切分

    垂直拆分:原来一个表的信息,拆分到两个或者多个表中,通过主键来进行关联。(垂直拆分列,列数据拆分到不同表中)
    垂直切分的优点

    • 数据库的拆分简单明了,拆分规则明确;
    • 应用程序模块清晰明确,整合容易;
    • 数据维护方便易行,容易定位;


    垂直切分的缺点

    • 部分表关联无法在数据库级别完成,需要在程序中完成;
    • 单表大数据量仍然存在性能瓶颈;
    • 事务处理相对更为复杂;
    • 切分达到一定程度之后,扩展性会遇到限制;

    1.2水平切分

    水平切分:把一个表的数据按照某种规则划分到不同表或数据库里。(水平拆分行,行数据拆分到不同表中)

    水平切分的优点

    • 解决单表大数据量性能遇到瓶颈的问题;
    • 应用程序端整体架构改动相对较少;
    • 事务处理相对简单;
    • 只要切分规则能够定义好,基本上较难遇到扩展性限制;


    水平切分的缺点

    • 切分规则相对更为复杂,很难抽象出一个能够满足整个数据库的切分规则;
    • 后期数据的维护难度有所增加,人为手工定位数据更困难;
    • 应用系统各模块耦合度较高,可能会对后面数据的迁移拆分造成一定的困难。

    2.扩展

    一般情况下说的水平扩展、垂直扩展,都是指的服务层面的。

    当一个开发人员提升计算机系统负荷时,通常会考虑两种方式垂直扩展和水平扩展。选用哪种策略主要依赖于要解决的问题 以及系统资源的限制。

    2.1垂直扩展

    在垂直扩展模型中,想要增加系统负荷就意味着要在系统现有的部件上下工夫,即通过提高系统部件的能力来实现。

    比如增加机器的内存,提高单机处理能力,拆分功能到不同的机器上部署等等。

    垂直扩展旨在提高自身效率,但总会遇到自身的瓶颈。

    2.2水平扩展

    在水平扩展模型中,通过增加更多的系统成员来实现。也就是通常所说的加机器。

    当你的大量请求并发的时候,可以通过分布式的方式,让请求均匀的分布到不同的机器上,减小压力。

    总结

    简而言之:

    垂直扩展:拆分功能为小功能,来转移压力的发生。

    水平扩展:复制相同的表、库、服务器来共同承担压力。

  • 相关阅读:
    函数式宏定义与普通函数
    linux之sort用法
    HDU 4390 Number Sequence 容斥原理
    HDU 4407 Sum 容斥原理
    HDU 4059 The Boss on Mars 容斥原理
    UVA12653 Buses
    UVA 12651 Triangles
    UVA 10892
    HDU 4292 Food
    HDU 4288 Coder
  • 原文地址:https://www.cnblogs.com/selinamee/p/6873969.html
Copyright © 2011-2022 走看看