Windows DFS延迟写入

我对DFS文件系统知之甚less,但是在我们的一个部署中遇到了问题。

我们的应用程序将文件写入指定位置,closures它们,然后将logging写入数据库。 应用程序的另一部分将拾取这些数据库logging并读取之前写入的文件。

在某些情况下,读者得到一个“找不到文件”,并且失败。 重新启动它,而不触及其他任何东西,它find正确的文件,一切都很好。

我相信我已经排除了我们的应用程序的一个问题,因为在创build数据库logging之前,文件肯定会被刷新/closures。

因此,我导致相信操作系统或文件系统在内部延迟文件写入,因此不能立即使用。

有问题的文件系统是Windows 2003 SP2 DFS。 这是DFS可能的情况吗? 如果有,是否有可能将其切换成某种直写/无caching策略,以确保文件被及时写入?

DFS是分布式文件系统,正是这个名字所说的:在多个服务器上分布和复制的“虚拟”文件共享。 每当你的应用程序写入它,它实际上访问其中一个服务器上的副本之一,如果另一个应用程序试图不久后读取相同的数据,它可能很容易访问另一台服务器,还没有收到更新的数据。

对于DFS,不能绝对确保写入到其中的数据在随后的读取中可用:可能总是存在复制延迟; 您也无法告诉您的应用程序与特定的DFS服务器“交谈”:可以自由连接到运行它的任何一台服务器。

如果您希望此应用程序实时工作,则应使用标准文件共享,而不是DFS。

你们正在做出一个普遍的,但是不正确的假设,即有一个“后”的普遍概念,如果你在“另一个”之后做了一件事,你就能保证看到效果。 这只是一个错误的概念,没有任何事情能够使你按照你期望的方式工作。

比喻就是给某人发一封信,取回一张回执,打电话给这个人,假设他们必须读过这封信。

正如你所提到的,延迟写入会使这个问题搞砸。 许多其他的事情也可以搞砸了。 试图find一切可能的方式,它可以打破和修复他们都只是疯了。

相反,如果您需要在操作之间进行sorting,请使用专门保证提供所需特定顺序的内容。 由于在文件系统和数据库之间没有保证的顺序,所以不会这样做。

大多数文件系统在通过运行在相同操作系统实例上的进程访问时,确实提供了有关它们自己和它们自己的操作的保证sorting。 所以在文件正确设置之后,你可以在同一个文件系统中创build一个“触发”文件。 如果读者看到触发文件,则可以知道该数据文件是完整有效的。 它可以在完成时删除触发器文件。