【发布时间】:2015-10-28 22:57:36
【问题描述】:
我面临一个任务,我必须在 .net 框架中设计一个 Web 应用程序。在此应用程序中,用户将仅(99% 的时间)拥有只读访问权限,因为他们只会看到数据 (SELECT)。
但是,后端数据库将成为每分钟都会更新/插入/删除记录的野兽。预计每年至少会有大约 1000 万条记录添加到系统中,总共不到 5 个表。
问题/请求 1:
由于这些更新/插入将非常频繁地发生(每分钟或最晚 2 次),我希望获得一些提示,以便在更改某些行时,选择查询可能不会导致线程死锁,反之亦然。
问题/请求 2:
我的计算猜测是,在正常情况下,每分钟 24/7 只会插入几百条记录(并根据某些条件更新/删除)。如果我编写了一个 C# 工具,该工具将从任意数量的源(xml、csv 或直接从远程数据库中的某些表中获取数据,配置文件或注册表设置将指示从哪种格式导入数据)然后执行插入/更新/删除,这是否足够快和/或会导致死锁问题?
我希望我的问题足够详细...如果这一切都含糊不清,请告诉我...
提前致谢
【问题讨论】:
-
就个人而言,我会确保打开数据库选项
READ_COMMITTED_SNAPSHOT。在这种模式下,读者不会阻止作者,作者也不会阻止读者。这种模式会消耗更多的温度,但我认为这是完全值得的,并且避免了使用像nolock提示这样的技巧。除此之外,您还需要自己进行测试和基准测试。 -
您需要确定的第一件事是,您的应用用户是否需要在进入数据库后立即查看最新更新,或者他们可以接受稍微旧的数据。如果答案是后者,那么您可以为您的应用程序使用缓存、复制的数据库,甚至是专用的报告数据库,这些数据库会定期更新。
-
我只是先制作应用程序,然后看看您是否有死锁问题。 SQL Server 非常擅长为您管理这些。
-
这是我使用 SQL 拦截器的解决方案。 stackoverflow.com/questions/1302746/…
标签: c# asp.net sql-server database