人们似乎没有意识到的一件事是,不管对代码质量的影响如何,在SQL Server上进行所有处理不一定都很好。
例如,如果您需要获取一些数据,然后从该数据中计算出一些数据,然后将该数据存储在数据库中。有两种选择:
- 将数据获取到您的应用程序中,在您的应用程序中进行计算,然后将数据发送回数据库
- 设计一个存储过程或类似的过程来获取数据,在其中进行计算,然后通过一次对SQL Server的调用将所有数据存储起来。
您可能会认为第二个解决方案始终是最快的,但这绝对不是事实。即使SQL不适合解决该问题(例如正则表达式和字符串操作),我也忽略了。假设您有SQL CLR或类似的东西甚至在数据库中拥有强大的语言。如果需要1秒钟来回往返并获取数据,然后花1秒钟来存储数据,然后需要10秒钟来对它进行计算。如果您在数据库中全部都做错了,那就错了。
当然,您要剃掉2秒钟。但是,您是将100%的(至少)一个CPU内核浪费了10秒(还是至少10秒钟)还是在Web服务器上浪费了该时间?
Web服务器易于扩展,而数据库则非常昂贵,尤其是SQL数据库。大多数情况下,Web服务器也是“无状态”的,可以随时添加和删除,而无需对负载平衡器进行任何其他配置。
因此,不仅要考虑将操作减少2秒钟,还要考虑可伸缩性。当可以使用便宜得多的Web服务器资源且对性能的影响较小时,为什么要浪费数据库服务器资源之类的昂贵资源