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

    1、为什么要分库分表

    当一张表的数据达到几千万时,查询一次所花的时间会变长。这时候,如果有联合查询的话,可能会卡死在那儿,甚至把系统给拖垮。

    而分库分表的目的就在于此:减小数据库的负担,提高数据库的效率,缩短查询时间。另外,因为分库分表这种改造是可控的,底层还是基于RDBMS,因此整个数据库的运维体系以及相关基础设施都是可重用的。去中心化。

    2、分库分表的手段有哪些?

    1)垂直分表,按照业务,比如一张user表,userbase表做登录用,userinfo表做个人信息修改用

     2)垂直分库,按照业务来,订单信息都在一个库,用户信息都在一个库,商品信息都在一个库

     垂直拆分的特点:每个库每个表的结构都不一样;每个库每个表的数据至少一列一样;每个库每个表的并集是全量数据。

    优点:拆分后业务清晰,数据维护简单,按照不同业务放到不同的机器上。

    缺点:

    一:如果的单表的数据量大,那么单表的读写压力依然比较大。

    二:受某种业务的影响到库的瓶颈,比如双11,订单业务会大量新增,其他会员库和商品库查找多

    三:部分业务无法直接关联join,只能通过java接口去调用,提供了开发的复杂度。比如双11订单表上面商品价格是20元,

    然后过了双11商品表的价格是25,我们查订单信息不能直接join。

    3)水平分表:将id通过运算,哈希,把数据分散在不同表。比如奇数id放在user1表,偶数id放在user2表。

     4)水平分库:将id通过运算,哈希,把数据分散在不同库。比如奇数id放在user1表,偶数id放在user2表。

     水平拆分特点:每个库(表)的结构都一样;每个库(表)的数据都不一样;每个库(表)并集是全部数据。

    优点:一、单表的数据保有量减少,有助于性能的提高。

    二、提高了系统的稳定性和负载能力。

    三、拆分表的结构相同,程序代码改动的较少

    缺点:一、数据扩容再新增库难度大

    二、拆分规则很难抽象出来

    三、分片事务的一致性问题部分业务无法关联join,只能通过java程序去调用。

     3、分库分表带来的问题

    1)分布式事务一致性,传统的acid

    2)分布式全局唯一id

    3)跨库join查询

    4)开发成本大,对程序员要求高。

    开源框架:

    jdbc直连层:

      shardingsphere.tddl

    proxy代理层:可以跨语言

      mycat、mysql-proxy(360)

     

  • 相关阅读:
    jquery实现全选、不选、反选的两种方法
    EasyGui
    PyInstaller打包成exe可执行文件
    paramiko模块
    仿照admin写一个startk组件
    django-model之Q查询补充
    django-Model _meta API
    django-admin的源码流程
    权限管理具体代码实现
    021.15 IO流 其他流
  • 原文地址:https://www.cnblogs.com/wenwenzuiniucha/p/15032109.html
Copyright © 2011-2022 走看看