Redis持久化操作RDB和AOF 对比于HDFS的SecondaryNode
写在前面的话
最近学习比较多流行的大数据框架和完成两个大数据项目后,又突然学起了Redis。之所以之前的框架不学习记录呢,是因为之前的学习都是为了完成参加服创比赛的项目所以时间较紧,现在基本架构和编码测试完成,就开始学习新的知识并且尝试优化服创项目。当然我也不愿意复制老师的PPT写成自己的博客:),这里记录的是我在学习过程中自己的一些思考和之前大数据框架(AOF、RDB与HDFS中的SecondaryNode)的对比(大数据人绝不CV。
PS:服创项目是我从0开始的项目,等服创比赛结束后再来复盘!
Redis
Redis,REmote DIctionary Server(远程字典服务器),作为内存数据库, 同时作为NoSQL的一员,与传统的RDBMS区别还是挺大的(我最大的感觉就是简单和快速。
(读到这里那一定会有读者问了:)作为数据库,那么一定能存储数据,但是又是运行在内存中的,那怎么才能保证数据不丢失呢!(即持久化)
那便是持久化!并且有两种方式可以进行持久化,分别是RDB(Redis DataBase)和AOF(Append Only File)。笔者在学习过程中,总是脑海中不断与HDFS的SecondaryNode的备份方式进行比较,故此文作为记录!
下图是Namenode和SecondaryNode的工作流程图:

RDB -Redis DataBase
RDB持久化
Redis运行过程中,达到了一定时间点或者其他限制(比如手动刷写),启动一个子进程fork整个主进程,在子进程中将redis中的数据写入到一个临时文件中,等这个持久化过程结束后,将这个临时文件替换上次持久化的文件。
笔者在初次接触到这个理念的时候,立马就觉得这个很有可能会丢失最近一次的持久化,这不就是冷备份嘛!那secondaryNode不也是冷备份嘛。重点就在于RDB保存的是数据文件(默认为dump.rdb),就像是secondary保存的FsImage.checkpoint一样,类似于数据库中的物理备份。
下图是RDB的流程图:

配置
Redis的配置文件中就可以配置出发RDB的工作的条件:
| 名称 | 内容 |
|---|---|
| save | 配置快照出发的条件,例如save 120 2,表示在两分钟内修改了2次触发RDB,save ""表示关闭RDB。 |
| stop-writes-on-bgsave-error | 如果配置成no,表示你不在乎数据不一致或者有其他的手段发现和控制 |
| rdbcompression | 是否对于存储的数据文件进行压缩,当然这需要消耗额外的CPU资源 |
| rdbchecksum | 是否对于存储的文件使用CRC64算法进行校验 |
| dbfilename | 存储的RDB数据文件名称,默认为dump.rdb |
| dir | 工作路径 |
优劣势
优势:适合大规模的数据恢复;对数据完整性和一致性要求不高
劣势:在一定间隔时间做一次备份,所以如果redis意外down掉的话,就会丢失最后一次快照后的所有修改;fork的时候,内存中的数据被克隆了一份,大致2倍的膨胀性需要考虑;同时子进程写入的时候是不可以主进程不能进行任何的IO操作
AOF-Append Only File
AOF持久化
相比于RDB的持久化,AOF采取就是将每次写入操作写入日志,在每次恢复的时候重新执行一次日志文件中的写入操作就可以了。
这里是不是很容易就联想到NameNode的edit日志,NameNode如果不走SecondaryNode的话,执行的也是将操作保存在文件中,而不是数据文件,这里就类似于数据库的逻辑备份。
下图是AOF持久化的流程图:

配置
| 名称 | 内容 |
|---|---|
| appendfsync | 同步的机制,Always表示实时同步,everysec表示每秒同步,no表示不同步 |
| no-appendfsync-on-rewrite | 重写时是否可以运用Appendfsync,用默认no即可,保证数据安全性。 |
| auto-aof-rewrite-min-size | 设置重写的基准值 |
| auto-aof-rewrite-percentage | 设置重写的基准值百分比 |
优劣势
优势:相比于RDB,一致性较好。
劣势:相同数据集的数据而言aof文件要远大于rdb文件,恢复速度慢于rdb;aof运行效率要慢于rdb,每秒同步策略效率较好,不同步效率和rdb相同
总结
这么对比下来,HDFS中采用的方法归根结底还是冷备份。如果HDFS只用RDB的方式,NN的压力太大,如果只用AOF的方式,效率太低,所以两者结合才是最好的方式,而这种方式对于Redis来说又过于重量级了。HDFS还将将备份文件放置在了另一台机器上,当然,Redis也可以做到,毕竟Redis是分布式数据库,存在主从复制。
这篇博客,没有涉及到Redis的具体操作,只是用来记录Redis的持久化机制,并且和HDFS的备份方式进行对比从而方便更好的理解和记忆。
人生此处,绝对乐观
Redis持久化操作RDB和AOF 对比于HDFS的SecondaryNode的更多相关文章
- 详解Redis持久化(RDB和AOF)
详解Redis持久化(RDB和AOF) 什么是Redis持久化? Redis读写速度快.性能优越是因为它将所有数据存在了内存中,然而,当Redis进程退出或重启后,所有数据就会丢失.所以我们希望Red ...
- Redis 持久化之RDB和AOF
Redis 持久化之RDB和AOF Redis 有两种持久化方案,RDB (Redis DataBase)和 AOF (Append Only File).如果你想快速了解和使用RDB和AOF,可以直 ...
- redis持久化(RDB、AOF、混合持久化)
redis持久化(RDB.AOF.混合持久化) 1. RDB快照(snapshot) 在默认情况下, Redis 将内存数据库快照保存在名字为 dump.rdb 的二进制文件中. 你可以对 Redis ...
- Redis基础(三)Redis持久化:RDB与AOF
什么是Redis持久化? Redis是键值对的内存数据库,它将数据存储在内存里.客户端发送命令到服务器,再由服务器到内存里查找数据. 一旦Redis服务器进程退出,存储在内存里的数据就会丢失. 为了解 ...
- redis学习(四)redis持久化之RDB、AOF
redis是内存数据库,它把数据存储在内存中,这样在加快读取速度的同时也对数据安全性产生了新的问题,即当redis所在服务器发生宕机后,redis数据库里的所有数据将会全部丢失.为了解决这个问题,re ...
- 详细分析Redis的持久化操作——RDB与AOF
一.前言 由于疫情的原因,学校还没有开学,这也就让我有了很多的时间.趁着时间比较多,我终于可以开始学习那些之前一直想学的技术了.最近这几天开始学习Redis,买了本<Redis实战>, ...
- 【Redis】Redis学习(七) Redis 持久化之RDB和AOF
Redis 持久化提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF ...
- redis——持久化方式RDB与AOF分析
https://blog.csdn.net/u014229282/article/details/81121214 redis两种持久化的方式 RDB持久化可以在指定的时间间隔内生成数据集的时间点快照 ...
- Redis持久化方式--RDB和AOF
转载于:https://www.cnblogs.com/xingzc/p/5988080.html Redis提供了RDB持久化和AOF持久化 RDB机制的优势和略施 RDB持久化是指在指定的时间间隔 ...
随机推荐
- C#中word导出功能骚操作
马上过牛年了,先祝大家新年好,身体好,心情好!!! 年前最后写一篇之前项目开发的一个功能,自己根据系统业务,想到的一个解决办法,效率还是不错的,废话不多说,开整!!! 需求:企业填报自己的企业信息到系 ...
- [整理] LRU 算法的实现方式
目录 概念 方法选择 实现方案(基于LinkedHashMap) 改进方案 1.LRU-K 2.Two queue 3.Multi Queue(MQ) LRU类算法对比 LRU 在 Redis 中的应 ...
- K8S(01)二进制部署实践-1.15.5
系列文章说明 本系列文章,可以基本算是 老男孩2019年王硕的K8S周末班课程 笔记,根据视频来看本笔记最好,否则有些地方会看不明白 需要视频可以联系我 目录 系列文章说明 1 部署架构 1.1 架构 ...
- Gif2mp4 by Python
参考链接 目的: $ .gif \rightarrow .mp4 $ 解决: pip install MoviePy import moviepy.editor as mp clip = mp.Vid ...
- Pycharm无法import caffe
这里是首先建立在读者可以在终端导入而无法在Pycharm中导入的情况下的: 参考链接(问题的最后一个回答) 选用了虚拟环境的python作为解释器, 但由于caffe的特殊性, 依然没有导入, 原因就 ...
- TypeScript callback Object params
TypeScript callback Object params 回调函数 对象 参数 const func = (options = {}) => { // do somthing retu ...
- Interview Questions All In One
Interview Questions All In One web fullstack System Design Operating System Object-Oriented Design O ...
- React SSR in Action
React SSR in Action react render HTML string from the server ReactDOMServer https://reactjs.org/docs ...
- js 实现红绿灯变换
class LightFn{ async run(){ while(true){ console.log('this is green 3000'); await this.sleep(3000); ...
- CSS中Position属性static、absolute、fixed、relative
在html中网页可以看成一个立体的空间,一个完整的页面是由很多个页面堆积形成的,如下图所示 CSS中Position属性有四个可选值,它们分别是:static.absolute.fixed.rel ...