欢迎来到 江西某某化品经销部
全国咨询热线:020-123456789
联系我们

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

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

新闻中心
Write-Ahead Log (预写日志)
  来源:江西某某化品经销部  更新时间:2024-05-08 15:16:53

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 中存在所有操作。


友情链接gba牧场物语攻略(gba牧场物语攻略男孩版)三国9攻略(三国志9攻略)仙剑奇侠传4: 详细迷宫完全攻略三国志英杰传攻略(三国志英杰传结局解析)lost2攻略大全 全关卡通关指南三国志13部队进军速度图文攻略 (1)《官海沉浮录》京城会试攻略Steam省钱方法,阿根廷区、俄罗斯区、土耳其区新手终极攻略。2048怎么玩?2048游戏技巧窍门攻略大放送最强蜗牛神格系统怎么玩 最强蜗牛神格玩法攻略仙剑奇侠传之圆梦版1.1.1版攻略整理说明篇(Written by 鐘)修改1次东京攻略全文阅读侠客风云传天王线 夜叉攻略,侠客风云传 西域使节 结局怎么没夜叉刀剑封魔录——地狱全攻略【原】梦幻新诛仙:17张探灵地图超详细攻略汇总以及通关技巧分享皇帝成长计划2:金卡汉高祖-刘邦历史本纪攻略解析三国志战略版爆仓升7本怎么做的 爆仓升七级君王殿方法《pokemmo》合众攻略 pokemmo合众一二周目图文流程003三国志2吞食天地攻略,吞食天地之三国外传史克威尔《北欧女神剖析:起源》更新蕾娜斯插画新石器时代入门攻略 强力职业推荐弓箭传说商人与抽宝箱收益解析《北欧女神2》百余小时完全讨伐攻略仙剑奇侠传4完整图文攻略(详细地图物资标记)三国志7技术有什么用(三国志7技能攻略)刀剑封魔录OL新倚天屠龙记手游攻略大全 2023新手必备氪金技巧总汇梦幻西游端游最新自写攻略梦幻新诛仙手游长生攻略三国英杰传攻略 三国英杰传攻略+详细游戏资料【异度之刃2】新手攻略2020洛阳旅游攻略,收好,先从春节的1月开始2048朝代版完整25格 最新通关技巧攻略怪物猎人崛起怪物打法贪婪洞窟二攻略,贪婪洞窟二:完整攻略指南官居几品楚山王剧情攻略口袋妖怪心灵之金图文攻略(口袋妖怪起源心金小刚问题)梦幻新诛仙合欢派攻略 合欢派怎么玩《最终幻想7 重制版》尤菲DLC奖杯流程攻略ps4杀手攻略,怎样在ps4上玩杀手5
联系我们

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

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

0.2266

Copyright © 2024 Powered by 江西某某化品经销部   sitemap