前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL的分库分表1分库分表的几种形式2分片前的准备

MySQL的分库分表1分库分表的几种形式2分片前的准备

作者头像
JavaEdge
发布2018-05-16 16:35:49
1.4K0
发布2018-05-16 16:35:49
举报
文章被收录于专栏:JavaEdge

1分库分表的几种形式

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

一后有的节点还是无法负担写负载

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

终极大招水平拆分!即分片处理(通常所说的分库分表即此)

不同于MySQL的分区表是在同一个节点中的同一个数据库建立的 而分片后通常是存在不同的物理节点上 由于技术难度极高,难以维护,情非得已,谨慎操作

2分片前的准备

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

选择分区键

  • 尽量避免跨分区查询的发生(无法完全避免)
  • 尽量使各个分片中的数据平均

存储无需分片的表

  • 每个分片中存储一份相同的数据 对于数据量不大且并不经常被更新的字典类表,经常需要和分区表一起关联查询,每个分片中存储一份冗余的数据可以更好提高查询效率,维护其一致性就很重要了
  • 使用额外的节点统一储存 没有冗余问题,但是查询效率较差,需要汇总

在节点上部署分片

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

分配分片中的数据

期望尽量平均分配

  • 按分区键的Hash值取模来分配分片数据 可以相对平均的分配数据,但是难以人为控制江苏数据分配到哪个分片中
  • 按分区键的范围来分配分片数据 常用于分区键为日期或数值类型,可以清楚知道数据被分配到哪个分片中,但易产生分配不均及访问量不均
  • 利用分区键和分片的映射表来分配分片数据 前面两种都无人发灵活地控制哪些数据存储在哪些分片中于是有此法 可使用缓存方式读写 映射表,防止成为数据库瓶颈

生成全局唯一ID

  • 使用auto_increment_incrementauto_increment_offset服务器变量让MySQL以期望的值和偏移量来增加auto_increment列的值 方法简单,不依赖于某节点,比较普遍采用但需要非常仔细的配置服务器,不适用于一个节点包含多个分区表情况
  • 使用全局节点来生成ID 在一个全局数据库节点中创建一个包含auto_increment列的表,APP通过该表生成唯一数字,但该表易成为系统瓶颈
  • 在Redis等缓存nosql服务器中创建全局ID 避免了MySQL性能低的问题
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.03.14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1分库分表的几种形式
    • 把一个实例中的多个数据库拆分到不同的实例
      • 把一个库中的表分离到不同的数据库中
        • 终极大招水平拆分!即分片处理(通常所说的分库分表即此)
        • 2分片前的准备
          • 选择分区键
            • 存储无需分片的表
              • 在节点上部署分片
                • 分配分片中的数据
                  • 生成全局唯一ID
                  相关产品与服务
                  云数据库 SQL Server
                  腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档