我正在查看一个 SO 成员的开源项目。它是一个用 C++ 编写的 Web 框架。
现在你们可能都准备好回应 C++ 是一种糟糕的网站语言,而在网站中,瓶颈在于数据库。
但是...我读了这篇文章:
http://art-blog.no-ip.info/cppcms/blog/post/42
他在其中指出,在像维基百科这样的大型站点中,数据库服务器仅占所有服务器的 10%。因此,C++ 会比 PHP Python Ruby C# 等语言更好。
他的观点有效吗?
最佳答案
您链接到的文章的问题在于,当作者询问“瓶颈”在哪里时,他显然并不知道自己在说什么;有人拥有比数据库服务器更多的 Web 服务器这一事实并不意味着“数据库不可能是问题所在”。 “数据库是瓶颈”的一般含义与对 Web 应用程序进行过运行时分析的每个人都了解的一样。
考虑一个需要半秒才能返回完整响应的应用程序。假设您坐下来剖析它,发现那半秒的处理时间分解如下:
- 解析传入请求:50 毫秒
- 查询数据库:350ms
- 为响应呈现 HTML:50 毫秒
- 发送回响应:50 毫秒
如果您看到这样的故障,其中数据库查询占应用程序实际运行时间的 70%,您会正确地得出数据库是瓶颈的结论。这正是大多数人在做分析他们的应用程序时发现的(而且,通常,数据库完全支配了处理时间,以至于其余处理的语言选择没有任何区别任何人都会注意到)。
事实证明,所涉及的数据库服务器的数量并不重要;这里的名言是,像你所链接的帖子的作者这样的人是那种听说一个女人需要九个月才能生 child 的人,并假设九个女人一起工作可以在一个月内完成。用数据库术语来说:如果给定查询在给定数据库上执行需要 100 毫秒,那么添加更多数据库服务器不会使其中任何一个能够更快地执行该查询。添加更多数据库服务器的原因是为了能够处理更多的并发请求并防止您的数据库过载,而不是让孤立的请求运行得更快。
从那里开始,您将进入通常的扩展应用程序的舞蹈:缓存以减少检索数据或呈现响应所花费的总时间,负载平衡以增加您可以服务的并发请求的数量,分片和更高级防止在负载等情况下陷入困境的数据库设计方案。
但是,您会注意到,这与所使用的编程语言没有任何关系,因为其他因素所花费或节省的时间再一次大大超过了获得或损失的时间“快”或“慢”语言(当然,真的没有这样的东西;这在很大程度上取决于问题领域和程序员的技能,因此您无法进行有意义的一般比较)。
无论如何,这有点冗长和杂乱无章,所以我将用一个通用的指导方针来结束它:如果你看到有人争论“你应该用语言 X 构建,因为它运行得更快”,这是一个死的赠品他们对现实世界的性能或扩展一无所知。因为,毕竟,如果它只是归结为“用最快的语言编写”,他们会建议我们都使用汇编:)
关于c# - PHP/Rails/Django/ASP 网站应该是用 C++ 写的吧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/890081/