NVWAL 非易失Write-Ahead Log设计(前提知识)

NVM

大容量、非易失、可字节寻址、存取速度快(几乎与DRAM相当)

B Tree

在这里插入图片描述
每个节点占用一个盘块的磁盘空间
1.模拟查找关键字29的过程:
2.根据根节点找到磁盘块1,读入内存。【磁盘I/O操作第1次】
3.比较关键字29在区间(17,35),找到磁盘块1的指针P2。
4.根据P2指针找到磁盘块3,读入内存。【磁盘I/O操作第2次】
5.比较关键字29在区间(26,30),找到磁盘块3的指针P2。
6.根据P2指针找到磁盘块8,读入内存。【磁盘I/O操作第3次】
7.在磁盘块8中的关键字列表中找到关键字29。

预写式日记

在使用WAL的系统中,所有的修改在提交之前都要先写入log文件中。
就好像我们写备忘录一样,我们要做什么就先写在备忘录里面.然后根据备忘录确定我们要做的事情是做了还是没做或者只做了一点. WAL就类似这个原理,然后就能保证原子性和持久性

维基百科的解释
https://zh.wikipedia.org/wiki/预写式日志

in-place算法

就地更新,不需要额外的空间辅助去更新原来的空间数值

n-1是最后一位, n-2是 除去中间那位 /2就是分成两半 n-1-i 就是要 和他交换的数 离开头多远,这个数就离末尾多远.
in-place

ACID

Atomicity(原子性):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

SQLite

是遵守ACID的关系数据库管理系统,也就是说 是一个DBMS

维基百科
https://zh.wikipedia.org/wiki/SQLite

dirty data

事务A更新了某个数据项X,但是由于某种原因,事务A出现了问题,于是要把A回滚。但是在回滚之前,另一个事务B读取了数据项X的值(A更新后),A回滚了事务,数据项恢复了原值。事务B读取的就是数据项X的就是一个“临时”的值,就是脏数据。

page differential

https://img-blog.csdn.net/20161019204349291

在这里插入图片描述

memory barrier

语义上,内存屏障之前的所有写操作都要写入内存;内存屏障之后的读操作都可以获得同步屏障之前的写操作的结果。因此,对于敏感的程序块,写操作之后、读操作之前可以插入内存屏障。

https://zh.wikipedia.org/wiki/内存屏障

cache line and cache line flush

Cache Line可以简单的理解为CPU Cache中的最小缓存单位

Heapo

fdatasync()

fdatasync(),linux系统调用。用来刷新数据到磁盘。
fsync函数只对由文件描述符filedes指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。fsync可用于数据库这样的应用程序,这种应用程序需要确保将修改过的块立即写到磁盘上。
fdatasync函数类似于fsync,但它只影响文件的数据部分。而除数据外,fsync还会同步更新文件的属性(文件的大小,属性等)。

dccmvac() dccimvac()

dccmvac instruction needs to access register 15 in privileged
mode

two cache flush structions: dccimvac and dccmvac The former invalidates
the flushed cachelines while the latter does not

So you’d clean the data cache to PoU and then invalidate the I cache.
https://community.arm.com/processors/f/discussions/2863/what-is-the-difference-between-poc-and-pou-for-cortex-a7-mpcore

猜你喜欢

转载自blog.csdn.net/u013129143/article/details/83145051
今日推荐