gpt4 book ai didi

php - 将值计算从 SQL 移到 PHP 层是否更好?

转载 作者:行者123 更新时间:2023-11-29 06:57:06 25 4
gpt4 key购买 nike

该方法用于选择User和TargetUser之间的 Action 数,例如就在两个用户之间。此方法的结果值取决于 GetTotalOfPossibleActions() 动态返回值(每个用户都有自己的编号)。

问题:将值计算从 SQL 转移到 PHP 层是否更好?

public function GetAction() {

// ...

$MaxActionCount = $this->GetTotalOfPossibleActions();

return registry::getInstance()->get('DB')->select(
'SELECT
`Action`
, `HA`.`Id` AS `ActionId`
, IF(`Count` IS NULL
, IF('.$MaxActionCount.' % 2
, IF(`HA`.`Id` = 1
, CEIL('.$MaxActionCount.' / 2)
, FLOOR('.$MaxActionCount.' / 2))
, '.$MaxActionCount.' / 2)
, GREATEST(IF('.$MaxActionCount.' % 2
, IF(`HA`.`Id` = 1
, CEIL('.$MaxActionCount.' / 2) - CONVERT(`H`.`Count`, SIGNED)
, FLOOR('.$MaxActionCount.' / 2) - CONVERT(`H`.`Count`, SIGNED))
, '.$MaxActionCount.' / 2 - `H`.`Count`), 0)
) AS `CountLeft`
FROM `Help` AS `H`
RIGHT JOIN `HelpAction` AS `HA`
ON `H`.`ActionId` = `HA`.`Id`
AND `UserId` = '.$this->UserId.'
AND `TargetUserId` = '.$this->TargetUserId.'
AND `CreatedDate` = CURDATE()'));

}

最佳答案

没有硬性规定,但以下是我应用的一般指南。

PHP 服务器可以进行负载平衡和倍增。因此,如果您的 CPU 周期不足,您可以相对轻松地添加另一个 PHP 服务器。反之,MySQL服务器不能轻易倍增。您可以添加复制服务器并在从属服务器上运行复杂的“选择”,但是复制会增加一点压力,并且在主服务器上更新和从服务器上可用之间总是存在延迟。 (永远不要相信数据库管理员说的是毫秒;当服务器承受压力/有备份等时它会变慢)

所以对 PHP +1。

但是,SQL 的构建和设计是为了对数据进行计算。这就是它的工作。它的效率要高得多(假设您正确设计了表、查询和索引)。

所以对 mySQL +1。

如果在MySQL上进行计算,也不需要将整个数据表都交给PHP来处理处理。这节省了两者之间的网络流量。

所以对 mySQL +1。

但是如果你正在为正确的查询而苦苦挣扎,或者 MySQL 正在耗尽你所有的内存,不停地创建临时表并交换到硬盘,那么通过分解PHP中的计算。 MySQL EXPLAIN 和慢速查询日志有时令人沮丧。

所以对 PHP +1。

所以... 2 所有。如果你同时在一台服务器上,而且查询没有给你带来问题,让 MySQL 来完成它的工作。如果您遇到查询问题,请返回 PHP。如果您在多个服务器上,请尽可能多地使用 MySQL,而不会遇到瓶颈。如果 MySQL 成为瓶颈并且无法进行复制,请退回到 PHP。但随后检查网络流量。

然后记得在负载增加时重新评估...

关于php - 将值计算从 SQL 移到 PHP 层是否更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12083767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com