基于PowerShell的数据库同步使用二进制文件

时间:2008-12-01 12:09:18

标签: .net database powershell

我使用二进制文件作为存储编写了一个数据库应用程序。它可以通过powershell cmdlet访问。

您可以使用put-将信息放入数据库,您可以使用get - 。

读取信息

问题是同步。确保cmdlet不能同时访问文件的最佳方法是什么?

put-必须具有独占访问权限,即没有其他作者或读者可以访问该文件。 get-不需要独占访问权限,或者读者可以同时访问数据库。

我最好使用基于文件的锁定机制还是基于.NET的同步机制?

3 个答案:

答案 0 :(得分:0)

我认为mutex在这里会很好用。

答案 1 :(得分:0)

我不知道任何基于.NET的同步机制在这里是合适的(请继续阅读 - 我做出的假设可能并非如此)。

如果您绝对必须拥有“put”的独占访问权限,那么(a)基于文件的锁定或(b)基于数据库的锁定可能是合适的。例如,“put”命令可能首先检查特殊数据库字段以查看它是否可以获得独占访问权限;如果可以,它将更新该字段以显示已经采取了独占访问,从而防止发生另一个同时发生。

如果我正确地解释你的问题,那么这个数据库有可能被多台计算机访问,这意味着互斥体不会真正起作用,因为它们是为线程间同步而设计的。如果情况并非如此,并且在任何给定时间只有一台计算机将访问该文件,那么互斥锁就可以正常工作。

答案 2 :(得分:0)

我认为互斥方法现在必须要做。虽然PowerShell v2允许轻松远程执行脚本,但我认为目前担心这样做会妨碍PowerShell v1的快速实现。

我正在使用的数据库只是一个普通的旧二进制文件,所以不幸的是我不能指望数据库为我做同步。

使用互斥锁,由于许多数据库可以同时进行交互,我是否需要使用命名的互斥锁,使用文件路径作为名称,以便我可以保证互斥锁对于每个数据库都是唯一的?