我面临一项任务,我必须在.net框架中设计一个Web应用程序。在此应用程序中,用户将只有(99%的时间)具有只读访问权限,因为他们只会看到数据(SELECT
)。
然而,后端数据库将成为每分钟更新/插入/删除记录的野兽。预测是,在一年内,系统中将有大约1000万条记录添加到系统中,总共少于5个表。
问题/要求1 :
由于这些更新/插入将非常频繁地发生(每分钟或最近2次),我希望得到一些提示,以便在更改某些行时,选择查询可能不会导致线程死锁,反之亦然。 / p>
问题/要求2 :
我的计算猜测是,在正常情况下,每分钟24/7只会插入几百条记录(并根据某些条件更新/删除)。如果我编写一个C#工具,它将从任意数量的源(xml,csv或直接来自远程数据库的某些表中获取数据,配置文件或注册表设置将决定从哪种格式导入数据)然后执行插入/更新/删除,这会足够快和/或会导致死锁问题吗?
我希望我的问题足够详细......如果这一切都含糊不清,请告诉我......
提前致谢
答案 0 :(得分:0)
我先回答您的问题#2:根据您所描述的情况,它会足够快。但请记住向数据库发出直接sql命令。我个人有一个非常非常类似的场景,应用程序运行没有任何问题,但是当一个预定的作业执行多次插入/删除工具(如nhibernate)时,会发生死锁。所以,如果不可能的话,执行直接的sql语句。
问题#1:您可以使用" SELECT WITH NOLOCK"。
例如:
SELECT * FROM table_sales WITH (NOLOCK)
它避免了数据库上的阻塞。但你必须记住,你可能正在阅读一个过时的信息(再一次,在你所描述的情景中,这可能不会是一个问题)。
您也可以尝试" READ COMMITTED SNAPSHOT",自2005年版以来它一直受到支持,但是对于这个例子,我会保持简单。搜索一下它可以决定哪一个可能是你的最佳选择。