zoukankan      html  css  js  c++  java
  • 水平拆分和垂直拆分理解(未完)

    1. 切分

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

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

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

    1.1 垂直拆分

    数据库的垂直拆分: 对业务表进行分类,不同的业务表划分到不同的数据库里。这种形式的拆分往往是便随着服务化改造,按功能模块将原来强耦合的系统拆分为多个弱耦合的服务,此时往往就会进行数据库的垂直拆分。

    数据表的垂直拆分: 是针对于数据表列的拆分,把一张列比较多的表拆分为多张表。比如可以将

    垂直拆分的优点:

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

    垂直拆分的缺点:

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

    水平拆分

    水平拆分:分库分表,把一个表的数据按照某种规则化分到不同表或数据库里。(水平拆分 是按照行数据拆分)。 拆分规则:取模、年份等。

    水平拆分的优点:

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

    水平拆分缺点:

    • 拆分规则相对更复杂,很难抽象出一个能够满足整个数据库的切分规则。
    • 后期数据的维护难度有所增加,人为手工定位数据更困难。
    • 产品逻辑将变复杂。比如按年来进行历史数据归档拆分,这个时候在页面设计上就需要约束用户必须要先选择年,然后才能进行查询。

    总而言之:

    1. 数据表垂直拆分: 单表复杂度。
    2. 数据库垂直拆分: 功能拆分。
    3. 水平拆分:分表:解决单表大数据量问题。 分库:为了解决单库性能问题。

    https://www.cnblogs.com/beyondbit/p/6973199.html
    https://www.cnblogs.com/happyday56/p/3862804.html
    http://blog.csdn.net/mchdba/article/details/46278687

  • 相关阅读:
    html 父容器和子容器通信
    5.7.13mysql 无法登陆
    c# foreach枚举器
    WPF bitmap转bitmapimage 使用 CreateBitmapSourceFromHBitmap内存泄漏
    c# 另存为excel
    CRC循环校验码
    一般处理程序
    DSS->数仓->数据集市->数据湖->数据中台->商业智能
    常见的消息中间件对比
    Dockerfile详解
  • 原文地址:https://www.cnblogs.com/boothsun/p/7877781.html
Copyright © 2011-2022 走看看