有可用于将可写入文件映射到内存的内存映射工具。我希望所有现代操作系统都能异步地反映内存对磁盘的变化,那么为什么大多数关系数据库会使用日志文件/日志呢?
答案 0 :(得分:4)
使用memmapped文件(一般是RAM缓存),使用日志
并写入磁盘并不矛盾。
在RAM中保留大量使用的数据将加速一切。
不会立即将更改写入磁盘 如果发生碰撞(停电......),可能造成数据丢失 (主要数据和/或日志)。
更改日志很有用,例如,在使用事务性内容时
而不是单个陈述(即,必须执行的多个动作
完全或没有):如果在运输过程中发生了崩溃,
重启后,磁盘上会出现不一致的数据
(只完成部分交易)
通过更改日志,可以再次撤消半交易
编辑:当一个插入/更新...没有直接映射到磁盘块,
通过缓存/写入某些磁盘块无法解决。
编辑@ comment: 不,正如我所说,db操作不会映射到磁盘块 让我们说表中有三个值:v1,v2,v3 v1和v2在块b2中的HDD块b1,v3中。
用户现在想要的:首先,将v1更改为100
然后在事务中添加123到v2和v3,
即。要么添加两者,要么不添加。
v1和v2的变化顺利进行,然后断电。
理论上,v2需要对旧值进行“回滚”
你如何只使用日记FS来做到这一点?
您可能会拥有磁盘块b1的旧内容和新内容
新内容v2已经改变:坏。
如果您使用旧内容,则也可以撤消v1的更改。坏。
您可以从新区块中取v1,从旧区块中取v2,是的
但是你怎么知道,没有数据库日志的哪个块可以采取什么?
edit2 :如果您可以在评论中保持原始问题不变,那就太好了。
它类似于“如果日记FS不会弃用数据库日志”。