欢迎来到 天门市某某矿山设备经销部
全国咨询热线:020-123456789
联系我们

地址:联系地址联系地址联系地址

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

新闻中心
Write-Ahead Log (预写日志)
  来源:天门市某某矿山设备经销部  更新时间:2024-05-01 08:12:37

Write-Ahead Log (预写日志)

WAL 概述

WAL 是写日 write-ahead log 系统 ,其核心思想是写日将用户的所有修改操作(插入 、删除)写入日志,写日然后再应用到系统状态。写日一旦日志写入成功,写日就可以通知用户操作成功 。写日由于日志采用尾部追加方式写入 ,写日耗时较短 ,写日因此不会长时间阻塞用户线程 。写日另外 ,写日为防止意外退出导致数据丢失,写日系统重启时会根据日志重做用户操作 ,写日保证数据可靠性。写日

Write-Ahead Log (预写日志)

WAL - 预写日志

WAL 一直是传统 RDBMS 系统中的一个共识 ,用于帮助保证原子性和持久性(ACID 的写日 A 和 D)。对表的所有更新首先写入 WA) ,然后异步的方式使用 。

示例 WAL 和 WALEntry 结构 :

type WAL struct { n dir string // 存放 WAL 文件的目录 。nn file *os.File // 引用文件nn metadata []byte // 每个 WALn 解码器头部记录的元数据 *decoder // 解码器解码记录n 编码器 *encoder // 编码器编码记录n n mutex sync.Mutex // To确保每个写入器一次更新n lastIndex uint64 // 保存到 WAL 的最后一个条目的索引n} nntype WALEntry struct { n lsn uint64 // 每个日志条目的唯一标识符n data []byte // 实际 WAL 条目(以字节为单位) n crc uint32 // crc for数据完整性验证n type uint32 // wal 记录的类型 n}n

为什么需要 WAL

为什么不将更改直接刷新到实际数据文件?

它有2个方面——

  1. 对磁盘的写入永远不会真正直接刷新 ,数据经过各种缓冲区(RAM/缓冲区缓存/磁盘缓存) ,然后才真正刷新到磁盘扇区 。这些缓存有助于减少磁盘写入次数 ,有助于提高性能  ,但是,它们的缺点是,如果出现重启/崩溃,这些中间缓存中的数据会丢失 ,从而影响我们数据的持久性 。如果我们开始避免缓存,每次写后进行磁盘刷新 ,这样的动作会影响系统的性能和吞吐量。
  2. 如上面提到的 ,磁盘写入很慢,在磁盘写入中,与随机磁盘写入相比 ,顺序磁盘写入要快得多(也适用于 SSD) 。
Write-Ahead Log (预写日志)

WAL设计

WAL 是一个仅附加日志,它将数据存储中的每个状态更改存储为日志  。

一个单独的异步进程可以从 WAL 读取操作 ,然后按照正常流程通过不同的缓存将数据更新应用于磁盘上的实际数据文件,有助于提高数据存储的写入吞吐量。

此外 ,如果发生故障,可能会有未应用的更新 ,由于我们在 WAL 文件中存在操作  ,我们可以从 WAL 重放操作并应用它们以使数据存储恢复到一致状态 。因此 ,WAL 帮助我们确保数据的完整性和可靠性,同时仍然允许我们的数据存储具有高写入吞吐量 。

注意事项

1. 将 WAL 操作刷新到磁盘

如前所述,对磁盘的写入可能不会直接刷新,考虑到写入系统中导致性能的问题 ,需要进行权衡刷新频率或微批处理或两者来将更改刷新到磁盘,以帮助提高性能。请注意 ,此处存在数据丢失的风险。

2. 损坏检测

需要确保任何刷新到磁盘的操作都不会损坏, WAL 记录还包含一个 CRC 值,该值可用于验证何时从 WAL 读取记录并确保没有损坏 。

3. 重复操作

由于 WAL 是一个附加追尾的文件  ,因此如果客户端由于通信故障而重试 ,可能会遇到在 WAL 上写入重复操作的情况 。因此 ,每当读取 WAL 时,要确保忽略重复项 ,或者对应用数据的动作具有幂等性的。

现状

1)所有数据库,包括像Cassandra这样的NoSQL数据库都使用WAL来保证持久性 。

2) Kafka 使用了与 WAL(Commit Log) 类似的结构 。

3) 像 Rocks DB、Level DB 这样的 KV 存储和像 Apache Ignite 这样的分布式缓存也使用 WAL 。

概括

总而言之,WAL 提供一下价值

1) 更快的性能和吞吐量 ,避免了所有更改的数据刷新/磁盘写入。

2) 重启时的可恢复性,操作可以从 WAL 应用到实际的数据存储 。

3)能够恢复到时间点快照 ,我们在 WAL 中存在所有操作 。


友情链接原神鱼饵制作方法教程魔兽世界字体怎么设置 魔兽世界字体设置方法dota2饰品怎么交易-国服饰品交易流程详解魔兽世界月牙怎么获得(魔兽世界月牙百合花在哪打)《原神》鱼饵合成位置介绍 鱼饵在哪合成DNF9.24版本新道具盘点 各式道具帮助玩家成长色弱看到的颜色是怎么样的?我们怎么看到色弱看到的颜色?奥拉星断海流玄武深度解析WAR3魔兽世界竞技场,黑石深渊竞技场掉落大全我的暑假生活作文魔兽幻化攻略:授之以渔 幻化搭配心得分享dnf男格斗刷图:DNF男格斗刷图全攻略如何评价李硕的《翦商:殷周之变与华夏新生》?lol截图在哪个文件夹(wegamelol截图在哪)2神话 6限定 11传说 28史诗 105皮肤 13炫彩 167英雄 翡翠《火炬之光无限》SS2赛季召唤1刻7怎么玩? SS2赛季召唤1刻7攻略好豪棋牌火影网页游戏哪个好玩,关于火影忍者的网页游戏都有哪些天刀助手APP怎么用 如何扫码登陆补签lol奖励,英雄联盟领取奖励是什么梗921新破天一剑sf页游发布网一周标准高分卡组盘点20210809lol烈焰雄心崔丝塔娜皮肤视频特效半价购买地址2015,哪些发明改变未来健康生活?背后灵第2章图文通关攻略lol季中赛WE兮夜卢锡安中单出装玩法技巧 7.9版本卢锡安神装推荐光遇黑水港湾的沉船冥想在哪里在什么地方 远古战场冥想在哪里推荐DNF:12月嘉年华“爆料”,转职书+龙袍跨界,氪金才能拿到2023奇迹超变态服9999阶合集 奇迹超变态服9999阶版本大全dota2赏金猎人出装,创造奇迹的三号位DNF100级男圣职者转职职业推荐 100级男圣职转什么职业好魔兽世界火山石幼龙怎么获得光遇:这些公认的帅哥发型,原来是女生头2023自由度很高的绅士游戏下载排行 2023绅士必玩的游戏下载推荐DNF赚钱攻略之囤货篇 教你快速赚钱换点券最好玩的美眉小游戏WOW史上脸最黑玩家,DK马刷了1500次,但今天奇迹终于出现了!魔兽世界如何充值,魔兽世界充值攻略,轻松充值不再愁lol美服客户端 v13.23官方版dnf刃影100级毕业装备怎么选择-刃影100级毕业装备推荐《王者荣耀》黄忠最强输出六神装及铭文搭配推荐
联系我们

地址:联系地址联系地址联系地址

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

0.2964

Copyright © 2024 Powered by 天门市某某矿山设备经销部   sitemap