1

プロジェクト ファイルは Dropbox フォルダに保存しているので、オフィスでもファイルをいじることができます。

私のプロジェクトにはEmbeddableDocumentStorewith が にUseEmbeddedHttpServer設定されていtrueます。

const int ravenPort = 8181;
NonAdminHttp.EnsureCanListenToWhenInNonAdminContext(ravenPort);
var ds = new EmbeddableDocumentStore { 
    DataDirectory = "Data", 
    UseEmbeddedHttpServer = true, 
    Configuration = { Port = ravenPort } 
};

さて、この日、オフィスの PC でプロジェクトを開始したときに、次のメッセージが表示されました。Could not open transactional storage: D:\Dropbox\...\Data

開発段階の初期なので、Dropbox のデータ フォルダーを削除したところ、プロジェクトは問題なく開始されました。今、私は家に戻ってきましたが、同じ問題に遭遇しました!もちろん、毎回このフォルダーを削除することはしたくありません。

開発データを Dropbox に保存できませんか? これを機能させるには、何かをバイパスする必要がありますか?

4

1 に答える 1

4

データ ディレクトリをローカル コンピューターの物理ディスク ボリュームに設定します。マップされたドライブ、ネットワーク共有、UNC パス、ドロップボックス、またはスカイドライブをデータ ディレクトリとして使用することはできません。ドライブ文字があるからといって、物理ディスクがあるとは限りません。

理にかなっている非物理ストレージの唯一のタイプは、iSCSI またはファイバーチャネルを介して SAN から接続された LUN、または仮想化またはクラウド環境で接続された VHD です。これらはすべて、OS に対して物理ディスクとして表示されます。

これは、ほぼすべてのデータ アクセス環境に当てはまります。信じられない場合は、SQL Server で試してみてください。RavenDB の場合、データ ストアとして ESENT を使用しているため、ファイル システムへの直接アクセスが必要です。

アップデート

明確にするために、物理ディスクに保存している場合でも、DropBox や SkyDrive などの同期テクノロジを利用することはできません。なんで?変更を監視するために、ファイルの共有読み取りロックを取得するためです。ESENT (RavenDB のベース) などのテクノロジでは、ファイルへの排他ロックが必要です。

SQL Server や Windows 仮想マシンなどの他のテクノロジも、データ ストアで排他ロックを取得します。なんで?ファイルに対してランダムアクセス方式でデータのビットを常に読み書きしているためです。データ変更のすべてのビットに対して、DropBox が同期操作を実行しようとすることを本当に望んでいますか? それは非常に非効率的で問題があります。

共有ロックを使用するアプリケーションには、この問題はありません。たとえば、MS Word ドキュメントで作業する場合、すべてメモリ内で処理されます。ファイルを保存すると、DropBox はファイル全体を読み取り、クラウドに同期できます。変更されたビットのみを送信することで最適化できますが、そのためにはファイルを読み取ることができる必要があります。

そのため、DropBox が ESENT ファイルに共有読み取りロックを持っている場合、RavenDB がそれを排他的に開こうとすると、エラーが発生し、表示されている例外が発生します。

于 2013-01-15T22:27:05.013 に答える