您当前的位置:首页 > 互联网百科 > 大数据

数倍数据平滑扩容迁移方案

时间:2023-11-14 13:36:35  来源:微信公众号  作者:二进制跳动
两个相互同步的主库使用相同的虚拟IP,当主库挂掉的时候,虚拟IP自动漂移到另外一台主库,整个过程用户是无感知的。使用双主同步+keepalived+虚ip的方式进行。

首先我们先来看下数据库的高可用一般都是怎么实现的。我们还是借用图来说明。真想手绘。

数倍数据平滑扩容迁移方案图片

如上图所示,两个相互同步的主库使用相同的虚拟IP,当主库挂掉的时候,虚拟IP自动漂移到另外一台主库,整个过程用户是无感知的。使用双主同步+keepalived+虚ip的方式进行。

 

如果遇到数据暴增,我们怎么办?

我们可以通过水平切分。

数倍数据平滑扩容迁移方案图片

上图所示,用户库user分布在两台服务器上,ip0和ip1。通过用户取模得方式,模2余0到ip0的机器上,反之到ip1的机器上,同时ip0和ip1并行做了双主同步,这样做到了水平切分和高可用。

 

新的问题来了,分成n库以后,随着数据量的不断增加,要增加到2*n库的时候,数据如何扩容,数据如何平滑迁移,如何对外提供服务,保证数据的可用性?(一连串的灵魂拷问)

1.停服升级(暂时跳过)2.假设上面每个库ip0和ip1每个库都有1亿数据,如何平滑扩容,增加实例数,降低单库数据量呢?

第一步:

数倍数据平滑扩容迁移方案图片

这样能保证原来的数据不变,还可以路由到原来的机器上。

 

第二步:

数倍数据平滑扩容迁移方案图片

 

这里需要服务层重新reload,高级一点可以通过配置中心向服务层发信息,重新读取配置文件,重新初始化连接数据库。完成之后,数据库实例从2变成4个,过程在秒级完成。

整个过程可以逐步重启,对服务的正确性和可用性完全没有影响:

(a)即使%2寻库和%4寻库同时存在,也不影响数据的正确性,因为此时仍然是双主数据同步的;

(b)即使%4=0与%4=2的寻库落到同一个数据库实例上,也不影响数据的正确性,因为此时仍然是双主数据同步的;

 

上面对数据库实例进行了扩展,但是数据的数量并没有降低,我们还需要再做一步。

数倍数据平滑扩容迁移方案图片

 

 

有这些一些收尾工作:

(a)把双虚拟ip修改回单虚拟ip;

(b)解除旧的双主同步,让成对库的数据不再同步增加;

(c)增加新的双主同步,保证高可用;

(d)删除掉冗余数据,例如:ip0里%4=2的数据全部删除,只为%4=0的数据提供服务;

这一步,数据库单实例数据量减半了。

 

 

InnoDB引擎为什么高效?

技术上怎么控制并发操作?

-锁

-数据多版本

 

-简单暴力,任务执行过程的本质是串行的

-出现了共享锁和排它锁

 --共享锁(S锁),读取数据加S锁

 --排他锁(X锁) 修改时加X锁

共享锁和排他锁的区别?

-共享锁,读可以并行

-排他锁跟任何锁互斥,读和写都不可以并行

总结下:一但写数据没有完成,数据是不能被其他任务读取的,这对并发有着比较大的影响。

有没有可能,进一步提高并发呢?

 

数据多版本

数倍数据平滑扩容迁移方案图片

-核心原理

 (1)写任务发生的时候,将数据克隆一份,以版本号区分

 (2)写任务操作克隆的数据,直至提交

 (3)读取数据还是旧版本上,不阻塞

所以并发提高演进的思路

1.普通锁,串行执行

2.读写锁,读读可以并发

3.数据多版本,读写都可以并发

 

对应到innodb,是怎么处理的呢?

先了解三个概念:redo、undo、回滚段

redo:数据库事务提交之后,必须将更新后的数据刷新到硬盘上,保证ACID原则。这里是随机读写的,如果来个事务就写一次,相当影响吞吐量。

优化:将修改的行写到redo日志中,再定期刷新到硬盘中。这里的写日志是顺序写,可以提高性能。如果有一刻数据奔溃,可以读取redo日志恢复数据。

undo:事务未提交时,可以将修改前的数据存在undo日志里,当崩溃或者事务回滚时,利用undo日志撤销修改。

 

举例说明:

-insert操作,undo日志存储的是PK(rowid),回滚时直接删除

