0%

MySQL学习笔记-数据库分库分表设计

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

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

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

数据库分片前的准备

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

如何选择分区键

  • 分区键要能尽量避免跨分片查询的发生
  • 尽量使各个分片中的数据平均

如何存储无需分片的表

  • 冗余到每一个分片中
  • 使用额外的节点统一存储

如何在节点上部署分片

  • 每个分片使用单一数据库,并且数据库名也相同
  • 将多个分片表存储在一个数据库中,并且在表名上加入分片号后缀
  • 在一个节点中部署多个数据库,每个数据库中包含一个分片

如何分配分片中的数据

  • 按分区键Hash值取模分配分片数据
  • 按分区键的范围来分配分片数据
  • 利用分区键和分片的映射表来分配分片数据

如何生成全局唯一Id

  • 使用auto_increment_increment和auto_increment_offset参数

  • 配置全局节点生成Id

    • 容易成为系统瓶颈
  • 在Redis等缓存服务器中创建全局ID

附件:Xmind图

数据库分库分表设计