2008-12-01 117 views
1

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

您可以使用put将信息放入数据库中,并且您可以使用get-读取信息。

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

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

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

+0

有您使用嵌入式数据库,或其他工具,它已经解决了这个问题锁定考虑? – halr9000 2008-12-04 16:10:02

回答

0

我不知道任何基于.NET的同步机制在这里是适当的(继续阅读 - 我做了一个可能不正确的假设)。

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

如果我正确地解释你的问题,还有由多台计算机访问该数据库的可能性,这意味着一个互斥量就没有真正的工作,因为他们是专为线程间同步。如果情况并非如此,并且在任何时候只有一台计算机可以访问该文件,那么互斥锁就可以正常工作。

0

我认为mutex在这里可以很好地工作。

0

我认为互斥体方法现在必须做。虽然PowerShell v2确实可以轻松实现脚本的远程执行,但我认为目前担心这会影响PowerShell v1的快速实施。

我正在使用的数据库只是一个普通的旧二进制文件所以很遗憾我不能指望数据库做同步对我来说。

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

+0

你需要*某种标识符,文件路径可能是最好最容易的,这样你就不必维护某种索引。 – 2008-12-01 21:18:06