mysql分库分表

mysql不同的引擎有不同的表容量限制:比如5.0之后MYISAM单表的文件容量限制是256TB如果不受磁盘空间影响

我们先来熟悉下概念:

什么是分库分表?

什么是分表?

什么情况下分库?

什么情况下分表?

1、什么是分库

分库其实分为 水平划分,垂直划分

水平划分:

比如 某商城系统,店铺表数据量非常大,严重影响了整个DB的性能,这时候我们可以考虑用分库(当然分表也解决不了),把店铺表按照某种策略划分到不同的数据库,两个库的结构一致,比如就按照 用户ID是奇数的存在A库,用户ID是偶数的存在B库。

垂直划分:

比如上面的商城系统,我们可以考虑把 商品信息和店铺信息分库存储,商品信息存在在A库,店铺信息存储在B库

2、什么是分表

比如上面的商城系统,商品表,我们可以用分表去存储,按照一定的规则,比如goods_id 对4 求于的方式去划分,当添加一个商品的ID是123,,123 mod 4,次商品存储在goods_0003表中,

3、什么情况下用分表

在实际的开发中 当单表的数据量超过500万条记录时,可考虑使用分表。

4、什么情况下用分库

当写的压力很大的时候,必须用分库

分库分表产生的问题 以及注意事项
    1、分库分表的维度问题
        比如 用户购买商品要将交易记录保存起来,如果按照用户的维度分表,则每个用户的交易记录都保存在同一个表中,所以很快,很方便查找到用户的 交易情况,但要获取 商品的购买情况
        可能分布在多张表中查找起来比较麻烦,反之按照商品的维度分表,就很容易的获取商品的购买情况,但要获取用户的交易记录就比较麻烦
        所以常见的解决方式有:
        a、通过扫描表的方式,此方法不可取,效率太低
        b、记录两份数据 一份按照用户维度,一份按照商品维度
        c、通过搜索引擎解决但如果实时要求很高,有地关系到实时搜索
    2、联合查询
          联合查询不可取,因为可能不在同一库。
    3、避免跨库事务
          一个事物中涉及两个库中的表数据,操作起来负责 而且效率也低
    4、尽量把同一组数据放在同一DB上
        例如卖家A的商品和交易信息都放在数据库db0上,即使db1挂了卖家A的相关东西也可以正常使用

 在实际的应用中,绝大数数据都是读远大于写,mysql提供了读写分离的机制,所有写的操作都必须对应都master,读的操作可以在master和slave机器上进行,slave和master的结构完全一样,
    一个master可以有多个slave 甚至slave下面也可以挂slave
    所有写的操作都在master上发生,同时同步更新到slave上,所以master同步到slave机器上有一定的延迟,而且这种延迟也会随着slave的增加而严重

    所以
    1、当读的压力很大的时候可以考虑slave机器分布式解决,但当slave机器达到一定数量的时候就低考虑分库
    2、当写的压力很大的时候必须考虑分库操作

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值