编写高效的.Net/SQL Server代码

4
让我先说一下,我并不是在批评 .Net(它帮助我谋生)...
我最近听说了一个网站,该开发者/所有者吹嘘他只需要极少的硬件来支持他的网站(plentyoffish.com)。这个网站在Alexa排名中列为前50名之一。我很难理解像这样的事情是如何通过开发者/所有者所声称的方式实现的,即一个单独的开发者使用极少的硬件编写网站(他花了两周时间建立初始网站),却能达到每小时 200 万次点击量(高峰期)。更大的公司需要巨大的网络农场来处理这样的流量...
你如何编写如此高效的代码,使用有限的硬件资源(他声称只使用了三个数据库服务器)?有没有人曾经工作或开发过如此高效的网站?

良好的数据库设计,索引和性能调优,熟练掌握SQL。阅读最佳实践。这是常见的做法。 - DOK
小气鬼,你有足够的声望来修复这些错别字... - Dana
来吧,伙计们。这个问题已经引发了几个有用的答案。仅仅因为你不喜欢他的语气,就让我们有知识的同胞来教育这个人吧。 - DOK
如果我今天还有“关闭”权限的话,我会投票将其关闭(我今天已经用完了我的“8”次数)。 - George Stocker
现在我知道为什么他们对关闭投票进行限制了... 祝贺你,Gortok... - Miyagi Coder
显示剩余8条评论
6个回答

6
Microsoft技术栈如果避免使用所有拖放垃圾,将非常快速,这也是ASP.NET名声不佳的原因。
  • IIS是一个好的Web服务器。
  • SQL Server是一个很好的数据库。
  • C#编译出的代码速度很快(这里可能需要资格证书)
  • 如果正确使用ASP.NET,它可以非常轻量级。
整个技术栈都非常优秀。你可以对Microsoft及其商业实践和消费产品有任何看法,但是他们的开发工具和服务器是一流的。
我的个人经验是,他们的网络技术堆栈包括一个站点,每秒约能看到~500个页面浏览,并且很少使服务器达到15%以上。对于大多数操作来说,这已经足够快了。

避免所有拖放垃圾,兄弟。 - DOK
拖放功能只是为您提供快速开发。了解您的产品堆栈以便进行优化才是IT的核心! - Spence

4
这不仅仅是代码问题:这需要开发人员、数据库管理员和IT的合作努力。团队中的每个成员都必须认识到他们的工作对团队其他领域的影响。当开发人员在重型OLTP系统上编写查询时,他必须了解为什么它无法扩展。当DBA看到表扫描时,他必须知道如何在数据库级别或代码级别上修复它。当系统管理员看到磁盘上有大量读取活动时,他必须了解其潜在原因(例如表扫描),以便决定是否通过更好的代码或增加更多驱动器来解决它。
良好的性能是每个人做好自己的工作并与其他团队成员进行良好沟通的结果。如果团队中只有一个成员试图把其他人推到一边,那么系统就不会运行良好。而且你似乎已经在抨击.NET和SQL Server了。;-)

不是要表达我在批评.Net... :) 感谢您的意见。 - Miyagi Coder
Loukas,也许你应该编辑一下你的问题,让它看起来不那么具有攻击性。这里的人们可能会对此非常敏感。 - DOK
Brent,你说得对,当每个人都做得很好时,你可能会拥有一个高效的系统。但是在PlentyOfFish中,只有一个人独自完成了所有工作。他不可能是所有领域的专家。 - Craig
你说得对 - 他一个人做不了,但这就是为什么他有同行。我曾经帮助过几个系统的开发,这些系统不可能由一个人建造,但只要你在正确的时间得到正确的人的意见,并且只要你愿意接受这些意见,它们就能够很好地运作。 - Brent Ozar
文档 - 我重写了一些问题...希望它能够在某个时候重新打开。 - Miyagi Coder

3

通过缓存,网站可以实现一些非常惊人的功能。如果您能有效地缓存内容,使用的语言就不那么重要了。


3
正如jle所说,缓存是关键。此外,这可能仅仅是网站用户交互方式的本质。我可能错了,但我认为例子plentyoffish.com并不是一个特别资源/用户密集型的网站。用户资料中确实有大量数据,但(在我有限的体验中)该网站的目的不是操纵、相关或转换数据,而是简单地返回与用户标准相匹配的资料档案——但并没有真正改变这些数据。

2
与其他替代方案相比,.Net实际上非常高效。还有什么选择?PHP?Java?Ruby?当然,你可以用C++编写你的Web应用程序,但那将是一个非常痛苦的实现和维护过程。此外,正如其他人所提到的,通过适当的缓存、数据库调优和算法,你可以获得非常好的性能。比仅仅选择一种快速语言并编写未调优代码要更高效。

2
这是一个具有挑战性的问题,但并不是在软件开发中做出的所有选择都是相等的,即使使用相同的语言。你在某些东西上叠加了越来越多的框架,你就会离“真正重要的事情”越来越远,如果“真正重要的事情”是性能,那么能够在“更低层次”编程的人可以比那些通过拼凑控件来开发程序的人快得多。有时候,开发的易用性比原始速度更重要,所以在较低层次上进行编写并不总是正确的选择——代码维护的易用性也很重要,有时会超过原始性能。

我曾经与另一位顾问竞争,试图赢得一家大型金融服务公司的高六位数合同,我们都在销售BI/EIS系统的想法。他使用了臃肿的技术和每一个步骤,但这都是他非常自豪的“新而闪亮”的技术,包含了所有正确的流行语。

我用asp(asp classic,.net还没有推出)编写了我的系统,并使用自定义编写的本地SQL Server通信方法,以及所有手工编写的例程来生成报告和其他类似的性能增强决策。他使用了一个报告编写插件和即插即用控件来构建他的系统。我在距离我家办公室200英里的地方通过28.8拨号线对我的开发Web服务器进行了整个演示,而他的演示是在下一个房间连接到更强大的开发服务器上完成的,并且仍然慢得多。

演示结束后,我告诉我的客户,我的整个演示都是通过拨号线完成的(他们认为这是本地的)。那就敲定了交易,因为该系统的大多数用户分布在全国各地,当时宽带并不普及。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接