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

    Mysql Sharding

    前言

      1)Sharding是按照一定规则重新分布数据的方式

      2)解决单机写入压力过大和容量问题

      3)  解决单机查询慢的问题

      4)本文主要根据用户登录场景分析

    Sharding规则

      1)垂直拆分,一般是表中的字段比较多,按照业务分类拆分到不同的表中。

      2)水平拆分,一般是表中的数据量巨大,按照特定规则拆分到不同的表中。

        1. mod方式 

        例:网站有N种(手机号、邮箱、第三方...)登录方式   

    function get_table_name($unique_name) {
        $tb_num = 8; // 表数量
        return 'login_' . intval(sprintf('%u', crc32($unique_name)) % $tb_num);
    }
    var_dump(get_table_name('username'));//login_7

        优点:

          解决热点问题

        缺点:

          数据分布不平均。容易出现单表过大问题

          扩容时,需要重新迁移数据。

        2. range方式

        例:网站有N种(手机号、邮箱、第三方...)登录方式,每个表存1000W数据   

    function get_table_name($unique_name) {
        $tb_split = 10000000; // 单表数据量
        return 'login_' . intval(sprintf('%u', crc32($unique_name)) / $tb_split);
    }
    var_dump(get_table_name('username'));//login_416

        优点:

          不需要数据迁移

        缺点:

          数据分布不平均。出现很多表

        3. 暂时先使用range方式,先把$tb_split设置大一点。需要扩容时在重新迁移数据把$tb_split改小。

           

    Sharding后

      1)设计方案时尽量避免数据迁移、热点问题。同时要保证易于水平扩展

      1)全局自增id方案

      2)跨库、跨表join

  • 相关阅读:
    中国登山队员首次登上地球之巅珠穆朗玛峰的时间与意义及影响 (转)
    兰戈利尔人(斯蒂芬.金)
    冥界系列一:麝月 (作者:钱其强)
    席慕容独白
    【心理寓言】小偷在鸡舍偷了只鸡
    美国恐怖故事第一季事件时间表
    大学生逃课的暴笑理由
    原来他们四个也是有故事的男人
    爆笑:七八十年代各地最流行顺口溜 网友:太经典了
    中国的世界之最
  • 原文地址:https://www.cnblogs.com/zhoutianyuan/p/11040291.html
Copyright © 2011-2022 走看看