zoukankan      html  css  js  c++  java
  • 分库分表

    随着业务的增长,数据库的数据量肯定也会随之增长,对MySQL来说,单表数据量在百万级别内存的读取效率还是可以的,但是当到达千万级别时效率会有较大降低,如果是复杂的查询操作,组合索引对于内存来说也是一笔很大的开销,这时就要从数据库层面优化,而常见的方式就是分库分表。

    一、垂直拆分

    表结构不一样

    垂直分库:专库专用,按照业务将表进行分类,分布到不同的数据库上面,这种拆分往往伴随着服务化的改造,按功能模块将原来强耦合的系统拆分成多个弱耦合的服务,如订单服务、商品服务、交易服务,每个服务都有自己的库,存放业务相关的表。

    垂直分表:这是针对数据表列进行拆分,表中列过多或者某些字段过长,占用空间较大,检索表的时候需要执行大量的IO,需要将长度较长的字段进行拆分,单独成表,用原表主键进行唯一标示。

    优点:拆分后业务清晰、数据维护简单;

               数据冷热分离、减少IO次数,提高检索效率;

    缺点:部分业务表无法jion,需要接口实现、提高业务复杂性;

               事务处理复杂;

    二、水平拆分

    分库分表,数据结构相同,按行数据以某种规则拆分到不同库或表中。

    拆分规则:取模:找到某个字段,以某个字段取模后尽可能平均分布在不同的表中;(数据尽可能均匀,扩展麻烦)

                      日期:按指定日期放到指定的表中;(扩展容易,数据可能不均匀)

    优点:解决单表单库数据量大、热点访问性能瓶颈的问题;

    缺点:拆分规则相对复杂;

               人为手工定位数据复杂;

               数据多次扩展和数据迁移难度大;

    小结:

    • 数据表垂直拆分: 降低单表复杂度
    • 数据库垂直拆分: 功能拆分
    • 水平拆分:分表:解决单表大数据量问题。分库:为了解决单库性能问题。
  • 相关阅读:
    NSURLSession学习笔记(一)简介
    Objective-C的属性和成员变量用法及关系浅析
    Object-C 中的Selector 概念
    IOS SEL (@selector) 原理及使用总结(一)
    iOS应用截屏
    iOS运行时工具-cycript
    iOS设备是否越狱的判断代码
    iphone——日期处理
    在iOS中使用ZBar扫描二维码
    使用Dockerfile docker tomcat部署
  • 原文地址:https://www.cnblogs.com/tilamisu007/p/9365101.html
Copyright © 2011-2022 走看看