zoukankan      html  css  js  c++  java
  • 数据库的分库分表

    一、数据库分库分表的几种方式

    如果是为了分担数据库的读负载,我们可以采用主从复制的方式,给原来的数据库增加几台具有相同数据的从服务器,这样通过读写分离的方式,就可以把读负载分担的不同的数据库从服务器中了

    对于主数据库的写负载,则需要进行拆分,即分库分表

    1、把一个实例中的多个数据库拆分到不同的实例

     

    如果写压力集中在一个数据库,比如订单库中,那就需要采用第二种方式了

    2、把一个库中的表分离到不同的数据库中

     

    如果写压力集中在一个表中,比如订单表,那就需要采用表的水平拆分了

    二、数据库分片前的准备

    对一个库中的相关表进行水平拆分到不同实例的数据库中

    1、如何选择分区键

    分区键要能尽量避免跨分片查询的发生

    分区键要能尽量使各个分片中的数据平均

    2、如何存储无需分片的表

    每个分片中存储一份相同的数据

    使用额外的节点统一存储

    3、如何在节点上部署分片

    每个分片使用单一数据库,并且数据库名也相同

    将多个分片表存储在一个数据库中,并在表名上加入分片号后缀

    在一个节点中部署多个数据库,每个数据库包含一个分片

    4、如何分配分片中的数据

    按分区键的Hash值取模来分配分片数据

    按分区键的范围来分配分片数据

    利用分区键和分片的映射表来分配分片数据

    5、如何生成全局唯一ID

    使用auto_increment_increment和auto_increment_offset参数

    使用全局节点来生成ID

    在Redis等缓存服务器中创建全局ID

  • 相关阅读:
    Luogu 3119 [USACO15JAN]草鉴定Grass Cownoisseur
    Luogu 4514 上帝造题的七分钟
    Luogu 1484 种树
    Luogu【P2904】跨河(DP)
    Luogu【P2065】贪心的果农(DP)
    Luogu【P1725】琪露诺(单调队列,DP)
    二分图匹配
    单调队列
    Tarjan的强联通分量
    手写堆
  • 原文地址:https://www.cnblogs.com/yanguobin/p/12103490.html
Copyright © 2011-2022 走看看