我的Dropbox上的嵌入式Raven DataDirectory不能100%工作?

时间:2013-01-15 21:29:34

标签: c# ravendb

我的Dropbox文件夹上有我的项目文件,所以我也可以在办公室玩我的文件。

我的项目包含EmbeddableDocumentStoreUseEmbeddedHttpServer设置为true

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

现在,这一天,当我在办公室电脑上开始我的项目时,我看到了这样的信息:Could not open transactional storage: D:\Dropbox\...\Data

由于它处于开发阶段的早期阶段,我删除了Dropbox上的数据文件夹,项目开始完美无瑕。现在我回到家里我遇到了同样的问题!我当然不希望每次都删除此文件夹。

我不能将我的开发数据存储在我的Dropbox上吗?我应该绕过一些东西让它发挥作用吗?

1 个答案:

答案 0 :(得分:4)

将数据目录设置为本地计算机上的物理磁盘卷。您将无法使用任何类型的映射驱动器,网络共享,UNC路径,Dropbox或skydrive作为数据目录。仅仅因为你有一封驱动器号并不意味着你有一个物理磁盘。

唯一有意义的非物理存储类型是通过iSCSI或FibreChannel从SAN连接的LUN,或虚拟化或云环境中连接的VHD。它们都将作为物理磁盘提供给操作系统。

几乎任何数据访问环境都是如此。如果你不相信我,请尝试使用SQL Server。在RavenDB的情况下,它使用ESENT作为其数据存储,这需要直接访问文件系统。

<强>更新

为了澄清,即使您存储在物理磁盘上,也不能依赖任何类型的同步技术,如DropBox或SkyDrive。为什么?因为他们将对文件进行共享读锁以监视更改。像ESENT(RavenDB所基于的)这样的技术需要对文件进行独占锁

SQL Server和Windows虚拟机等其他技术也会对其数据存储进行独占锁定。为什么?因为它们不断地以随机访问方式读取和写入数据位到文件中。你真的希望DropBox尝试为每一位数据变化执行同步操作吗?这将是非常低效和有问题的。

使用共享锁的应用程序没有此问题。例如,当您处理MS Word文档时,它都在内存中完成。保存文件时,DropBox可以读取整个文件并将其同步到云端。它可以通过仅发送已更改的位进行优化,但仍需要能够读取文件才能进行优化。

因此,如果DropBox在ESENT文件上有共享读锁定,那么当RavenDB尝试以独占方式打开它时,会出现错误并引发您看到的异常。