在这里http://www.yiiframework.com/doc/guide/1.1/en/topics.performance我们可以看到如下信息:
"如果应用程序正在使用 Active Record,我们应该打开模式缓存以节省解析数据库模式的时间。这可以通过将 CDbConnection::schemaCachingDuration 属性配置为一个值来完成大于 0。
"
我有一些问题:
<强>1。为什么要使用模式缓存?
<强>2。模式缓存如何工作?
<强>3。我在哪里可以看到测试?
最佳答案
如果您将 Yii 设置为记录数据库查询('enableParamLogging' => true
在您的配置文件的 db 设置中),您可以看到 Yii 频繁查询数据库以进行 ActiveRecord 查询。
例如:假设你有一个名为 User
的模型,你告诉 Yii 通过主键给你一个用户,Yii 将查询数据库三次(!)次。它将执行一个show columns
查询,然后是一个show create table
查询,最后它会在数据库中查询实际数据。前两个查询让 Yii 知道你的 user
表的模式。如果从您的应用程序服务器到数据库服务器的往返时间是 100 毫秒(如果它真的这么慢,您应该采取一些措施),那么这两个获取模式的查询将至少为您的应用程序响应时间增加 200 毫秒。它将为填充您的 User
模型的每个请求执行此操作。根据您的应用程序的编写方式,它甚至可能在单个请求中执行多次。
另一方面,如果您告诉 Yii 使用模式缓存,Yii 将检查缓存以查看它是否已经知道您的 user
表的模式,如果知道,它将使用而不是访问数据库。检查缓存仍然存在延迟,但希望它小于或等于数据库服务器的延迟。假设您正在使用 Redis 服务器进行缓存,并且它还有 100 毫秒的延迟(也长得离谱)。缓存模式仍然比查询数据库更快,因为 Yii 只需要查询一次缓存来检索模式,而不是两次访问数据库。
所以在这个例子中,从查询高延迟数据库的模式切换到查询高延迟缓存服务器仍然会节省你的时间。实际上,你的缓存应该比你的数据库延迟低得多,因此可以节省你更多的时间,如果你的应用程序非常复杂,Yii 将在每个请求上从多个表加载模式,因此模式缓存可以在请求响应中产生巨大的差异时间。
关于php - Yii 中的模式缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23466159/