zoukankan      html  css  js  c++  java
  • 关系型数据库分库分表解决方案

    关系型数据库分库分表解决方案

    关系型数据库单库或单表在数据达到一定量级后,单个节点的就会出现性能瓶颈。通常的做法就是考虑分库分表。

    为什么要分?

    分库降低了单点机器的负载;分表,提高了数据操作的效率,尤其是Write操作的效率。

    如何分?

    按号段分:

    (1) user_id为区分,1~1000的对应DB1,1001~2000的对应DB2,以此类推;
    优点:可部分迁移
    缺点:数据分布不均

    (2)hash取模分:

    对user_id进行hash(或者如果user_id是数值型的话直接使用user_id 的值也可),然后用一个特定的数字,比如应用中需要将一个数据库切分成4个数据库的话,我们就用4这个数字对user_id的hash值进行取模运算,也 就是user_id%4,这样的话每次运算就有四种可能:结果为1的时候对应DB1;结果为2的时候对应DB2;结果为3的时候对应DB3;结果为0的时 候对应DB4,这样一来就非常均匀的将数据分配到4个DB中。
    优点:数据分布均匀
    缺点:数据迁移的时候麻烦,不能按照机器性能分摊数据

    (3)在认证库中保存数据库配置

    就是建立一个DB,这个DB单独保存user_id到DB的映射关系,每次访问数据库的时候都要先查询一次这个数据库,以得到具体的DB信息,然后才能进行我们需要的查询操作。
    优点:灵活性强,一对一关系
    缺点:每次查询之前都要多一次查询,性能大打折扣
    以上就是通常的开发中我们选择的三种方式,有些复杂的项目中可能会混合使用这三种方式。 通过上面的描述,我们对分库的规则也有了简单的认识和了解。当然还会有更好更完善的分库方式,还需要我们不断的探索和发现。

    分布式数据方案提供功能如下:

    (1)提供分库规则和路由规则(RouteRule简称RR),将上面的说明中提到的三中切分规则直接内嵌入本系统,具体的嵌入方式在接下来的内容中进行详细的说明和论述;
    (2)引入集群(Group)的概念,保证数据的高可用性;
    (3)引入负载均衡策略(LoadBalancePolicy简称LB);
    (4)引入集群节点可用性探测机制,对单点机器的可用性进行定时的侦测,以保证LB策略的正确实施,以确保系统的高度稳定性;
    (5)引入读/写分离,提高数据的查询速度;

    MySQL大型集群解决方案

    Cobar使用文档(可用作MySQL大型集群解决方案)

    http://blog.csdn.net/shagoo/article/details/8191346

  • 相关阅读:
    Emiller's Advanced Topics In Nginx Module Development
    关于使用UDP(TCP)跨局域网,NAT穿透的心得
    linux pipe
    使用Trinity拼接以及分析差异表达一个小例子
    Bowtie2的安装与使用
    使用Tophat+cufflinks分析差异表达
    RNA-seq流程需要进化啦!
    HISAT2+StringTie+Ballgown安装及使用流程
    HISAT2,StringTie,Ballgown处理转录组数据
    p值还是 FDR ?
  • 原文地址:https://www.cnblogs.com/toSeeMyDream/p/5617088.html
Copyright © 2011-2022 走看看