【问题标题】:Writing efficient .Net/SQL Server code [closed]编写高效的 .Net/SQL Server 代码 [关闭]
【发布时间】:2009-01-19 21:40:14
【问题描述】:

让我先说我不是在敲 .Net(它帮助我谋生)...

我最近听说有一个网站的开发商/所有者吹嘘说他只有最少的硬件来支持他的网站 (plentyoffish.com)。该网站在 Alexa 流量方面被列为前 50 名。我正在努力思考如何通过做开发人员/所有者声称的事情来完成类似的事情,一个开发人员编写一个站点(他花了 2 周时间来建立初始站点),使用最少的硬件获得 200 万每小时点击次数(峰值)。较大的公司拥有庞大的网络农场来处理这样的流量......

您如何在硬件资源有限的情况下编写如此高效的代码(他声称他只使用了三个数据库服务器)?有没有人开发或开发过如此高效的网站?

【问题讨论】:

  • 这是任何将可扩展性作为高优先级问题的设计所面临的挑战。
  • 良好的数据库设计、索引和性能调优、良好的 SQL。阅读最佳实践。这是一直在做的。
  • 现在跟我拼写,“E F F I C I E N T”,也许这就是为什么你不能把你的头绕在它周围。
  • 为什么这被否决了? :|
  • 小气,你有足够的代表来修正错别字...

标签: c# asp.net sql-server performance


【解决方案1】:

如果您避免所有给 ASP.NET 带来坏名声的拖放垃圾,Microsoft 堆栈会非常快。

  • IIS 是一个很好的 Web 服务器。
  • SQL Server 是一个很好的数据库。
  • C# 编译为快速代码。 (这里可能需要资格:)
  • 如果使用得当,ASP.NET 可以非常轻量级

这就是整个堆栈。都很好。你可以说出你喜欢微软的哪些方面、它的商业实践和它的消费产品,但他们的开发工具和服务器是一流的。

我对他们的 Web 堆栈的个人经验包括一个网站,该网站每秒浏览量约为 500 次,并且很少将服务器峰值超过 15%。这对于大多数操作来说已经足够快了。

【讨论】:

  • 阿门,兄弟,关于避免所有拖放垃圾。
  • 拖放内容只是为您提供快速开发。了解您的产品堆栈以便进行优化是 IT 的全部意义所在!
【解决方案2】:

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

当开发人员编写一个在繁重的 OLTP 系统上执行表扫描的查询时,他必须了解为什么它无法扩展。当 DBA 看到表扫描时,他必须了解如何在数据库级别或代码级别修复它。当系统管理员看到驱动器上有大量读取活动时,他必须了解它的根本原因(例如表扫描),以便决定是用更好的代码修复它还是投入更多的驱动器。

性能良好的系统是每个人都出色完成工作并与其他团队成员进行良好沟通的结果。如果团队中只有一名成员将其他人扔到公共汽车下,那么系统将无法执行。听起来您已经通过将 .NET 和 SQL Server 扔在公共汽车上来做到这一点。 ;-)

【讨论】:

  • 不是故意让它听起来像我敲.Net... :) 感谢您的意见。
  • Loukas,也许您应该编辑您的问题,使其看起来不那么具有煽动性。这里的人可能对此非常敏感。
  • 布伦特,你是对的,当每一方都做得很好时,你可能会有一个非常有效的系统。但是对于 PlentyOfFish,一个人自己做了所有事情。他不可能是所有领域的专家。
  • 你说得对——他不能,但这就是他有同龄人的原因。我已经帮助了几个不可能由一个人构建的系统,但只要你在正确的时间得到正确的人的输入,并且只要你对那个输入持开放态度,它就可以很好地工作。
  • Doc - 我重写了一些问题......我希望它在某个时候重新打开。
【解决方案3】:

对于网站,可以通过缓存完成一些非常了不起的事情。如果您可以有效地缓存内容,那么所使用的语言就不会那么重要了。

【讨论】:

    【解决方案4】:

    正如 jle 所说,缓存是关键。此外,它可能只是网站上用户交互的性质。我可能是错的,但我认为这个例子,充足的鱼。com,不是一个特别资源/用户密集的网站。 用户个人资料中可能有大量数据,但(以我有限的经验检查)该网站的目的不是操纵、关联或转换数据,而是简单地返回符合用户标准的配置文件——但并不是真正以任何方式处理该数据。

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        这是一个很难回答具体问题的问题,但并非所有人在软件开发中做出的所有选择都是平等的,即使使用相同的语言也是如此。你在某样东西上层层叠加的框架越多,你离“真正重要的事情”就越远,如果“真正重要”的是性能,那么可以在那个“较低级别”编程的人可以做很多事情,比通过拼凑控件来开发程序的人快很多倍。有时,易于开发比原始速度更重要,因此它并不总是正确选择较低级别的正确选择 - 易于维护代码也很重要,有时甚至超过原始性能。

        我曾经与另一位试图为一家大型金融服务公司赢得 6 位数的高额合同的顾问正面交锋,我们都在推销 BI/EIS 系统的想法。他使用了臃肿的技术和每一步,但所有这些都是他引以为豪的“新奇闪亮”的技术,并且包含了所有正确的流行语。

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

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

        【讨论】:

          猜你喜欢
          • 2011-04-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-29
          相关资源
          最近更新 更多