0

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

4

1 回答 1

1

...在不锁定整个文件的情况下读取/写入索引文件磁盘扇区。

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

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

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

于 2012-09-08T17:55:31.103 回答