mysql的预写日志_编写数据库:第2部分-预写日志

所以,您的数据不是很耐用...

在第1部分中,我使用gRPC和Go编写了一个非常简单的服务器,该服务器用于服务Get和Put请求内存中的映射。如果服务器退出,它将丢失所有数据,对于数据库,我必须承认这是非常糟糕的。

我实现了预写日志记录,允许在服务器重新启动时恢复内存中状态。尽管这个想法真的很简单,但实现起来却是很困难的!最后,我看了 LevelDB , Cassandra 和 etcd 如何解决此问题。

预写日志

预写日志(WAL)是数据库系统中一种常用的技术,用于保证写操作的原子性和持久性。WAL背后的关键思想是,在我们对数据库状态进行任何实际修改之前,我们必须首先记录我们希望是原子性的和持久存储(例如磁盘)的完整操作集。

通过在将更改应用于例如内存中表示之前,先将预期的改变写入WAL来提供持久性。通过首先写入WAL,如果数据库之后崩溃,我们将能够恢复改变并在必要时重新应用。

原子性更加微妙。假设一个改变需要改变A,B而C发生,但是我们的应用没有办法一下应用所有的改变。我们可以先记日志

intending to apply A

intending to apply B

intending to apply C

复制代码

然后才开始制作实际的应用程序。如果服务器中途崩溃,我们可以查看日志并查看可能需要重做的操作。

在DDB中,WAL是记录 append-only 的文件:

record:

length: uint32 // length of data section

checksum: uint32 // CRC32 chec

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值