写入文件的原始磁盘扇区

Writing to a files raw disk sectors

本文关键字:磁盘 扇区 原始 文件      更新时间:2023-10-16

我正在操作系统可移植数据库服务器上工作,我想知道在不锁定整个文件的情况下读/写索引文件磁盘扇区的最佳方法是什么。我的数据库磁盘管理器有一个位图,可以跟踪索引文件中所有已使用/未使用的扇区的位置。此外,有没有一种操作系统可移植的方式来做到这一点?

读取/写入索引文件磁盘扇区,而不锁定整个文件。

您可以只锁定正在写入的部分(文件)。在Windows下,这将使用LockFile完成。顺便说一句,为什么不锁定整个文件很重要?无论如何,您的服务器都可以独占访问它,并且它可以在内部管理锁定(除非您想要一个无服务器/嵌入式数据库,同时仍允许多个客户端连接到它)。

为了实现事务持久性,您还需要确保写入的数据不会在缓存/缓冲区中滞留,并且在正确的时间物理写入磁盘。在Windows下,考虑将FILE_FLAG_WRITE_TROUGH(可能还有FILE_FLAG-NO_BUFFERING,假设您自己进行缓存管理)传递给CreateFile。

我不认为有任何独立于操作系统的API可以实现这一点——你需要在每个支持的操作系统下以一种特殊的方式来实现。当然,没有什么可以阻止您封装特定于操作系统的代码,并向系统的其他部分提供统一的接口。