私は OS ポータブル データベース サーバーで作業していますが、ファイル全体をロックせずにインデックス ファイルのディスク セクターを読み書きする最良の方法を知りたいです。私のデータベース ディスク マネージャーには、すべての使用済み/未使用のセクターがインデックス ファイル内のどこにあるかを追跡するビットマップがあります。また、これを行うOS移植可能な方法はありますか?
1 に答える
...ファイル全体をロックせずに、インデックス ファイルのディスク セクタを読み書きします。
書き込み先の (ファイルの) 部分だけをロックできます。Windows では、これはLockFileを使用して実現されます。ところで、なぜファイル全体をロックしないことが重要なのですか? とにかく、サーバーはそれに排他的にアクセスでき、ロックを内部で管理できます(サーバーレス/組み込みデータベースが必要な場合を除き、複数のクライアント接続を許可している場合を除きます)。
トランザクションの耐久性を実現するには、書き込むデータがキャッシュ/バッファーに残らず、正しいタイミングでディスクに物理的に書き込まれていることも確認する必要があります。Windows では、 CreateFileに FILE_FLAG_WRITE_THROUGH (および場合によっては FILE_FLAG_NO_BUFFERING、独自のキャッシュ管理を行う場合) を渡すことを検討してください。
これには、OS に依存しない AP はないと思います。サポートされている OS ごとに特別な方法で行う必要があります。もちろん、OS 固有のコードをカプセル化し、システムの残りの部分に対して統一されたインターフェイスを提示することを妨げるものは何もありません。