欢迎来到 百色市某某机电设备有限公司
全国咨询热线:020-123456789
联系我们

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

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

新闻中心
Write-Ahead Log (预写日志)
  来源:百色市某某机电设备有限公司  更新时间:2024-04-27 20:09:35

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


友情链接王者荣耀:最全野怪介绍,刷新时间与属性一览无余,打野值得一看魔兽世界7.0:法牧萨 搭配神器幻化套装推荐LOL双城之战活动半价皮肤一览,95款皮肤迎来5折优惠新版本伊泽瑞尔全解如何评价《NBA2K19》这款游戏?CF赛事皮肤抽奖中英雄级概率如何?看白鲨如何评价默然就知道了暗夜使者刺客加点推荐 地下城90级刺客刷图教程 2023推荐破解版手游游戏平台哪个最好 破解手游app平台最全推荐英雄联盟杰斯上单打法攻略分享 杰斯上单天赋符文搭配推荐DNF游戏现状,旭旭宝宝也在谈脱坑,红眼装备碎了就不玩魔兽tbc哈兰研究勋章有什么用处 哈兰研究勋章效果介绍 2023推荐最近火爆的苹果手机游戏推荐排名2022大全hls是什么?hls啥意思?黄龙县农村信用合作联社关于组建陕西黄龙农村商业银行股份有限公司相关事项的公告2022明日之后料理大赛最全攻略内容,2022摩尔庄园5月27日神奇密码是多少英雄联盟时间刺客怎么出装dnf赛丽亚的神灵的庇佑、神圣祝福药水怎么得?有什么用?校园动态 | 高考动员40天大会:再战江湖苦鏖战 直捣黄龙逞英豪DOTA2新手入门(3):dota中的俗称和简称宠物对战介绍 宠物品种对同一宠物间的影响适合18+啪啪手机游戏推荐2023dnf打孔镶嵌徽章颜色怎么选(地下城与勇士徽章打孔位置推荐)王者荣耀黄忠最强出装 一人守高地无人敢近身ASP.NET 路由实现页面静态化(附在线Demo和Source)《DNF》史诗灵魂怎么快速获得 平民史诗灵魂快速获得方法技巧分享云顶前期过渡天使的3种套路!维鲁斯领衔LOL努努重做后会滚雪球了!那么每个皮肤应该推什么样的雪球?原创率土之滨:技能原理没弄懂?形兵体系详解,配将不求人易视眼easyn官方版魔兽世界怀旧服史诗武器大全 全史诗武器效果介绍 格雷希尔,毁灭之黎明魔兽世界考达拉怎么去(魔兽世界考达拉在哪)DNF:金秋道具价格汇总!至尊装扮4700W,黄金增幅书沦为白菜价我的世界电脑版种子代码大全DNF:收集箱到期对伤害的影响有多大?有什么办法可以弥补吗英雄联盟手游充值攻略 充值有礼活动详解新锦标赛 烬城危机续三国志英杰传94攻略,三国志英杰版吞食天下1怎么去涪水城详细点《魔兽世界》9.0三系法师全攻略 天赋、橙装搭配及输出手法讲解LOL如何领取新手礼包?英雄联盟新手奖励在哪?《阴阳师》手游8月9日维护更新公告
联系我们

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

电话:020-123456789

传真:020-123456789

邮箱:admin@aa.com

0.1964

Copyright © 2024 Powered by 百色市某某机电设备有限公司   sitemap