Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该在哪里做计算,PHP还是Mysql?_Php_Mysql - Fatal编程技术网

我应该在哪里做计算,PHP还是Mysql?

我应该在哪里做计算,PHP还是Mysql?,php,mysql,Php,Mysql,我现在做了很多计算工作。通常我更喜欢用PHP而不是MySQL进行这些计算,尽管我知道PHP在这方面并不擅长。我想MySQL可能更糟。但我发现了一些性能问题:一些页面加载速度太慢,30秒的时间限制对它们来说是不够的!所以我想知道哪里是进行计算的更好的地方,有什么原则吗?请注意,我想说,在C++语言中创建的语言计算。但是,如果您选择mysql和php,php会更好。任何可以使用RDBMS(分组、求和、AVG)完成的操作,其中数据可以在服务器端进行过滤,都应该在RDBMS中完成 如果计算更适合于PHP

我现在做了很多计算工作。通常我更喜欢用PHP而不是MySQL进行这些计算,尽管我知道PHP在这方面并不擅长。我想MySQL可能更糟。但我发现了一些性能问题:一些页面加载速度太慢,30秒的时间限制对它们来说是不够的!所以我想知道哪里是进行计算的更好的地方,有什么原则吗?请注意,我想说,在C++语言中创建的语言计算。但是,如果您选择mysql和php,php会更好。

任何可以使用RDBMS(分组、求和、AVG)完成的操作,其中数据可以在服务器端进行过滤,都应该在RDBMS中完成


如果计算更适合于PHP,那么可以这样做,但是在PHP中不要尝试使用RDBMS。你会输的。

使用PHP,不要让你的MySQL做无休止的计算。如果你在谈论排序之类的事情,那么使用MySQL来处理类似的东西是可以的,SUM,AVG,但不要做得太过分。

CMPTRGEEKEN是对的,我们需要更多的信息。但是,如果需要执行与数据库查询相关的计算或对其执行操作,请从数据库中删除字段,让数据库执行。在SQL中执行特殊查询是很便宜的(就时间而言,它为此进行了优化),但PHP和MySQL都是服务器端的—在哪里执行计算并不重要。但正如我前面所说的,如果它们是对数据库信息的操作,则进行更复杂的SQL查询并使用它

原生MySQL函数非常快。因此,请在您的查询中执行有意义的操作


如果您有多台服务器(即一台web服务器和一台DB服务器),请注意,DB服务器比web服务器贵得多,因此,如果您有大量流量或非常繁忙的DB服务器,请不要执行“附加”操作,这些操作可以在web服务器计算机上轻松/高效地处理,以帮助防止减速。

我建议使用RDBMS进行任何行级计算

如果您需要切换到另一种脚本语言(比如PHP到Python),您不仅可以从更好的性能中获益,而且还可以使应用程序更易于移植,因为您已经使用RBDM对数据进行了排序、过滤和处理


它还帮助分离应用程序逻辑,帮助我在MVC环境中工作时保持控制器干净整洁。

只需跟踪瓶颈所在。如果您的表由于尝试运行某些计算而被锁定,则队列中的其他所有人都在等待读取/写入所选表中的数据,并且队列将继续增长

MySQL处理命令的速度通常更快,但PHP应该能够处理简单的问题,而不需要太多麻烦。当然,这并不意味着您应该为同一计算多次ping数据库


如果可以的话,您最好缓存结果,并让cron每天/小时更新一次(请不要每分钟更新一次,您的主机提供商可能会讨厌您)。

尽可能多地进行过滤和合并,以将最少的数据量带入php。一旦您拥有了最小的数据集,那么它就取决于您正在做什么、服务器负载以及其他因素

如果您可以在这两个方面都做得同样好,并且sql编写(和维护)不太复杂,那么就这样做。对于简单的数学,sql通常是一个很好的选择。对于字符串最终长度大致相同或增长的字符串操作,php可能是一个不错的选择


最重要的是请求尽可能少的数据。数据的操作,至少是sql所能做的,是检索和传输数据的次要工作。

我想我们需要更多的信息。“你在做什么样的计算?”安德烈同意。如果可以的话,我会……你能详细说明是什么让它更好吗?它更好是因为mysql是为数据操作而创建的,因此它是为数据操作而优化的。语言引擎并没有php的好,因为php完全是为了编写脚本而做的,这取决于什么样的计算。如果是CPU密集型或任意精度的数学运算,最好将C/C++与libgmp或Python结合使用。如果是简单的聚合,那么在MySQL中尽你所能而不使MySQL代码复杂到可笑的程度,然后在PHP中完成其余的工作。实际上,MySQL本机函数非常快,使用它们通常比在PHP中重新处理“原始”数据更有效。一个非常常见的例子是日期算法。另一方面,排序,特别是在索引不可用的情况下,可能会非常慢,在某些情况下,在PHP中可能会做得更好。但不要忘记visa verse规则:如果您对一条数据进行大量计算,则不适合dbI,如果可以的话,我会对此进行更多的投票。OP我公司的产品经常将数千万行汇总为1000行或更少。他们的工作站通常是库存平均系统;他们的数据库服务器是8核或16核的野兽,拥有数十Gig的RAM。为什么我们要在一台内存有限的单处理器或双处理器机器上运行所有这些数据?尽可能靠近数据进行工作。