2009-01-19 65 views
4

让我先说我不敲净序言(它帮助我赚取了生活费)...编写高效的.Net/SQL Server代码

我最近听到一个网站是开发者/所有者吹嘘他拥有最少的硬件来支持他的网站(plentyoffish.com)。根据Alexa的流量排名,该网站被列为前50名。我正在努力围绕如何通过做开发者/所有者声称的东西来实现类似的东西,一个开发人员使用最少的硬件编写一个站点(花了他2周的时间才获得初始站点),这些硬件获得了200万每小时点击次数(峰值)。规模较大的公司有庞大的网络农场来处理这样的交通......

怎么写代码,以便高效,具有有限的硬件资源(他声称,他只使用三个DB服务器)?有没有人曾经或开发过高效的网站?

+0

这是任何设计中可扩展性是高优先级问题的挑战。 – 2009-01-19 21:45:09

+0

Gee Loukas,你讨厌MS吗? – StingyJack 2009-01-19 21:46:37

+0

良好的数据库设计,索引和性能调优,良好的SQL。阅读最佳做法。这是一直做的。 – DOK 2009-01-19 21:47:56

回答

6

如果避免所有拖放垃圾给ASP.NET一个错误的名称,Microsoft堆栈非常快。

  • IIS是一个很好的网络服务器。
  • SQL Server是一个很好的数据库。
  • C#编译为快速代码。 (资格可能需要在这里:)
  • ASP.NET可以说是相当轻巧的,如果你正确地使用它

这就是整个堆栈。都很好。你可以说你喜欢微软,它的商业惯例和消费产品,但是他们的开发工具和服务器是顶尖的。

我个人对他们的网络堆栈的体验包括一个网站,每秒可看到500个网页浏览量,并且很少超过15%的服务器。这对大多数操作来说足够快。

3

通过网站,一些非常神奇的事情可以通过缓存来完成。如果您可以高效地缓存事物,则使用的语言要少得多。

3

正如jle所说,缓存是关键。此外,它可能仅仅是网站上用户交互的性质。我可能是错的,但我认为这个例子,plentyoffish.com,并不是一个特别的资源/用户密集型网站。有大量数据的用户配置文件,据推测,但(在我有限的经验检查出来),该网站的目的并不是要操纵或关联或转换数据,这么多只返回轮廓相匹配的用户标准 - 但不是真的以任何方式按摩这些数据。

2

与替代方案相比,.Net实际上相当高效。那里还有什么? PHP? Java的?红宝石?当然你可以使用C++编写你的Web应用程序,但这将是实施和维护的一大难题。另外,正如其他人所提到的,通过适当的缓存,数据库调整和算法,您可以获得非常好的性能。比只选择快速语言和编写未调优的代码更具性能。

2

这是一个艰难的一个细节与回答,却没有一个让所有选择的软件开发都是平等的,即使使用相同的语言。更多的层层框架让你打上某个东西,你从“真正重要的东西”得到的东西越远,如果“真正重要”的是表现,那么可以在“较低层次”编程的人可以做很多事情,比通过拼凑控件来开发程序的人快很多倍。有时候,开发的简易性比原始速度更重要,所以它并不总是正确的选择 - 维护代码的难易程度也很重要,有时甚至超过原始性能。

我曾经与另一位顾问试图赢得一家主要金融服务公司的高6位数合同,我们都在推销BI/EIS系统。他使用了臃肿的技术和每一步,但这些都是他所引以为傲的“新颖而有光泽”的技术,并包含了所有正确的流行语。

我写了我的asp(asp classic,.net还没有出来),并使用自定义书面的本地SQL Server通信方法,所有手动编码例程生成报告和其他类似的性能增强决策。他使用报告编写器插件和即插即用控件来构建他的系统。我做了对我的发展网络服务器28.8拨号线路整个演示在我的家庭办公室200英里以外 - 他是反对通过100Mbps的以太网连接隔壁房间一个更强大的开发服务器完成,它仍然很多,慢很多倍。

当演示结束时,我告诉我的客户,我的整个演示是通过拨号线完成的(他们认为它是本地的)。由于该系统的大多数用户分布在全国各地,而且宽带在当时并不普遍,因此达成了这笔交易。

4

它不仅仅是代码:做这样的事情需要开发人员,DBA和IT的合作。团队的每个成员都必须认识到他们的工作对团队其他领域的影响。

当一个开发人员在一个笨重的OLTP系统上编写一个表格扫描的查询时,他必须明白为什么它不会缩放。当DBA看到表扫描时,他必须了解如何在数据库级别或代码级别修复它。当系统管理员在驱动器上看到繁重​​的读取活动时,他必须了解它的根本原因(例如表扫描),以便决定是使用更好的代码修复它还是将更多的驱动器加入其中。

表现良好的系统是每个人都做得很好的结果,并与其他团队成员沟通得非常好。如果团队中只有一名成员将其他人下车,该系统将无法执行。这听起来像你已经通过在总线下抛出.NET和SQL Server来做到这一点。 ;-)