为什么 PHP 一直在优化程序执行效率,而不优化数据库连接?
底部的连接池技术,应该不是什么难事,比起优化PHP执行效率来说,应该very easy,但是至今仍然没有内置连接池技术(或者类似技术),还是一请求一线程,用完销毁,下次再重新连接。为什么不在PHP中内置相应的解决方案呢?
----------------------- 以下是精选回复-----------------------
答:mysql的连接池技术在1(shi)1(yi)年前就有了。
答:数据库持久连接老早就有了
答:至于像java之类那样「真正意义上的连接池」技术,在PHP上是根本不可行的。
PHP就是被设计成每次运行完以后销毁一切状态,任何数据都不会带到下一个执行环境上去的。
所以不可能内置一个全功能的「连接池」,而只能从第三方扩展里实现。
如果你需要全功能连接池技术,那你就不能用PHP而需要用常驻内存型的语言,比如Java,ASPX,Ruby,Python,等等。
答:mysql: mysql-proxy、cobar、atlas
postgresql: pgbouncer、plproxy、slony
sql查询尽量不使用函数、外键(看场景)
foreach ($rows50万 as $item) $db->select(sql);
碰到这样的二逼程序员,数据库优化的再牛逼也没用。
答:我想问下这里的 webmaster 是傻逼吗?回复一个调侃php是世界上最好的语言帖子,不但删除帖子还封闭账号。
答:个人觉得PHP亟待解决的问题有三个:效率、异步、并行。
都解决好了才能成为真正的世界上最好的语言。
答:php从本身的设计上来说就不能支持这样的方式
答:因为实在是太简单,一个页面生命周期实在是太短了。。。。。所以得上memcache或者redis
答:php(不包括扩展)是使用进程做为最基础的调度单元的:
1. 一个请求, 新建一个php进程.
2. 一个进程里, 也只有一个线程.
3. 一个请求处理完成自动释放进程.
所以, 如果在一个请求里, 先搞一个数据库连接池, 请求结束再释放掉它, 成本太高了. php语言的设计者认为多线程是不安全的...异步编程是反人类的...所以他们把php设计成了这样的语言...
答:php作者设计php的初衷就是为了开发个人网站的,所以一开始并没有考虑那么多,而后期的不断升级也都是向下兼容的,而因为这种内嵌网页式的代码书写方式,还是被很多人吐槽为模板语言,至今很多人也并不承认php是一门独立的语言,不过这也并不影响它的流行。
一般来说说,连接池技术,php在做网站开发的时候,因为其语言的执行机制,执行一遍然后销毁所有内存,所以确实是无法像java,ruby,python一样,从语言层面建立一个连接池,但可以通过第三方实现。
而目前的大公司,访问量达到了一定的级别,通常的做法都是将各类服务封装为api,由php去调用,然后生成页面,而那些服务为了达到高性能,一般会才用java,c去开发,每个语言都有适合自己的地方。
答:请看react项目,可以让php变成node
答:更正 : 还在这抱怨别人用做 => 还在这抱怨别人不做
答:1. 有持久链接
2. 有扩展可以实现复用
答:1.php是自己封装的,近几年其他语言发展很快,所以优化php执行效率压力山大;
2.php所使用的mysql是oracle自己发布的,要优化也是oracle的事情……
你以为没有连接池技术么,虽然我没看oracle的代码,但我不信。
答:mark 一下,我也很关注数据库连接池
答:好久没来了,已经改 JAVA 很多年了。。。
0条评论