-update/delete操作,undo日志记录旧数据的row,回滚时直接恢复。

回滚段:存储undo日志的地方,就是回滚段。

 

Innodb是基于版本并发控制的存储引擎。

MVCC就是通过“读取旧版本数据”来降低并发事务的锁冲突,提高任务的并发度。

innodb为何能做到这么高的并发?

回滚段的数据,也就是历史数据的快照,这些数不会被改变,select操作可以为所欲为的并发读取

 

总结

(1)常见并发控制保证数据一致性的方法有锁,数据多版本;

(2)普通锁串行,读写锁读读并行,数据多版本读写并行;

(3)redo日志保证已提交事务的ACID特性,设计思路是,通过顺序写替代随机写,提高并发;

(4)undo日志用来回滚未提交的事务,它存储在回滚段里;

(5)InnoDB是基于MVCC的存储引擎,它利用了存储在回滚段里的undo日志,即数据的旧版本,提高并发;

(6)InnoDB之所以并发高,快照读不加锁;

(7)InnoDB所有普通select都是快照读;



Tags:数据   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除。
▌相关推荐
数倍数据平滑扩容迁移方案
两个相互同步的主库使用相同的虚拟IP,当主库挂掉的时候,虚拟IP自动漂移到另外一台主库,整个过程用户是无感知的。使用双主同步+keepalived+虚ip的方式进行。首先我们先来看下数...【详细内容】
2023-11-14  Tags: 数据  点击:(0)  评论:(0)  加入收藏
深入了解Python数据类型及应用
Python提供了一组丰富的内置数据类型,使您能够在程序中处理不同类型的数据。核心数值类型包括整数、浮点数和复数。整数表示整数,对于精确的计数和计算非常有用。浮点数表示具...【详细内容】
2023-11-14  Tags: 数据  点击:(1)  评论:(0)  加入收藏
MySQL查询语句揭秘:无限层次父子关系查询,轻松解锁数据维度!
在当今的数据驱动时代,对于处理具有层次结构的数据非常重要。例如,组织结构、分类层次、评论回复等都可以被看作是无限层次的父子关系。针对这类数据的查询通常需要一种特殊的...【详细内容】
2023-11-14  Tags: 数据  点击:(2)  评论:(0)  加入收藏
使用 Java 枚举和自定义数据类型
介绍在 Java 编程领域,理解并有效利用枚举和自定义数据类型对于编写健壮、可维护且高效的代码至关重要。这篇文章旨在深入研究 Java 枚举和自定义数据类型的概念,提供见解和示...【详细内容】
2023-11-14  Tags: 数据  点击:(1)  评论:(0)  加入收藏
MongoDB性能调优:打造高效的数据存储平台
MongoDB是一种非常流行的NoSQL数据库,可以用于构建高效的数据存储平台。为了确保MongoDB的性能最大化,以下是一些建议的性能调优措施:1、使用适当的硬件:选择高性能的硬件设备,例...【详细内容】
2023-11-14  Tags: 数据  点击:(3)  评论:(0)  加入收藏
三大开源向量数据库大比拼
译者 | 布加迪审校 | 重楼向量数据库具有一系列广泛的好处,特别是在生成式人工智能方面,更具体地说,是在大语言模型(LLM)方面。这些好处包括先进的索引和精确的相似度搜索,有助于...【详细内容】
2023-11-14  Tags: 数据  点击:(2)  评论:(0)  加入收藏
K均值聚类算法:数据聚类的常用技术
在数据分析和机器学习领域,聚类是一种常用的数据分析技术,用于将相似的数据点分组或聚集在一起。K均值聚类算法是一种经典的聚类算法,被广泛应用于各个领域。本文将介绍K均值聚...【详细内容】
2023-11-14  Tags: 数据  点击:(1)  评论:(0)  加入收藏
什么是云数据中心?与传统数据中心有什么不同
云计算数据中心是一种基于云计算架构的,计算、存储及网络资源松耦合,完全虚拟化各种IT设备、模块化程度较高、自动化程度较高、具备较高绿色节能程度的新型数据中心。云数据中...【详细内容】
2023-11-13  Tags: 数据  点击:(6)  评论:(0)  加入收藏
浅析Redis数据结构
Labs 导读Redis ( Remote Dictionary Server)远程字典服务,是一款通过Key-Value存储的NoSql数据库,数据缓存在内存中,支持网络、可持久化日志,提供多种语言的API,常用的场景有高...【详细内容】
2023-11-13  Tags: 数据  点击:(9)  评论:(0)  加入收藏
用AI评估AI,上交大新款大模型部分任务超越GPT-4,模型数据都开源
Pengfei Liu 投稿自 凹非寺量子位 | 公众号 QbitAI评估大模型对齐表现最高效的方式是?在生成式AI趋势里,让大模型回答和人类价值(意图)一致非常重要,也就是业内常说的对齐(Alignme...【详细内容】
2023-11-13  Tags: 数据  点击:(0)  评论:(0)  加入收藏
▌简易百科推荐
数倍数据平滑扩容迁移方案
两个相互同步的主库使用相同的虚拟IP,当主库挂掉的时候,虚拟IP自动漂移到另外一台主库,整个过程用户是无感知的。使用双主同步+keepalived+虚ip的方式进行。首先我们先来看下数...【详细内容】
2023-11-14  二进制跳动  微信公众号  Tags:数据   点击:(0)  评论:(0)  加入收藏
什么是云数据中心?与传统数据中心有什么不同
云计算数据中心是一种基于云计算架构的,计算、存储及网络资源松耦合,完全虚拟化各种IT设备、模块化程度较高、自动化程度较高、具备较高绿色节能程度的新型数据中心。云数据中...【详细内容】
2023-11-13  汇点科技    Tags:云数据   点击:(6)  评论:(0)  加入收藏
三种方案优化 2000w 数据大表!
当我们业务数据库表中的数据越来越多,如果你也和我遇到了以下类似场景,那让我们一起来解决这个问题 数据的插入,查询时长较长 后续业务需求的扩展 在表中新增字段 影响较大 表...【详细内容】
2023-10-17  码猿技术专栏  微信公众号  Tags:数据   点击:(17)  评论:(0)  加入收藏
如何设计出高质量Flink系统
根据我从事大数据处理多年的经验,要设计出高质量的Flink系统,需要考虑以下几个方面。 1.明确业务目标 在设计Flink框架之前,需要明确业务需求和目标。这包括了解数据流的处理...【详细内容】
2023-10-16  AI改变你我  微信公众号  Tags:Flink系统   点击:(36)  评论:(0)  加入收藏
AI如何改变数据中心设计
2023年至2026年,全球在AI系统上的支出将翻一番,显然,数据中心的容量将迅速增加,以满足需求。然而,令人惊讶的是,在过去的一年里,许多数据中心运营商对新项目踩下了刹车,放缓了投资,伦...【详细内容】
2023-10-10    千家网  Tags:数据中心   点击:(31)  评论:(0)  加入收藏
如何理解云计算,大数据和人工智能三者间的关系?
大数据技术是指:从各种各样类型的数据中,快速获得有价值信息的能力。适用于大数据的技术,包括大规模并行处理(MPP)数据库,数据挖掘电网,分布式文件系统,分布式数据库,云计算平台,互联...【详细内容】
2023-10-08  智黑科技    Tags:大数据   点击:(22)  评论:(0)  加入收藏
这才是真正的数据分析报告,你那只是念PPT
很多同学都有类似困扰:辛辛苦苦写的数据分析报告,却没有人看!如果在现场讲数据分析报告,你会发现开场最多10分钟,这些哥们就纷纷掏出手机,愉快地搓起来。为啥?!这还得从报告是怎么写...【详细内容】
2023-09-27  接地气的陈老师  微信公众号  Tags:数据分析   点击:(23)  评论:(0)  加入收藏
快速建立数据分析思路
做数据分析,总会面临这种模糊问题:“分析一下运营情况,要深入一点”“近期销售咋样,分析分析”“分析下近期的活动……” 总之,字数越少,麻烦越大。因为真的不知道提...【详细内容】
2023-09-26  接地气的陈老师    Tags:数据分析   点击:(21)  评论:(0)  加入收藏
Python自动化数据处理:轻松处理重复工作
Python是一种功能强大且广泛使用的编程语言,可以用于自动化处理数据。自动化数据处理可以帮助减少重复的工作任务,提高效率和准确性。在接下来的内容中,将介绍一些常用的Python...【详细内容】
2023-09-25  编程技术汇  今日头条  Tags:自动化数据   点击:(18)  评论:(0)  加入收藏
什么是数据中心虚拟化? 它的工作原理及其好处
简单来说,数据中心虚拟化是创建物理数据中心资源的虚拟副本的过程。 这包括所有硬件和软件资源,例如服务器、存储设备、网络、操作系统、应用程序和平台。随着公司进行数字化...【详细内容】
2023-09-25    千家网  Tags:数据中心   点击:(17)  评论:(0)  加入收藏
站内最新
站内热门
站内头条