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

    前言

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

    1.切分

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

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

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

    1.1垂直切分

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

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


    垂直切分的缺点

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

    1.2水平切分

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

    水平切分的优点

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


    水平切分的缺点

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

    2.扩展

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

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

    2.1垂直扩展

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

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

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

    2.2水平扩展

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

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

    总结

    简而言之:

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

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

  • 相关阅读:
    linux advancing program signal [copy]
    advacing lnux program zombie process [copy]
    Devpress.XtraGrid.GridControl 笔记(转载)
    嵌入别的程序到winform(C#)
    GridControl控件使用小结
    .net 时间类型的一小bug ToShortDateString()
    gridControl repositoryItemLookUpEdit控件使用
    .net架构的最后思考(箴言)
    VS项目引用,无法更新
    关于ZendOptimizer和wamp的phpmyadmin冲突问题
  • 原文地址:https://www.cnblogs.com/selinamee/p/6873969.html
Copyright © 2011-2022 走看看