前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分库分表

分库分表

作者头像
王小明_HIT
发布2021-04-30 11:25:55
2.1K0
发布2021-04-30 11:25:55
举报
文章被收录于专栏:程序员奇点

一般来说,高并发,海量数据存储的解决方法有:缓存加速,读写分离,垂直拆分,分库分表,冷热数据分离,ES 辅助搜索,NoSQL 等方式,分库分表是海量数据存储与高并发系统的一个解决方案。

数据量大就分表,并发高就分库。

为什么要分库分表?

如果是创业公司。比如注册用户20w, 每天日活1w, 每天单表1000, 高峰期每秒并发 10 ,这个时候,一般不需要考虑分库分表,如果注册用户2000w, 日活100w, 单表10w条,高峰期每秒并发1000,此时就要考虑分库分表。当然多加几台机器,使用负载均衡可以扛住,但是每天单表数据增加,磁盘资源会被消耗掉,高峰期如果要5000 怎么办,系统肯定撑不住。也就是说,数据增加,请求量增大,并发增大,单个数据库肯定不行。

分表

如果单表数据达到 几千万了,数据量比较大,会极大影响 SQL 查询性能, 后面的SQL 执行会很慢,经验来说,单表数据几百万,就要考虑分表了。

所谓的分表,就是将一个表的数据存放到多个表中, 查询的时候就查一个表。比如按照用户 id 来分表,将一个用户的数据存放在一个表中,然后对这个用户操作时操作那个表就好。一般来说,每个表的数据固定在 200w 以内比较好。

分表方式

垂直拆分

所谓的垂直拆分,就是将一个表中的列拆分到多个表中,也就是说将一个大表拆分成多个小表。

  • 常用的列放在一个表,不常用的列放在其他表
  • 关系紧密的列放在一个表
  • 大字段列单独存放

在这里插入图片描述

水平拆分

表结构保持不变, 对数据进行拆分,将表中对某些行拆分到其他表中。

分库

分库, 经验来说,一个库对并发最多到 2000, 一定要扩容,一个健康的单库并发控制在1000 QPS 左右,如果超过,那么将一个库的数据拆分到多个库。

在这里插入图片描述

分库分表技术实现有两个派系

代理模式 Proxy

代表产品是 mycat, SQL组合,数据库路由,执行结果合并都放到一个代理服务中。

  • 无代码侵入性, 支持多种语言
  • 需要额外引入中间件, 容易造成流量瓶颈

客户端模式Client

常见的有 Sharing-JDBC, 业务端系统只要引入一个 jar 包即可,按照规范配置路由规则, jar 包中处理数据库路由,SQL 组合,执行结果合并等操作。

  • 简单,容易上手,引入 jar 包即可,无流量瓶颈
  • 升级麻烦,升级 jar 包时,往往需要升级服务

如何选择分片键

  • 数据尽量均匀等分布在不同等库或者不同表,避免数据倾斜。
  • 跨库操作尽量少
  • 这个字段的值不会变化。

分片策略

  • hash 分片
  • range 分片(范围分片)
思考;分库分表如何平滑过渡?

历史数据迁移

  1. 增量数据监听 binlog,通过 canal 增量迁移数据
  2. 全量迁移历史数据
  3. 开启双写,关闭增量迁移任务。
  4. 读业务切换到新库
  5. 线上运行一段时间,没有问题后,下线老库。
双写迁移方案

简单来说,对新库,老库都操作。要注意的是不允许老数据覆盖新数据。

思考题

如何设计可以动态扩容缩容的分库分表方案?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员奇点 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么要分库分表?
  • 分表
    • 分表方式
      • 垂直拆分
      • 水平拆分
  • 分库
  • 分库分表技术实现有两个派系
    • 代理模式 Proxy
      • 客户端模式Client
        • 如何选择分片键
          • 分片策略
            • 历史数据迁移
              • 双写迁移方案
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档