Yii中的模式缓存

Boh*_*ona 7 php caching yii

http://www.yiiframework.com/doc/guide/1.1/en/topics.performance,我们可以看到以下信息:

" 如果应用程序使用Active Record,我们应该打开模式缓存以节省解析数据库模式的时间.这可以通过配置CDbConnection::schemaCachingDuration property to be a value greater than 0. "

我有一些问题:

1.我们为什么要使用模式缓存?

2.架构缓存如何工作?

3.我在哪里可以看到测试?

Tim*_*ier 6

如果将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将在每个请求上从多个表加载模式,因此模式缓存可以在请求响应中产生巨大差异时间.


top*_*her 0

如果您要启用博客,您将看到CActiveRecord对象在每次应用程序运行时读取其各自的表模式。您可以查看代码CActiveRecord::_construct()CActiveRecordMetaData::__construct()了解这是如何完成的。缓存架构可以减少对数据库的调用次数,从而加快应用程序的速度,因为数据库通常是应用程序的瓶颈。