开发者

Mysql分片,大数据量时扩容解决方案

目录
  • 分片概念
  • 分片与分表的区别
  • 分片策略
    • 基于范围分片
    • 哈希取模分片(离散分片)
    • 一致性哈希分片
  • 一,初期方案(停机扩容)
    • 二,平滑扩容(上线运行之后)
      • 总结

        分片概念

        分片(Sharding)就是用来确定数据在多台存储设备上分布的技术。

        Shard这个词的意思是“碎片”,如 果将一个数据库当作一块大玻璃,将这块玻璃打碎,那么每一小块都称为数据库的碎片(Database Sharding)。

        将一个数据库打碎成多个的过程就叫做分片,分片是属于横向扩展方案。

        分片与分表的区别

        分片:表示分配过程,是一个逻辑上概念,表示如何实现。

        分库分表:表示分配结果,是一个物理上概念,表示最终实现的结果

        分片策略

        基于范围分片

        根据特定的字段进行拆分,比如ID0-100到 Cluster A节点中,100-200的到Cluster B节点中...

        • 优点:新的数据javascript可以落在新的存储节点上,如果集群扩容,数据无需迁移。
        • 编程客栈点:热点数据分部不均匀则会导致机器负python荷程度的不均匀,会浪费资源也会导致部分机器过载。

        哈希取模分片(离散分片)

        根据Hash算法取模对应一些机器编号进行入库。

        • 优点:数据分配比较均匀,不容易出现冷热不均,负荷不均的情况。
        • 缺点:比较均匀,但是在扩容时会产生大量的数据迁移(因为Hash算法取模python要整体重新计算),比如从n台设备扩容到n+1,绝大部分数据需要重新分配和 迁移。

        一致性哈希分片

        相比较传统的Hash算法,通过环的方式在添加节点(扩容)或者删除节点时,只对增加节点的单个环上进行添加,则无须进行大面积的数据迁移。

        Mysql分片,大数据量时扩容解决方案

        在数据库容量有限的情况下,分片,分库,分表也会达到瓶颈,而这时候的扩容方式则需要去横向增加节点扩容php处理。

        Mysql分片,大数据量时扩容解决方案

        一,初期方案(停机扩容)

        停机扩容,关闭服务不符合现阶段高可用的价值观,并且如果有问题没有及时测试出来启动了服务,运行后发现问题,数据会丢失一部分,难以回滚。

        该方案虽然简单但只适合小型网站或者对高可用要求不高的程序,或是测试上线阶段。

        二,平滑扩容(上线运行之后)

        平滑扩容也称之为成倍扩容,例如从两个节点扩到四个节点,通过双主配置双写进行数据同步。

        Mysql分片,大数据量时扩容解决方案

        双主双写之后进行同步,在可容忍的延迟下,保证数据的同步完成。

        (因为高可用要求高的程序下,随时都会存在写的数据录入,所以会有延迟情况)

        Mysql分片,大数据量时扩容解决方案

        同步完成后,则取消掉双主同步,重启即可。

        Mysql分片,大数据量时扩容解决方案

        平滑扩容虽然做到了高可用的要求,但是配置程序很复杂、配置双主同步、双主双写、检测数据同步等,且后期数据库扩容,因为是成倍扩容,代价会不断变大。

        总结

        以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

        0

        上一篇:

        下一篇:

        精彩评论

        暂无评论...
        验证码 换一张
        取 消

        最新数据库

        数据库排行榜