14

我在 LAMP 上设置了共享主机。显然,每页对 Db 的调用越少越好。但是有多少是太多了?二?十?一百?好奇人们怎么想。

4

10 回答 10

7

这实际上取决于您的(db)服务器设置。尽量缓存大部分信息,并将数据库调用减少到最低限度。数据库将(几乎在所有情况下)成为您服务的瓶颈 - 您的网站使用率越高。因此,无论您做什么,都尽量避免触发查询,就好像不是真的有必要一样。

我尽量不使用每页超过 10 个 db 调用,但这实际上取决于您的基础架构和您想要提供的信息。

于 2008-12-16T12:21:27.663 回答
4

我会说这取决于服务器负载。如果您每分钟有 1 个访问者,那么每页 1-10 db 调用就可以了。如果您的服务器负载高于此值,例如每秒 10 个页面请求,那么您应该考虑缓存以最小化数据库服务器上的负载。

于 2008-12-16T12:22:24.963 回答
2

当我在 .com 热潮中从事 www.boxman.com 项目时,他们有一个网站,在不同的域下显示为 9 个不同的语言/国家网站。每条文本都是从数据库中提取的,以及产品等通常的东西......每个页面通常会涉及 200 个奇怪的数据库请求,但主要返回一个 id、string 组合。我们一次在系统上有 100 个用户。

DB 在 16 路 RS6000 unix box 上运行 DB2 SQL。这可能相当于现代 3ghz QUAD 核心英特尔盒。

系统工作......随着卷的增加,我实现了一个缓存,其中涉及编写一个同步过程,该过程将每天静态的数据移动到网络服务器的驱动器,因此它不再访问数据库。

基本上我会说,如果性能还可以,那就可以了!但是你应该允许扩大需求,并在它发生时做好准备。

于 2008-12-16T13:04:47.810 回答
1

它最终将取决于您的用户所期望的体验。如果他们期望页面上显示全面的数据,则必须有一些期望:1.)考虑到从数据库中提取的数据量,该站点将能够在负载下运行,以及 2.)加载页面的时间成本将取决于该特定页面的数据加载,而不是整体服务器负载。

一个可接受的数据库调用数量的巨大支持者也必须是底层数据库设计。由于底层数据库结构的复杂性,有一些企业级电子商务网站在每次(未缓存的)页面加载时会定期进行超过 100 次调用。

总体而言,查看 db 调用的一个好方法是确定特定页面是否在可接受的时间内加载,然后从那里查看优化加载时间以及 cpu 和内存使用的策略。

于 2011-11-21T21:41:12.560 回答
1

一段绳子有多长?男人的腿应该多长?您应该在页面加载时进行多少数据库查询?

没有单一的答案。显然,进行不必要的查询是个坏主意。启动过多的数据库连接更糟糕。缓存不变的值是好的。除此之外,你不能在一个页面上随意地说“你应该只使用 $N 查询”——这取决于你想要做什么以及你的性能目标是什么。

从理论上讲,任何应用程序都可以编写为使用单个数据库查询——即使该查询是涉及未索引全表扫描的大规模 20 路连接,并返回数千行,这些行大多为空,这将占用大量内存和时间一旦它到达您的应用程序。显然,这将是一件非常糟糕的事情。一般来说,避免做明显浪费的事情(比如在一个循环中做一堆单行查询)并担心以后的性能。

用 Donald Knuth 的话来说:“我们应该忘记小的效率,大约 97% 的时间说:过早的优化是万恶之源”。每个人都在谈论“可扩展性”,就好像他们真的会成为下一个 Twitter,但实际上,如果 Twitter 专注于像现在这样大,他们可能一开始就不会推出产品地方。

于 2008-12-16T19:59:20.377 回答
1

只要服务器(网络和数据库)可以处理您的所有请求并在可接受的时间内返回页面,我认为您当前的查询数量是可以的。它在很大程度上取决于服务器。尽管如此,无论如何使用尽可能少的查询是一个很好的规则。

于 2008-12-16T12:21:25.400 回答
0

除了缓存之外,另一个重要的事情是使用准备好的语句。当您执行查询时,数据库必须 1) 分析查询并 2) 执行它。如果使用prepared statements,db可以缓存上次使用的查询计划,这样每次查询对dbms的负担就会更小。不要计算执行多少查询的负载,而要计算对 dbms 施加的压力。执行 100 个准备好的查询比执行 50 个在代码中临时生成的查询要快。

于 2008-12-16T13:23:15.277 回答
0

记住 100,000 个页面请求在 24 小时内仅超过 1 秒。只要他们不立即提出要求。

于 2008-12-16T15:52:40.200 回答
-1

不要忘记

  1. 使用存储过程 - 它们运行得更快。
  2. 以新鲜的方式运行它们 - 每周一次。(数据库使用其当前状态优化存储过程。如果这种情况发生变化,那么存储过程将停止优化)。
  3. 使用诸如“显示计划”之类的命令来真正了解您的 SP 正在做什么。
  4. 存储过程可以返回多个数据集(数据表),这减少了网络流量。一个存储过程可以做很多事情。

托尼

于 2008-12-16T15:48:35.263 回答
-4

一个或更少总是最好的。两个通常是一个太多。

如果您可以在单个查询中返回多个结果集,请执行此操作。如果信息是相当静态的,则将其缓存并从缓存中提取。

10 个单独的数据库调用并不好,但它不会杀死一个低使用率的站点。

于 2008-12-16T12:57:42.067 回答