3

最近、アプリケーションのワークスペースファイル形式をsqliteに変換しました。NFSでの堅牢な操作を保証するために、一般的な更新ポリシーを使用して、ローカルハードディスクの一時的な場所に保存されているコピーにすべての変更を加えます。保存する場合にのみ、元のファイルを一時ファイルと一緒にコピーして、元のファイル(NFS上にある可能性があります)を変更します。元のファイルを開いて排他ロックを維持するだけなので、他の誰かが開こうとすると、他の誰かがそれを使用していることが警告されます。

問題は次のとおりです。一時ファイルを元のファイルに保存し直すときは、元のファイルのロックを解除する必要があります。これにより、小さなウィンドウではありますが、他の誰かが元のファイルにアクセスして取得するためのウィンドウが提供されます。

私はこれを回避するいくつかの方法を考えることができます:

(1)sqlを使用して、一時の内容を元のファイルに単純にダンプします。つまり、元の、vacummの元にテーブルをドロップし、一時から選択して、元のファイルに挿入します。ただし、NFSに保存されているsqliteファイルに対してSQL操作を行うのは好きではありません。これは汚職の問題で私を怖がらせます。私はこのように考えるのは正しいですか?

(2)さまざまな追加ファイルを使用して、元のファイルに温度をコピーしているときに他のファイルが侵入するのを防ぐためのガードとして機能します。ミューテックスとしてファイルを使用することは、せいぜい問題があります。また、アプリケーションがクラッシュした場合に余分なファイルがぶら下がるという考えも好きではありません。

誰かがこれに対して別の解決策を持っているかどうか疑問に思います。他のアプリケーションが侵入して元のファイルを取得しないようにしながら、一時ファイルを元のファイルにコピーしますか?

私はpython2.5、sqlalchemy 0.6.6、sqlite3.6.20を使用しています

ありがとう、ディーン

4

1 に答える 1

2

SQLite NFS の問題は、壊れたキャッシングとロックが原因です。プロセスが NFS 上のファイルにアクセスする唯一のプロセスである場合は、問題ありません。

SQLite バックアップ API は、問題を正確に解決するように設計されています。NFS データベースに直接バックアップすることも、別のローカル一時ファイルにバックアップしてからコピーすることもできます。バックアップ API は、すべてのロックと同時実行の問題を処理します。

APSW を使用して、バックアップ API または pysqlite の最新バージョンにアクセスできます。(開示: 私は APSW の作成者です。)

于 2011-02-23T18:59:03.467 に答える