mysql的预写日志_为什么SQL数据库在命令日志上使用预写日志?

我认为最好改一下:

为什么新的分布式VoltDB使用命令日志而不是预写日志?

让我们做一个实验,想象一下您将要编写自己的存储/数据库实现。 毫无疑问,您足够先进,可以抽象一个文件系统并使用块存储以及一些其他优化功能。

一些基本术语:

状态:在给定时间点存储的信息

命令:对存储的指令以更改其状态

因此,您的数据库可能如下所示:

67217a1edad554c3df9c4d3db92b1bf7.png

下一步是执行一些命令:

59e3128ae568fc712172ce6076e164a9.png

请注意几个重要方面:

命令可能会影响许多存储的实体,因此许多块会变得脏乱

下一个状态是当前状态和命令的函数

可以跳过某些中间状态,因为只需有一系列命令即可。

fbfe5892e2d5b125cc1a9b423856894f.png

最后,您需要保证数据完整性。

预写日志-中心概念是在对永久存储进行任何重大更新之前,应记录状态更改。 按照我们的想法,我们可以记录每个块的增量更改。

命令记录-中心概念是仅记录用于产生状态的命令。

49b5fed76a37509d431185e2cd9304d8.png

两种方法都有优点和缺点。 预写日志包含所有更改的数据,命令日志将需要进行其他处理,但又快速又轻巧。

VoltDB:命令记录和恢复

命令记录的关键是它记录调用,而不是记录调用。 交易的后果。 通过仅记录调用, 命令日志保持在最低限度,从而限制了磁盘I / O的影响 有表现。

补充笔记

SQLite:预写日志

传统的回滚日志的工作原理是编写 将原始未更改的数据库内容存储到单独的回滚日志中 文件,然后将更改直接写入数据库文件。

当附加表示提交的特殊记录时,将发生COMMIT 到沃尔玛。 因此,即使没有写入 原始数据库,使读者可以继续从 原始未更改的数据库,同时进行更改 致力于WAL。

PostgreSQL:预写日志记录(WAL)

使用WAL可大大减少磁盘写入次数, 因为只有日志文件需要刷新到磁盘才能保证 提交事务,而不是更改每个数据文件 通过交易。

日志文件是按顺序写入的,因此 同步日志的费用远少于刷新日志的费用 数据页。 对于处理许多小型服务器的服务器尤其如此 涉及数据存储不同部分的交易。 此外, 当服务器正在处理许多小的并发事务时,一个 日志文件的fsync足以提交许多事务。

结论

命令记录:

是比较快的

占地面积小

具有较重的“重播”过程

需要频繁快照

预写日志记录是一种提供原子性的技术。 更好的命令记录性能还应该改善事务处理。 1英尺数据库

095b905ccdcce13700f8b4ff5d826740.png

确认书

VoltDB博客:VoltDB命令记录简介

命令记录优于ARIES样式记录的一个优点是 可以在执行开始之前记录事务,而不是执行 事务并等待日志数据刷新到磁盘。 另一个 优点是命令日志所需的IO吞吐量为 由用于中继命令的网络限制,如果是 Gig-E,这种吞吐量可以通过廉价的商品磁盘来满足。

重要的是要记住VoltDB是按其性质分布的。 因此,事务处理起来有些棘手,性能影响也很明显。

VoltDB博客:VoltDB的新命令记录功能

VoltDB中的命令日志由存储过程调用和 他们的参数。 在每个节点上创建一个日志,并且每个日志是 复制,因为所有工作都复制到多个节点。 这个 导致复制的命令日志,可以在重播时将其删除 时间。 因为VoltDB事务是有序的,所以该命令 日志还包含订购信息。 因此可以发生重播 按照原始交易执行的确切顺序,包括全部 VoltDB提供的事务隔离。 由于调用本身 通常小于修改后的数据,并且可以先记录下来 他们的承诺,这种方法对 性能。 这意味着VoltDB用户可以实现相同的 平流层性能指标,具有更高的耐用性 保证。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值