我在一个LAMP架构下使用共享主机。显然,每个页面对数据库的调用越少越好。但是多少次调用才算太多呢?两次?十次?一百次?想知道大家的想法。
我在一个LAMP架构下使用共享主机。显然,每个页面对数据库的调用越少越好。但是多少次调用才算太多呢?两次?十次?一百次?想知道大家的想法。
这实际上取决于您的(数据库)服务器设置。尽可能缓存大部分信息并将数据库调用最小化,因为数据库几乎在每种情况下都会成为您服务的瓶颈 - 站点使用率越高,这种情况就越明显。因此,无论您做什么,请尽量避免不必要的查询。
我尝试在每个页面上不使用超过10次数据库调用,但这实际上取决于您的基础设施和要提供的信息。
我认为这取决于服务器的负载。如果您每分钟只有1个访问者,则每页1-10个数据库调用就足够了。如果您的服务器负载高于此,例如每秒钟10个页面请求,则应考虑缓存以最小化对数据库服务器的负载。
我认为只要服务器(Web和数据库)能够处理所有请求并在合理的时间内返回页面,您当前的查询数量就可以了。这在很大程度上取决于服务器。 不过,无论如何尽可能少地使用查询是一个好的规则。
一条绳子有多长?一个人的腿应该有多长?在页面加载时应该进行多少个数据库查询?
没有单一的答案。显然,进行不必要的查询是一个坏主意。过度启动数据库连接更糟糕。缓存不变的值是好的。除此之外,你不能随意地说“你应该只在一个页面上使用$N个查询”——这取决于你想做什么和你的性能目标是什么。
理论上,任何应用程序都可以编写成只使用一个数据库查询——即使该查询是一个涉及未索引的完整表扫描和返回大量大部分为空的行的20路连接,一旦它到达您的应用程序,就需要处理荒谬的内存和时间。显然,这将是非常糟糕的事情。一般来说,避免做明显浪费的事情(比如在循环中执行一堆单行查询),并且后来再考虑性能问题。
以Donald Knuth的话说,“我们应该忘记小细节,大约97%的时间:过早优化是万恶之源。” 每个人都在谈论“可扩展性”,好像他们真的会成为下一个Twitter一样,但实际上,如果Twitter聚焦于如今这么大的规模,他们可能根本不可能在第一时间推出产品。最终结果取决于用户期望的体验。如果他们期望页面上显示全面的数据,那么必须有一些期望:1)网站能够在负载下运行,给定从数据库中提取的任何数量的数据,2)加载页面的时间成本将取决于该特定页面的数据负载,而不是整个服务器负载。
可接受的数据库调用次数的一个重要因素也是底层数据库设计。由于底层数据库结构的复杂性,存在着企业级电子商务网站每个(未缓存的)页面加载时经常进行数百次调用的情况。
总的来说,看待数据库调用的好方法是确定特定页面是否在可接受的时间内加载,然后查看优化加载时间、CPU和内存使用的策略。
除了缓存之外,另一个重要的问题是使用预处理语句。当您执行查询时,数据库必须 1) 分析查询并 2) 执行它。如果您使用预处理语句,则数据库可以缓存上次使用的查询计划,因此每个查询都将对数据库管理系统产生较小的负担。不要根据您执行的查询数量来计算负载,而是要考虑您对数据库管理系统施加的压力。执行100个预处理查询可能比在代码中生成50个即席查询更快。
记住,每天10万个页面请求只相当于每秒不到1个请求。只要它们不同时请求。
别忘了
Tony
一个或者更少总是最好的。两个通常就太多了。
如果你可以在单个查询中返回多个结果集,那么就这样做。如果信息相对静态,那么请将其缓存并从缓存中获取。
进行10次独立的数据库调用并不好,但对于低使用率的网站来说也不会致命。