我有一个评级系统,可以评分或限定大约20个字段以及其他数据。问题可能更多的是设计问题,但蛋糕肯定不能很好地处理它,导致apache2飙升我的CPU。
我有一个叫做推荐的表,它是一个简单的ID,Name。此表填充了以下内容:
1 - 正确 2 - 不正确 3 - 失踪 4 - NA
审核表有许多字段,这些字段是推荐表的外键。
字段1 - Field20参考建议ID
我看到的是,即使我没有点击会引用评论的页面,每个页面请求都会激活CPU(apache2消耗掉50-90%的CPU)。
我猜这与蛋糕处理模型绑定的方式有关。我可以使用像枚举这样的东西,但这不是那么灵活。
关于更好的设计或如何调试蛋糕让Apache变得疯狂的任何想法?
var $name = 'Review';
var $actsAs = array('Containable');
var $validate = array(
'service_request' => array(
'minLength' => array(
'rule' => array('minLength', 8),
'message' => 'Enter a valid Service Request Number'
),
'maxLength' => array(
'rule' => array('maxLength', 8),
'message' => 'Enter a valid Service Request Number'
),
'numeric' => array(
'rule' => 'numeric',
'message' => 'Enter a valid Service Request Number'
)
)
);
var $belongsTo = array(
'Employee' => array(
'className' => 'Employee',
'foreignKey' => 'reviewer_id',
),
'Reviewer' => array(
'className' => 'Employee',
'foreignKey' => 'reviewer_id'
),
'Reviewee' => array(
'className' => 'Employee',
'foreignKey' => 'reviewee_id'
),
'Rating' => array(
'className' => 'Rating',
'foreignKey' => 'rating_id',
),
'SrSummary' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_summary'
),
'SrProduct' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_product'
),
'SrVersion' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_version'
),
'SrRelease' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_release'
),
'SrComponent' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_component'
),
'SrTechnicalProblem' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_technical_problem'
),
'SrCommunicationOwner' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_communication_owner'
),
'SrCommunicationGroup' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_communication_group'
),
'SrOwnerGroup' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_owner_group'
),
'SrOwnerGroupGeo' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_owner_group_geo'
),
'SrStatus' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_status'
),
'SrSubstatus' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_substatus'
),
'SrSeverity' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_severity'
),
'SrPriority' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_priority'
),
'SrHwPlatform' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_hwplatform'
),
'SrBuild' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_build'
),
'SrSerial' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_serial'
),
'SrManualSerial' => array(
'className' => 'Recommendation',
'foreignKey' => 'sr_manual_serial'
),
'Note' => array(
'className' => 'Note',
'foreignKey' => 'note_id'
),
'Timing' => array(
'className' => 'Timing',
'foreignKey' => 'timing_id'
)
);
答案 0 :(得分:0)
有一个控制器指的是所有评论。在不需要时提取数据时,需要禁用关联。您没有显示任何代码,但在运行查询之前它将看起来像这样。
$this->Model->recursive = -1;
答案 1 :(得分:0)
很难说无法调试您的网站,但是 - 有些事情。
如果您尚未使用DebugKit,请获取它。然后,您可以轻松查看运行的所有/所有mysql查询以及它们每次运行的时间。
CPU峰值可能与运行查询过多信息(即过多的相关数据)有关。获取正确版本的DebugKit,具体取决于您正在运行的Cake版本,查看所有查询以及运行所需的时间,然后调整您的关联或递归级别,或包含...等不要获取多余的数据。
(或者,如果你达到了解特定查询的问题,但无法找出原因,请将其作为另一个StackOverflow问题发布)
不相关的说明:
设置与评论相关联关联的“正常”方式是在评论表中只有一个'foreign_key'
和一个'model'
字段,然后设置使用这些协会 - 就像这样:
var $belongsTo = array(
'Employee' => array(
'className' => 'Employee',
'foreignKey' => 'foreign_key',
'conditions' => array('Review.model' => 'Employee')
),
//...
这样,如果您添加了另一个模型,您可以链接到它,而无需在评论表中添加另一个字段。