我正在设计一组WCF服务的体系结构。由于部署这些服务的性质(远程部署到客户端站点上的许多不可管理的系统上,因此我们无法承担数据库服务器的管理开销),数据存储必须基于文件(我们正在倾向于用于文件格式的XML)。基于文件的服务和并发问题
服务的性质再次意味着单个文件中存在并发问题的可能性,并且我试图想出一个系统,该系统在所有情况下都将正确运行,并避免尝试在那里读取数据是挂起的写入操作。
我目前的想法是采取两种可能的路线之一。
锁定文件
这将通过以下方式进行操作。 所有的文件操作都会有一个锁定机制。读取将检查以确保在请求数据之前所需的文件当前未被锁定。如果文件被锁定,服务应该休眠几毫秒(在尚未确定的范围内)。写入操作将设置锁定,提交数据,然后解锁文件。在后台
额外的程序提供数据服务
这个版本会在后台辅助应用程序,揭露各种公共静态方法,通过服务调用。后台应用程序将全权负责维护数据的内存中表示,向服务提供数据,并使文件副本与内存对象保持同步。在这方面,它的行为就好像它是一个交易化数据库服务器。
实现创建这些类型的服务,其中选择将提供并发冲突的机会最小最大性能为目标的两个(或其他可能的)方法吗?选项1设计的简单性意味着我更喜欢那个选项,但我担心由于“睡眠”操作而导致性能可能受损。
SQL Server Express的管理开销太高? – 2009-12-17 11:26:58
只是一个想法,但据称SQL Server Compact支持多个并发连接和事务,应该可以通过xcopy或类似的工具进行部署:http://www.microsoft.com/sqlserver/2008/en/us/compact.aspx – Murph 2009-12-17 11:30:18
我同意一个数据库将会是一个更好的解决方案,但是这种权力要求在后端不会有平面文件以外的数据存储。我试图说服他们,否则,它不会发生。 :( – ZombieSheep 2009-12-17 11:37:44