何时分库分表

MySQL单表(innoDB)可以存储10亿级数据,只是这时候性能比较差,业界公认MySQL单表容量在1KW以下是最佳状态,因为这时它的BTREE索引树高在3~5之间。

参考阿里开发手册建议:

1.单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表;如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。

2.实际情况受mysql机器配置等多方面影响,可能数据量很大但性能依旧不错,但考虑后续发展一定要进行分库分表考虑。

如何分库分表

设置合适的分片数量

根据实际的业务场景选择合适的分片数据,参考如下:

  • 满足当前数据平均后的数据量在一个合理的范围(<=100w)
  • 预估未来5年的数据量发展情况,数据量在一个合理的范围(500w左右,有合理的归档备份机制)

选择合适的分片字段

根据实际的业务场景选择适当的分片字段,要达到如下要求:

  • 字段类型常规
  • 字段不易过多
  • 字段应该是业务场景大多数都会被使用的

设计合理的分片规则

分表数量和分表字段确定后,要设计一个合理的分表规则,良好的分表规则要达到如下条件:

  • 规则计算高效,逻辑清晰
  • 规则计算后,分片数据均匀
  • 方便后续扩容分片

如何保证分片数据均匀,参考:

  • 分片字段本身就是随机均匀的,可以直接使用
  • 分片字段随机,但不均匀,如对总分片取模后,会导致数据不均匀,建议先对分片字段进行2次随机处理(如:zebra提供的:md5/crc32 方法)

如何保证方便后续分片扩容,参考:

  • 如果是按照时间或数值范围进行分片,只需要创建分片库表,修改分片规则,立即生效
  • 如果是hash分片,条件允许可考虑停服迁移,停止服务,将数据按新分片规则进行迁移,修改分片规则,启动服务
  • 某些情况下可考虑升级从库,如2分库扩容为4分库,可将从库升级为主库并修改分片规则,后续可将冗余的数据进行清除并补上缺失的从库。
  • 数据库双写,同时按新老分片规则写入两套物理表,并逐渐下线老数据模型,可参考-新老迁移参考

SQL使用注意

如何高效的使用分库分表,核心是做到尽量的路由到最少的表,最好是只路由到一个表里面

核心规则如下:

  • 能带分片字段的就尽量把其带上
  • 尽量不使用范围查询
  • 无分片使用limit时不要查询太靠后的数据
  • 尽量不要使用复杂的sql
  • sql写法尽量规范

新老迁移方案参考

阶段一

  • 数据库双写(事务成功以老模型为准),查询走老模型。
  • 每日job数据对账,并将差异补平。
  • 通过job导历史数据。

阶段二

  • 历史数据导入完毕并且数据对账无误。
  • 依然是数据库双写,但是事务成功与否以新模型为准,在线查询切新模型。
  • 每日job数据对账,将差异补平。

阶段三

  • 老模型不再同步写入,异步补齐(同步数据终态)。
  • 此阶段只有离线数据依然依赖老的模型,并且下游的依赖非常多,待改造完就可以完全废除老模型了。

【干货】分库分表最佳实践相关推荐

  1. 分库分表架构实践(文末送书)

    作者介绍: 丁浪,现就职于某垂直电商平台,担任技术架构师.关注高并发.高可用的架构设计,对系统服务化.分库分表.性能调优等方面有深入研究和丰富实践经验.热衷于技术研究和分享. 来源:infoQ||聊聊 ...

  2. SQL数据库不用SQL语句能显示全表的内容_阿里巴巴数据库分库分表的实践

    在2006年阿里巴巴B2B团队以开源方式研发了Cobar这一关系型数据的分布式处理系统.该系统在很大程度上解决了最初使用Oracle数据库因为存储数据变得越来越大带来的扩展性问题,并且为开发人员提供了 ...

  3. 唯品会订单分库分表的实践总结以及关键步骤--转

    原文地址:http://www.infoq.com/cn/articles/summary-and-key-steps-of-vip-orders-depots-table 随着唯品会业务的快速发展, ...

  4. 唯品会订单分库分表的实践总结以及关键步骤

    随着唯品会业务的快速发展,订单量的不断增长,原有的订单存储架构已经不能满足公司的发展了,特别是在大促高峰期,原订单库已经成为抢购瓶颈,已经严重制约公司的发展. 唯品会旧订单库包含几十张订单相关表,旧订 ...

  5. (转)唯品会订单分库分表的实践总结以及关键步骤

    原文:http://www.infoq.com/cn/articles/summary-and-key-steps-of-vip-orders-depots-table 随着唯品会业务的快速发展,订单 ...

  6. 万亿级企业MySQL海量存储分库分表设计实践

    互联网业务往往使用MySQL数据库作为后台存储,存储引擎使用InnoDB.我们针对互联网自身业务特点及MySQL数据库特性,讲述在具体业务场景中如何设计表和分表.本文从介绍MySQL相关基础架构设计入 ...

  7. MariaDB Spider 数据库分库分表实践 分库分表

    分库分表 一般来说,数据库分库分表,有以下做法: 按哈希分片:根据一条数据的标识计算哈希值,将其分配到特定的数据库引擎中: 按范围分片:根据一条数据的标识(一般是值),将其分配到特定的数据库引擎中: ...

  8. 一文快速入门分库分表(必修课)

    之前有不少刚入坑 Java 的粉丝留言,想系统的学习一下分库分表相关技术,可我一直没下定决心搞,眼下赶上公司项目在使用 sharding-jdbc 对现有 MySQL 架构做分库分表的改造,所以借此机 ...

  9. 深入浅出Mycat分库分表

    What is Mycat? 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle ...

最新文章

  1. R有序因子和无序因子(4)
  2. java 获取400的错误信息_获取400错误的请求Spring RestTemplate POST
  3. Ext.Net学习笔记10:Ext.Net ComboBox用法
  4. springmvc配置ssl_spring MVC配置详解
  5. python字典顺序遍历_在Python中,如何按已排序的键顺序遍历字典?
  6. 微信开发中,H5的video标签使用
  7. nullnull使用PL/SQL获取创建用户的语句
  8. 整理的一些常用的CSS HACK
  9. python 读取中文文件名/中文路径
  10. 截取文件最后10行_10 行 Python 代码自动清理电脑内重复文件,解放双手
  11. Nexus3 功能介绍
  12. 【神经网络算法入门】详细推导全连接神经网络算法及反向传播算法+Python实现代码
  13. Vue开发历程---音乐播放器
  14. 杭州好玩景点攻略198
  15. 华为进不了美国,并不是贸易保护这么简单
  16. python中的反三角函数_用python画所有三角函数和反三角函数图像
  17. 【 拼多多发表声明:会认真整改 打假决心没有变】
  18. 我想问问4月7号什么日子
  19. PHP 图片合成、仿微信群头像
  20. 阿里云边缘云场景化商业实践

热门文章

  1. c语言is stack empty,C语言实现栈的问题
  2. java cache详解,Java内存缓存详解
  3. html5 文字转换烟花,HTML5交互式烟花(点击并保持)
  4. Scikit-Learn 机器学习笔记 -- 决策树
  5. linux内核杂记(14)-Linux kernel release 5.x(1)
  6. 趣学python3(19)-函数-Lambda
  7. tensorflow随笔-条件循环控制(1)
  8. AtCoder Beginner Contest 215 F - Dist Max 2
  9. 【NLP】NLP模型BERT和经典数据集!
  10. 【Python基础】纯Python绘制满满艺术感的山脊地图