Files
logseq/pages/数据库分片.md

4.1 KiB
Raw Permalink Blame History

  • 垂直拆分
    • 垂直分库
      • 按照业务对数据库进行拆分
      • image.png
      • # 读写分离类型,如: StaticDynamic
        spring.shardingsphere.rules.readwrite-splitting.data-sources.myds.type=Static
        # 写数据源名称
        spring.shardingsphere.rules.readwrite-splitting.data-sources.myds.props.write-data-source-name=master
        # 读数据源名称,多个从数据源用逗号分隔
        spring.shardingsphere.rules.readwrite-splitting.data-sources.myds.props.read-data-source-names=slave1,slave2
        
        # 负载均衡算法名称
        spring.shardingsphere.rules.readwrite-splitting.data-sources.myds.load-balancer-name=alg_round
        
    • 垂直分表
      • 拆分表中某些不常用的列,或者是占用了大量空间的列
      • image.png{:height 401, :width 749}
      • # 标准分片表配置(数据节点)
        # spring.shardingsphere.rules.sharding.tables.<table-name>.actual-data-nodes=值
        # 值由数据源名 + 表名组成,以小数点分隔。
        # <table-name>:逻辑表名
        spring.shardingsphere.rules.sharding.tables.t_user.actual-data-nodes=server-user.t_user
        spring.shardingsphere.rules.sharding.tables.t_order.actual-data-nodes=server-order.t_order
        
  • 水平拆分
    • 水平分片
      • 通过id区分
      • 水平分片的id需要在业务层实现不能依赖数据库的主键自增
    • 单表超过500万行或者超过2G才进行拆分
    • #========================标准分片表配置(数据节点配置)
      # spring.shardingsphere.rules.sharding.tables.<table-name>.actual-data-nodes=值
      # 值由数据源名 + 表名组成,以小数点分隔。多个表以逗号分隔,支持 inline 表达式。
      # <table-name>:逻辑表名
      spring.shardingsphere.rules.sharding.tables.t_user.actual-data-nodes=server-user.t_user
      spring.shardingsphere.rules.sharding.tables.t_order.actual-data-nodes=server-order0.t_order0,server-order0.t_order1,server-order1.t_order0,server-order1.t_order1
      
      # ##取模算法配置
      #------------------------分库策略
      # 分片列名称
      spring.shardingsphere.rules.sharding.tables.t_order.database-strategy.standard.sharding-column=user_id
      # 分片算法名称
      spring.shardingsphere.rules.sharding.tables.t_order.database-strategy.standard.sharding-algorithm-name=alg_inline_userid
      
      #------------------------分片算法配置
      # 行表达式分片算法
      # 分片算法类型
      spring.shardingsphere.rules.sharding.sharding-algorithms.alg_inline_userid.type=INLINE
      # 分片算法属性配置
      spring.shardingsphere.rules.sharding.sharding-algorithms.alg_inline_userid.props.algorithm-expression=server-order$->{user_id % 2}
      
      # 取模分片算法
      # 分片算法类型
      spring.shardingsphere.rules.sharding.sharding-algorithms.alg_mod.type=MOD
      # 分片算法属性配置
      spring.shardingsphere.rules.sharding.sharding-algorithms.alg_mod.props.sharding-count=2
      
      # ##哈希取模分片
      #------------------------分表策略
      # 分片列名称
      spring.shardingsphere.rules.sharding.tables.t_order.table-strategy.standard.sharding-column=order_no
      # 分片算法名称
      spring.shardingsphere.rules.sharding.tables.t_order.table-strategy.standard.sharding-algorithm-name=alg_hash_mod
      
      
      #------------------------分片算法配置
      # 哈希取模分片算法
      # 分片算法类型
      spring.shardingsphere.rules.sharding.sharding-algorithms.alg_hash_mod.type=HASH_MOD
      # 分片算法属性配置
      spring.shardingsphere.rules.sharding.sharding-algorithms.alg_hash_mod.props.sharding-count=2
      
      # 算法雪花
      
    • //@TableId(type = IdType.AUTO)//依赖数据库的主键自增策略
      @TableId(type = IdType.ASSIGN_ID)//分布式id
      
    • 分片策略
      • 行表达式
      • 取模
      • 哈希取模
      • 雪花算法
    • 配置选项
      • 分库策略
        • 分片列
        • 分片算法
      • 分表策略
      • 分布式序列策略
      • 绑定表配置
        • 配置以后关联查询不会出现笛卡尔积