我正在开发一个OS便携式数据库服务器,我想知道在没有锁定整个文件的情况下读取/写入索引文件磁盘扇区的最佳方法是什么。我的数据库磁盘管理器有一个位图,用于跟踪索引文件中扇区所有使用/未使用的位置。另外,有一种OS可移植的方式吗?
答案 0 :(得分:1)
...读取/写入索引文件磁盘扇区而不锁定整个文件。
您只能锁定要写入的部分(文件)。在Windows下,这将使用LockFile完成。顺便说一句,为什么不锁定整个文件很重要?您的服务器无论如何都可以独占访问它,它可以在内部管理锁定(除非您需要无服务器/嵌入式数据库,同时仍允许多个客户端连接)。
要实现事务durability,您还需要确保您编写的数据不会在缓存/缓冲区中停留,并且正在以正确的时间物理写入磁盘。在Windows下,考虑将FILE_FLAG_WRITE_THROUGH(可能还有FILE_FLAG_NO_BUFFERING,假设您自己进行缓存管理)传递给CreateFile。
我不认为有任何与操作系统无关的AP - 你需要在每个支持的操作系统下以特殊方式进行操作。当然,没有什么可以阻止您封装特定于操作系统的代码并向系统的其余部分提供统一的接口。