我想在数据驱动的网站后面为基于文件的数据库编写数据访问层。会有很多并发更新和读取,我至少要将访问序列化,这样页面请求就会有一个很好的有序行。
什么WCF配置能让我得到我想要的东西? PerSession并发能让我在那里吗?
我是否咆哮错误的树,我应该依靠数据库驱动程序来处理文件锁定吗?
编辑:我正在尝试组建一个不需要用户处理MySql或SqlServer的开源日历网站 - 换句话说,它应该是xcopy部署。答案 0 :(得分:2)
您可能希望使用具有单一并发的Single实例:
[ServiceBehavior(
InstanceContextMode = InstanceContextMode.Single,
ConcurrencyMode = ConcurrencyMode.Single)]
这将确保所有来电都“排队”。如果您使用PerSession实例上下文,那么您将最终对后端文件进行并发调用。您还需要确保设置自定义限制行为。您可以在配置中或通过代码执行此操作:
ServiceThrottlingBehavior throttlingBehavior = new ServiceThrottlingBehavior()
{
MaxConcurrentCalls = 200,
MaxConcurrentInstances = 200,
MaxConcurrentSessions = 200,
};
ServiceHost host = ...
host.Description.Behaviors.Add(throttlingBehavior);
答案 1 :(得分:1)
马修,
你的用例是什么?您是否允许用户临时插入数据库?如果是这样,您可能最好编写一些获取数据并将其导入SQL Server数据库的代码。它更适合这样做。
如果您担心费用,可以使用SQL Server Express或Postgres。
答案 2 :(得分:1)
Sqlite可以处理并发读取,因此您不必序列化读取。然而,写入是一个不同的故事,他们锁定完整的sqlite数据库。
我不知道ms-access如何处理并发。
你在建什么样的网站?
答案 3 :(得分:0)
序列化“大量并发更新和读取”将导致用户的性能非常糟糕。我认识到这不是你问题的答案(更多的是对前提的挑战),但是转移到更适合这种类型的活动(如SQL Server)的资源管理器会更好。在架构上,试图让用户在他们的数据上看起来是一个错误的方法 - 它通常会导致用户不满。