我面临着一项任务,我必须在.net框架中设计一个Web应用程序.在这个应用程序中,用户只能(99%的时间)具有只读访问权限,因为他们只会看到数据(SELECT).
然而,后端数据库将成为每分钟更新/插入/删除记录的野兽.预测是,在一年内,系统中将有大约1000万条记录添加到系统中,总共少于5个表.
问题/要求1:
由于这些更新/插入将非常频繁地发生(每分钟或最近2次),我希望得到一些提示,以便在更改某些行时,选择查询可能不会导致线程死锁,反之亦然.
问题/要求2:
我的计算猜测是,在正常情况下,每分钟24/7只会插入几百条记录(并根据某些条件更新/删除).如果我编写一个C#工具,它将从任意数量的源(xml,csv或直接来自远程数据库的某些表中获取数据,配置文件或注册表设置将决定从哪种格式导入数据)然后执行插入/更新/删除,这是否足够快和/或将导致死锁问题?
我希望我的问题足够详细……如果这一切都含糊不清,请告诉我……
提前致谢
解决方法
我将首先回答你的问题#2:根据你所描述的情景,它会足够快.但请记住向数据库发出直接sql命令.我个人有一个非常非常类似的场景,应用程序运行没有任何问题,但是当一个预定的作业执行多次插入/删除工具(如nhibernate)时,会发生死锁.所以,再次,如果不可能,执行直接的sql语句.
问题#1:您可以使用“SELECT WITH NOLOCK”.
例如:
SELECT * FROM table_sales WITH (NOLOCK)
它避免了数据库上的块.但是你必须记住,你可能正在阅读一个过时的信息(再一次,在你描述的场景中可能不会有问题).
您也可以尝试“READ COMMITTED SNAPSHOT”,它自2005版以来就受到支持,但是对于这个例子,我会保持简单.搜索一下它可以决定哪一个可能是你的最佳选择.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。