美文网首页
数据读写机理小探之不丢数据

数据读写机理小探之不丢数据

作者: 淡淡的小番茄 | 来源:发表于2021-06-07 08:08 被阅读0次

    由于机械磁盘的物理局限性,使得随机读写的性能不高。为了提升数据落盘性能,就需要顺序写。很多中间件为了提升吞吐,在数据落盘的时候,一般都先将数据写入内存(程序内部或者文件系统的Page Cache),然后定时刷新到磁盘上。

    这样就引入一个新问题,因为数据存储到内存里是不安全的,机器断电重启后,内存里的数据就会丢失。然后怎么办呢?然后,引入了WAL,WAL 意为Write ahead log,预写日志。

    就是存在两路写入,先预写日志。

    比如mysql的redo log ,在写日志的时候,提供了三种写入方式(innodb_flush_log_at_trx_commit ):

    1、设置为0:事物提交时,写到缓冲区内的 redo log buffe。

    2、设置为1:事物提交的时候,redo log持久化到磁盘。

    3、设置为2:事物提交的时候,redo log写入到page cache。

    mysql是事务型的关系型数据库(ACID),想达到数据不丢失的效果,以redo log为例,需要将参数配置为1,在事物提交的时候,将redo log直接持久化到磁盘。另一方面,对于不支持事物的nosql数据库,没有事物的概念,他是如何保证数据的不丢失呢?

    这个问题确实比较难弄,引入WAL其实已经是个双保险,减少了数据丢失概率,如果真正的想数据不丢失,也只能采用mysql的实现方式,这样一做也就支撑了事务性,性能自然是要下降很多的。

    个人的一些理解,有错误的不准确的地方,欢迎指正。

    相关文章

      网友评论

          本文标题:数据读写机理小探之不丢数据

          本文链接:https://www.haomeiwen.com/subject/aigzsltx.html