【发布时间】:2019-07-19 18:31:38
【问题描述】:
让我们想象一下,您是一个流行的 CMS 的创建者,它是用 PHP 编写的。它被许多人使用,用于许多网站。现在让我们谈谈缓存技术。服务类中有一个函数 (getItemByHandle) 可以从数据库的特定表中获取特定项目。
就整体表现而言,你更愿意
- 编写数据库查询以获取此特定项目并按句柄缓存它,
- 或者,您是否更愿意获取所有项目、缓存它们,然后使用 PHP 中的 foreach 循环过滤所需的项目?
这两种技术都只会为当前请求缓存它。数据库输出仅存储在 PHP 变量中。所以没有像 Key-Value-Store 这样的进一步缓存技术。
第一种技术只会缓存已经获取的项目。每个具有不同句柄的 getItemByHandle(...) 调用都会导致新的数据库命中。
然而,第二种技术只会访问数据库一次(每个请求),但这也意味着来自数据库的流量更多,PHP 的工作量更大。因此,如果表中有数千个条目,它会为每个请求获取所有条目,但不会在同一请求中的进一步 getItemByHandle(...) 调用中访问数据库。
我问是因为也许还有其他方面需要考虑,这里没有描述。
【问题讨论】:
标签: php mysql performance caching