【问题标题】:Difference between Redis AOF and Tarantool WAL logRedis AOF 和 Tarantool WAL 日志的区别
【发布时间】:2017-04-17 19:26:03
【问题描述】:

我正在阅读有关 Tarantool 的 article,他们似乎说 AOF 和 WAL 日志的工作方式不同。

Tarantool:除了快照之外,它还有一个完整的 WAL(预写 日志)。因此它可以确保每次交易后的数据持久性 盒子外面。 Redis:实际上,它只有快照。从技术上讲, 您有 AOF(仅附加文件,所有操作都写入其中), 但它需要手动控制它,包括手动恢复后 重启。简单来说,使用 Redis 需要手动挂起服务器 时不时地制作快照并归档 AOF。

谁能更清楚地解释这两种策略之间的区别以及每种策略在高层次上的工作方式。

我一直认为 Redis AOF 与 SQL 数据库事务日志的工作方式相同,例如在 Postgresql 中实现,但我可能错了。

【问题讨论】:

    标签: database redis wal tarantool


    【解决方案1】:

    AOF 是 Redis 的主要持久性选项。每当有修改内存中数据集的写入操作时,都会记录该操作。因此,在重新启动期间,Redis 将重播所有操作以重建数据集。您还可以选择 3 种不同的 fsync 配置策略(不,每秒,总是)。 FWIW,如果您想要良好的数据安全水平,通常建议同时使用 AOF + RDB。这有点超出您的问题范围,但我想我会提到它。

    Main Redis Persistence Docs

    Redis Persistence Demystified

    Tarantool 使用一种叫做“WAL writer”的东西。这将在单独的线程中运行并记录操作数据“插入和更新请求”的请求。重新启动时,Tarantool 通过读取 WAL 文件并重放每个请求来恢复。

    Tarantool Persistence Docs

    内部结构明显不同,但在高层次上它们非常相似。文章中的持久性比较很奇怪,根本不正确。

    有关低级差异的更多信息,请参阅上面列出的文档。

    希望有帮助

    【讨论】:

      【解决方案2】:

      Redis:

      • IIRC,Redis 在服务请求的同一线程中写入日志。如果由于某种原因(RDB 写入、AOF 重写)磁盘速度很慢,这会导致停顿:单次写入操作可能会冻结整个服务线程,直到 write 系统调用完成。
      • Redis 无法使用 AOF 进行复制还原,因为 AOF 不包含操作位置。 Replica 只能依赖 master 的内存缓冲区,如果缓冲区不够大,无法容纳自上一个快照启动后的操作,则重新请求完整快照。我在半小时内有一次未恢复的副本,直到我认出它并手动增加了 master 的缓冲区大小。

      塔兰图尔:

      • Tarantool 在单独的线程中写入 WAL,事务线程与它异步对话。可能有很多写操作同时等待 WAL,而读操作根本没有被阻塞。
      • Tarantool 将 LSN 存储在 WAL 中,副本可以使用 WAL 进行恢复,即使它已关闭数小时。 Replica 甚至没有“重新请求快照”操作,因为在实践中它永远不会滞后到 master 上没有足够的 WAL。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-13
        • 1970-01-01
        • 1970-01-01
        • 2018-09-18
        • 1970-01-01
        • 1970-01-01
        • 2011-03-19
        相关资源
        最近更新 更多