mysql先分了10张表,后续在分表如何处理?
MySQL分库分表(其他关系型数据库也相似),通常的方案都用主键mod分表的数量,来把数据路由到某一个数据库分片上。例如分了10张表,那么就是ID%10,得到结果0-9,代表不同的表。
但是当数据量进一步增多的时候,单库的数据量达到了一定的级别之后,那么就需要分更多的表,那么这时候有哪些处理方案呢?
做数据迁移
最简单暴力,也是最麻烦的一个方案。
因为当分表(分库)数量增多的时候,因为分片规则的变化,每个表的数据都要被重新分配到多个新的表;这种方法虽然最直接,但是带来的问题也非常大:
数据迁移时间会比较长,需要迁移时间;
如果业务不能停的话(在线迁移),还要解决增量数据和历史数据一致性的问题;
不做数据迁移
那么有没有方法,当数据增长到现有分表极限的时候,加表或者加库的时候,可以避免数据的迁移呢?说白了,我们需要增加分表算法的复杂性,让算法可以兼容增加分表前后的数据路由:
先说一个简单的办法,(为了方便讲述,下面就把id当做分表字段),如果id是一个增长的全局序列,每个表存500万的数据,那么可以id=1-500万存到table_1,id=500万零1-1000万存到table_2,理论上这种方法是可以无限扩容的,但是问题也显而易见,就是每个阶段的数据insert会集中在一个表/库上,虽然能避免数据迁移的问题,但是数据热点的问题没有解决。
- 如果id是一个增长的全局序列,当前有十张表,那么分表的算法为:id%10,根据0-9路由到10个表中;当表扩到20张的时候,扩容那一刻取max_id,那么未来分库的算法也就变成了:
if(id<max_id){id%10} else {id%20};
有些分表的算法本身就带时间戳,可以基于id中的时间戳来实现,比如Twitter-Snowflake算法,这个算法是一个64位的Long值,前42位就是一个精确到毫秒的时间戳,那么我们的分库算法也就可以以某个时间点来判断:
if(id中的时间<增加分表那一刻的时间){id%10} else {id%20};
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
欢迎关注我,一个程序员老司机,和你分享编程、运营、需求等等经验和趣事。
根据你的问题描述,其实就是对MySQL数据表进行重新分表,下面我来和你分享一下我的观点,希望能够帮助到你。
首先你已经有了10个表,那么现在分表肯定需要重新组织这10个表的数据,所以我们可以这样做,首先创建好你的新分表,比如50个新的分表,然后用程序依次将这10个表的数据按照新规则插入到新的分表里面,完成之后,将应用程序里面的数据表名称改成新数据表,从而完成整个操作。
但是这里有一个问题,因为我们的数据随时都在增加或者修改、删除,如果在业务繁忙的时候来进行的话,很容易导致数据丢失或者数据不完整的情况,所以,尽可能将这个分表操作放在晚上或者业务不繁忙的时候,甚至关闭整个系统一段时间都可以,如果选择晚上的话,怎么处理好新增的数据和修改的数据呢?可以考虑临时增加几个数据表触发器,然后在分表完成之后,根据这些触发器来进行修改数据的修复。
不过在做项目的时候,我们还是尽可能将这个设计好,因为重新分表的成本非常高。
大数据怎么入门学习好?
感谢关注天善智能,走好数据之路↑↑↑
欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!
可以加: xtechday (长按复制),进入数据爱好者交流群。
先给大家来张大数据体系学习图:
基本内容:
1、Linux命令基础实战
大数据架构体系结构及开源组件介绍
Linux基本操作
2、Hadoop基础
Hadoop基础,对Hadoop架构、核心组件HDFS/YARN做了深入浅出的介绍,让你快速把握Hadoop的核心技术和工作原理,逐渐形成分布式思维;
Hadoop介绍
Hadoop运行模式
3、Hadoop集群搭建
Hadoop集群搭建——安装Linux虚拟机
Hadoop集群搭建——远程连接
Hadoop集群搭建(on Linux)——Hadoop(上)
Hadoop集群搭建(on Linux)——Hadoop(下)
Hadoop集群搭建(on Mac)——Hadoop
4、HDFS原理
番外篇-课程体系
HDFS架构原理
FS Shell命令介绍及实践
5、YARN工作原理
YARN的产生背景
YARN的设计思想
YARN的基本架构
YARN的工作流程(小结)
6、Sqoop
Sqoop,作为关系型数据库与Hadoop之间的桥梁,批量传输数据,让你自然的从关系型数据库过度到Hadoop平台,在关系型数据库与Hadoop之间游刃有余的进行数据导入导出;
Sqoop & Hive课程内容介绍
Sqoop介绍与安装
Sqoop的基本使用
Sqoop 导入参数详解
Sqoop导入实战
Sqoop增量导入(上)
Sqoop增量导入(下)
Sqoop导出实战(上)
Sqoop导出实战(下)
Sqoop Job
7、Hive
Hive,基于Hadoop大数据平台的数据仓库,可以让你实现传统数据仓库中的绝大部分数据处理、统计分析,让你在Hadoop大数据平台上感受到Hive QL带来的便利的交互式查询体验;Mars将以日志分析或其他示例带大家熟练掌握Hive的应用;
Hive架构介绍(一)
Hive架构介绍(二)
Hive环境搭建(一)
Hive环境搭建(二)
Hive CLI初探
Beeline介绍
Hive数据类型
Hive表一——标准建表语句解析&内、外表
Hive表二——文件及数据格式
Hive分区&桶&倾斜概念
Hive表——Alter
Hive视图&索引简介
Hive表——show & Desc命令
Hive数据导入--load
Hive数据导入--insert
Hive分区表实战
Hive复杂数据类型的嵌套实例
Hive源码阅读环境
Hive执行原理
Hive查询优化
UDF函数实例
Hive终极实例——日志分析
(1)网站日志分析的术语、架构介绍
(2)建表及数据准备
(3)数据处理及统计分析
(4)数据采集到统计分析结果的crontab定时调度
8、HBase
HBase,列式存储数据库,提供了快速的查询方式,是Apache Kylin的默认数据存储结果;
HBase介绍及架构
HBase安装
HBase操作实战
Hive与HBase集成实战
9、Kylin
Kylin,基于Hadoop的OLAP分析引擎,在Kylin中可以实现传统OLAP的各种操作,直接读取Hive的数据或流式数据作为数据源,把这些数据根据业务模型构建成Cube,Kylin提供了基于Hadoop(MapReduce)的Cube构建,Build完成的Cube数据直接存储于HBase中。Kylin提供了Web UI供查询,包括一些图表展现,是基于大数据的完美OLAP工具;
维度建模
Kylin背景及原理架构
Kylin环境搭建
维度建模知识
Kylin Cube Build步骤解析
Kylin Cube实战
Kylin 增量Cube
Kylin 优化
10、Spark
Spark,基于内存计算的大数据计算引擎,提供了Spark SQL、Spark MLlib(基于Spark的机器学习)、SparkR等框架适应不同的应用需求,Spark专题将和大家一起实践操作各种应用和算法;
Spark集群搭建
Spark Core
Spark WordCount(Spark-shell/pyspark..)
IDEA IntelliJ搭建Spark开发环境
Spark编程实例
Spark SQL及DataFrame
Spark SQL实例
Spark Streaming
Spark Streaming实例
Spark MLlib
Spark MLlib应用实例
Spark R介绍
欢迎关注:对话大数据系列技术 从破冰到精进:
欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定!
每周线上公开课,每月线下活动,感谢报名参加!
可以加: xtechday (长按复制),进入数据爱好者交流群。
还没有评论,来说两句吧...