2009-11-03 75 views
0

我正在翻新一个现有的ASP.Net Web应用程序,它有一个全功能的SQL 2005数据库作为其后端。通过功能完备的功能,我的意思是有很多事情(实际上几乎所有的CRUD操作)都是使用SP从数据库中处理的。SQL 2005的框架设计和实现的一般建议

所以,我的第一个问题是,基于像性能,可伸缩性和安全性这样的参数,SP良好的广泛用法?我也比较像的LINQ to SQL最新的东西问这个,动态查询生成框架,比如NHibernate的,等等。

的DB会在每个表处理几百万 记录,我们”已经一个 广泛查找/联过程(我 计划使用的看法吧)所以, 关注的是,是否值得继续在 SP的“CRUD”执行 - 显然,这也制约了一些 验证和业务约束 进入SP层(我试图 尽量减少它),但仍然如果它的价值 这三个主要参数 - 性能,可扩展性和安全性 权衡是可以承受的。


而一些俏皮话那些专家DBA和编程大师:

  1. 是示物理缓存@服务器上的任何地方吗?或者它们与典型的JOIN操作相同 (简而言之,我继续在表之间使用JOIN或创建这些JOIN的VIEW)

  2. 通过EXEC的T-SQL与SP中的编译SQL相比是否值得? 我的意思是显然他们提供了很大的灵活性,但是'编译SQL'的整个好处被破坏了? 它确实降低了复杂度,但它是否会影响性能\安全性(即SQL注入等)?框架级:将CRUD操作保留在SP中或者做一些框架,通过将它们拖动到应用程序中(如LINQ到SQL,nHibernate等)来承诺更好的折衷。我再次相信这一点是也与#2相关。

  3. 考虑到我提供的所有解释,哪个框架适合我的web-apps?后端是SQL Server 2005+。

欢迎任何额外的创意。感谢您分享你的知识。

+0

你应该把它分解成多个问题。如有必要,您可以在问题之间进行关联。 – 2009-11-03 15:43:43

回答

1

关于存储过程对临时查询的“好处” - 互联网上有很多文章。好的例子是herehere

查询/ SP的性能完全依赖于SQL服务器中的执行计划。执行计划基于SQL Server统计信息在第一次调用期间生成,并针对这两种SP和即席查询进行缓存。所以,总而言之,我会说使用SP没有合理的好处。

SP的最大缺点之一是可维护性。使用SP时,您不得不将至少部分业务逻辑移至数据库层。 SQL不是结构化语言,在那里维护复杂的业务逻辑是可怕的。

因此,我是“无SP”方法的“追随者”。软件开发不应该以数据库为中心,而应以代码为中心。通过良好的ORM框架,您可以创建真正可维护且正交的业务层组件。

+0

谢谢。 哇......这是否意味着SQL-Server以同样的方式处理SP&SQL语句(即尤其是用于编译和创建\存储执行计划) 性能一直是考虑SP的一个重要因素,但现在动态SQL提供的灵活性似乎与其重叠。请确认。 – 2009-11-04 13:06:55

+0

是的,在服务器不止一次看到该查询后,参数化SQL被散列并与预编译的执行计划进行比较。所有后续使用都是预编译的。唯一的缺点是在初始请求中通过线路发送稍微更多的数据。例如,“SELECT * .. [500 more chars]”与“MyStoredProc(param1,param2)” – 2009-11-04 15:03:29