【发布时间】:2012-06-28 09:04:20
【问题描述】:
上下文
这纯粹是为了教育目的。我想写一个原始数据库。重点不在于表现;但只是数据库背后的原则。我已经有关于锁定/互斥体/事务的材料。我一无所知的是写入磁盘/保证意外硬件(例如电源)故障的持久性。
为了有适当的恢复/持久性,我在将文件写入磁盘时需要一定的保证。
问题:
为了上述目的,我需要什么类型的文件原语(保证文件写入磁盘?保持文件打开并附加到日志?)? JVM 提供什么?
谢谢!
【问题讨论】:
-
考虑一个类似于 SQLite 使用的模型(已经讨论过)。 “真正”所需的只是原子排他锁和同步。此外,还可以在 现有 Java 数据库(如 H2SQL 或 Derby)上取得成功。
-
我的问题写得不好。我对 文件系统 原语感兴趣以确保持久性。我已经更新它以专注于文件系统原语。对此感到抱歉。
-
原子排他 file 锁和 file 同步 ;-) “刷新”将确保 进程缓冲区酡。真正的
fsync将等待/阻塞,直到磁盘实际将数据保存到媒体。 (或者操作系统对此撒谎。) -
stackoverflow.com/questions/4072878/i-o-concept-flush-vs-sync 应该有助于解释flush vs fsync