我认为最好改一下:
为什么新的分布式VoltDB使用命令日志而不是预写日志?
让我们做一个实验,想象一下您将要编写自己的存储/数据库实现。 毫无疑问,您足够先进,可以抽象一个文件系统并使用块存储以及一些其他优化功能。
一些基本术语:
状态:在给定时间点存储的信息
命令:对存储的指令以更改其状态
因此,您的数据库可能如下所示:
下一步是执行一些命令:
请注意几个重要方面:
命令可能会影响许多存储的实体,因此许多块会变得脏乱
下一个状态是当前状态和命令的函数
可以跳过某些中间状态,因为只需有一系列命令即可。
最后,您需要保证数据完整性。
预写日志-中心概念是在对永久存储进行任何重大更新之前,应记录状态更改。 按照我们的想法,我们可以记录每个块的增量更改。
命令记录-中心概念是仅记录用于产生状态的命令。
两种方法都有优点和缺点。 预写日志包含所有更改的数据,命令日志将需要进行其他处理,但又快速又轻巧。
VoltDB:命令记录和恢复
命令记录的关键是它记录调用,而不是记录调用。 交易的后果。 通过仅记录调用, 命令日志保持在最低限度,从而限制了磁盘I / O的影响 有表现。
补充笔记
SQLite:预写日志
传统的回滚日志的工作原理是编写 将原始未更改的数据库内容存储到单独的回滚日志中 文件,然后将更改直接写入数据库文件。
当附加表示提交的特殊记录时,将发生COMMIT 到沃尔玛。 因此,即使没有写入 原始数据库,使读者可以继续从 原始未更改的数据库,同时进行更改 致力于WAL。
PostgreSQL:预写日志记录(WAL)
使用WAL可大大减少磁盘写入次数, 因为只有日志文件需要刷新到磁盘才能保证 提交事务,而不是更改每个数据文件 通过交易。
日志文件是按顺序写入的,因此 同步日志的费用远少于刷新日志的费用 数据页。 对于处理许多小型服务器的服务器尤其如此 涉及数据存储不同部分的交易。 此外, 当服务器正在处理许多小的并发事务时,一个 日志文件的fsync足以提交许多事务。
结论
命令记录:
是比较快的
占地面积小
具有较重的“重播”过程
需要频繁快照
预写日志记录是一种提供原子性的技术。 更好的命令记录性能还应该改善事务处理。 1英尺数据库
确认书
VoltDB博客:VoltDB命令记录简介
命令记录优于ARIES样式记录的一个优点是 可以在执行开始之前记录事务,而不是执行 事务并等待日志数据刷新到磁盘。 另一个 优点是命令日志所需的IO吞吐量为 由用于中继命令的网络限制,如果是 Gig-E,这种吞吐量可以通过廉价的商品磁盘来满足。
重要的是要记住VoltDB是按其性质分布的。 因此,事务处理起来有些棘手,性能影响也很明显。
VoltDB博客:VoltDB的新命令记录功能
VoltDB中的命令日志由存储过程调用和 他们的参数。 在每个节点上创建一个日志,并且每个日志是 复制,因为所有工作都复制到多个节点。 这个 导致复制的命令日志,可以在重播时将其删除 时间。 因为VoltDB事务是有序的,所以该命令 日志还包含订购信息。 因此可以发生重播 按照原始交易执行的确切顺序,包括全部 VoltDB提供的事务隔离。 由于调用本身 通常小于修改后的数据,并且可以先记录下来 他们的承诺,这种方法对 性能。 这意味着VoltDB用户可以实现相同的 平流层性能指标,具有更高的耐用性 保证。