当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 13 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [转帖] 值得 PHPer 思考的问题
帖子发表于 : 2007-08-29 23:51 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
引用:
作者:Hosander
来自:PHPChina.com

前言:以下文字并没有非常多的技术词汇,所以只要对PHP感兴趣的人都可以看看。

从 PHP 诞生之日起, PHP 就开始在 Web 应用方面为广大的程序员服务。同时,作为针对 Web 开发量身定制的脚本语言, PHP 一直秉承简单、开源的思想,这也使得 PHP 得以快速的发展,并且大力地推动 Web2 . 0 的出现与发展。但是,长期以来, PHPer ( PHP Programmers )被认为是处于草根阶层的程序员,被认为是技术含量少,层次低的程序员。这点在国内尤其突出。

记得一个技术主管说过这样一个事情。他给一个程序员分配了 PHP 的开发任务,没想到那个程序员居然说:“我是学 Java 出身的,你让我去写 PHP ,你这不是在贬低我吗?”。这件事情给我印象很深、触动也很大。虽然这不能代表大部分程序员的看法,但是这么认为的人应该不少。还有人说,现在如果是大型的政府项目,PHP 是肯定不会被列入考虑的范围之内的。

那么为什么 PHPer 会被认为是草根阶层,是因为它很简单,人人都可以学会,所以没什么难度吗?我以前也是这么认为。PHP 入门很快,处理文件,数据,远程连接,网络编程都非常方便,官方也有这样的说法:PHP 学习的成本很低,所以你容易去使用它。这个想法也是普遍的,甚至大部分的 PHPer 自己都这样认为。

说到这里,我想大家就会想到我为什么要写这些文字。一年多的 PHP 推广工作让我了解到许许多多的使用 PHP 的公司的大概情况,在这些过程中我慢慢体会到其中的根本原因。这里我说是根本原因虽然是个人的看法,但是我觉得事实就是如此。

那么为什么 PHPer 会被看成草根阶层,根本原因是 PHPer 所作的事情(通过代码实现)的绝大部分都是表现层的东西,这个熟悉 PHP 的人都知道。当然也会有 PHPer说他用 MVC 结构编写的某某框架具备的如何如何的功能。但是这些还是表现层。所以只会处理表现层的程序员就被看成草根阶层了。事实上也是如此,因为这种情况下 PHP 确实很难构造大型的应用。

这就找到原因了,不是的。为什么 PHPer 总是在负责表现层的东西呢。答案是底层的数据处理( Web 应用就是数据存储和查找)我们一般不去触及!好,那么说到这里有些人可能已经想到了,那不就是数据库吗!对,就是数据库!让 PHPer 一直当草根的元凶就是数据库。为什么?

因为目前流行的 web 架构中,前端是负载均衡系统,中间是 web 服务器,后面是数据库服务器。所以,大部分 PHPer 工作在 Web 服务器层面。因为数据库已经很好地为我们组织数据了。所以 PHP 中没有太多的算法,而且大家潜意识下也觉得不需要,更何况会影响性能与维护。

这种情况下,PHPer 就成为了数据库使用者,他总是在操作数据库。而不是在做程序。一个最简单的 PHP 脚本就是,连接数据库,把数据取出来,然后用命令输出到浏览器。整个过程不超过 10 行代码。给人的感觉就是太简单了。没有任何技术含量。为什么,因为数据处理部分都已经被数据库做完了。尤其是 MySQL 的使用! MySQL 是免费的,所以大多数程序员可以自由地使用它,另外 MySQL 的速度够快了,所以做个 PHP 应用程序非常的简单。这就相当于给你枪以后你觉得没有必要学习武功一样。当然,我不是说枪没有武功好。而是说,枪的出现,小孩都可以轻松便捷地杀人了。

http://www.phpchina.com ·PHPer· 40

视点
我们再详细说说为什么是数据库!这里我说一个例子。我去过北京一家非常著名的网站,当时我们还有一个比较资深的 PHP 程序员在那说些系统架构的事情。我记得当时那个程序员问大家一个数据结构中的算法问题的时候,全场没有一个人能答得出来(包括我)。然后那个程序员就开始给大家讲些很基础的数据结构的东西了。让我一下子回想到大学时候学的数据结构课。而这些基础的数据排序、查找、传递的问题在其他高级语言(比如 C )是非常普遍的。但是在 PHP 没有!PHPchina . com 的论坛也有个板块叫 PHP 的数据结构和算法。这个板块的帖子也是寥寥无几。

仔细回想下,目前网络上大家讨论的最多的是两个方面的问题。一个是 PHP 的类的使用(处理过程的封装),还有一个是开发框架问题。但是我们仔细分析的话,发现这些所谓的 PHP 中比较复杂的概念里面没有数据处理!为什么,有数据库!用一个 Adodb 或者 PHP5 的 PDO 就可以搞定了!真的搞定了吗?不是,这些无非是在连接数据库,没有数据处理!所以 PHPer 似乎就没有什么可以拿出台面上的东西。

再说一个具体的代码问题,无级分类。这个概念我想大家都不会陌生了吧。我见过两种处理方式。第一个是地道的 PHPer 的处理方式,也是目前比较流行的。就是用数据库来处理。而且字段很少,只需要加个父类的字段并加以判断就行了。而且这个方法很实用。效率也高!但是这个不是数据处理的范畴了,而是数据库的查找!

第二个是 C 程序员用 PHP 写出来的,他把所有的分类信息都从数据库取出来,然后用数据结构算法进行排列分布,然后输出。

这里我们不对这两种方式的效率进行对比,我想大家都有各自的想法。但是我想说明一个问题,就是这两种做法的本质的区别。 PHPer 习惯性地用数据库来处理,而且有很巧的处理方式,效率也很高!这种方式就是数据库查询。而第二种方法是比较有特点的。他认为数据库就是存放数据的地方,具体的逻辑处理还要靠自己的逻辑。

因此,结论是第二种方法的使用者觉得自己强些,因为数据的逻辑是他组织的!并且觉得 PHPer 的那种做法无非就是会查询数据库罢了。所以他认为 PHPer 是草根级的,只懂得操作数据库和排列页面( smarty 搞搞那种)。

说到这里,我想大家都已经回忆了不少自己平时用 PHP 做开发的经历了吧,是否发现大家确实都在操作数据库呢。
那么我们来讨论下这个问题。数据库不好吗?为什么我一直用数据库处理数据都没有问题。我要说的是我们所理解的数据库是有问题的,而且有很大的问题!当然这里我并不是说不能用数据库,也不是在贬低数据库的性能。而是,我们没有充分认识到数据库所起到的作用。

我的想法源起于这样一个事情,有一次一个网站的技术总监问我,为什么他们的网站那么慢,要怎么办。当时,我的 MSN 里 Zend 总部的工程师正好在线,我就问他 PHP 响应比较慢了,怎么办?他当时直接告诉我,数据库问题!肯定是数据库没有优化设计好。所以,我没有给那个技术总监确切的答案了,因为他们的数据库设计我们是不能涉及的。所以就给了大概的数据库优化的建议。这样的事情屡次发生,我就开始怀疑,为什么 Zend 总部的工程师每次都跟我说是数据库的问题呢,难道我们不能从 PHP 层面来解决这个问题吗?答案是不能!因为 PHP 目前的运行速度已经是很快了,通过 Zend 的性能分析也能看到一个用户的点击,PHP 的运行时间只有 10 %不到,那 PHP 在干吗?它在等。等数据库的查询结果。这个方面在目前的 PHP 产品中有了很大的提高,那就是 Caching 和网页静态化两个方案。 Caching 可能大家会比较陌生,但是网页静态化现在连 PHP 产品的用户都非常清楚了。速度快、容易被搜索到等等,好处不言而喻。开玩笑地说,现在网站的主页实现网页静态化只需要硬盘足够大。至于 Caching 就比较复杂些,也是大多数 PHPer 感到头疼的地方。甚至于有些人会用 C 来实现。因为 Caching 中的数据有效期验证、查找、提取、更新等等都是比较难处理。当然,也有人会用数据库来处理 Caching 问题。

所以,当访问量激增的时候, PHP 架构的网站会出现的很多问题都因数据库而起。数据库的
http://www.phpchina.com ·PHPer· 41

视点
同步问题还不算什么。关键是数据库的响应速度会有指数级的降低。这个问题我在 10 月 23 号 LAMP 发布会的时候问过 MySQL 的副总裁。他当时也没有给我比较完美的答案(这也我的意料之中),因为数据库总会有瓶颈的!

这里有个题外话,LAMP 大会的时候我跟 Yahoo 的一个技术高管聊的时候,我问他 Yahoo 在选择 MySQL 还是 Oracle 的时候是怎么考虑,他的答案令我非常惊讶。他说大部分的时候我们是会用 MySQL 的,因为它的性能已经达到我们的要求。但是什么时候我们会选用 Oracle 呢,就是当我们需要存储收费用户的数据的时候。我就问为什么,难道 Oracle 比 MySQL 稳定吗?他说,这个倒没有特别考虑。关键是如果使用 Oracle 的话,当出现问题的时候我们可以找到负责人, Oracle 会负责事故的处理,但是如果用 MySQL 的话,我们找谁去?

所以,我们对数据库的看法应该纠正过来,就是说数据库不是万能的。如果有实力的话自己开发数据库。听说 Google 就是那样的。

那么我们怎么看待数据库呢?我个人的理解是数据库只是用来降低开发成本的手段。因为采用数据库以后我们不需要考虑数据的存储,尤其是排序和查找。但是这会带来什么问题呢?就是当业务膨胀的时候,数据库就成为瓶颈了!这个时候问题就会非常棘手!因为这个是底层的数据处理。牵一发而动全身。

所以我认为正确的观点是,数据库是一个数据备份机!怎么理解,我们只需要保证数据的存储有效性就行了。而这本来就是数据库的核心功能,只不过因为数据库的方便的排序等功能让大家把过多的处理都交给数据库来操作了。一个用户的点击 PHP 就把一大堆的任务交给数据库,然后把结果排列下给用户就完事了。这对数据库是不公平的!也是因此大家开始抱怨数据库的性能了。

针对这个观点,我们再举个例子,有一次我去拜访一个大型的网络公司(基本上国内只要上过互联网的都知道),他们使用 PHP 很少,但是我了解到他们其它业务是怎么使用数据库。他们自豪地跟我介绍说他们在数据库的外围有个第二数据库(我这里起名叫第二数据库)。为什么叫第二数据库呢,原来它是一个缓存系统。那么开发工程师怎么去这个缓存系统获取数据呢?那个技术总监自豪地说,他们这个缓存系统由 SQL 查询语句!我当时很惊讶,但是后来想想确实需要这个。因为当你的缓存系统达到一定量级的时候从缓存获取数据都非常复杂,干脆写个 SQL 查询语句让缓存系统分析、处理并返回数据。而且他们告诉我,在他们那里,就算是用 PHP 的话也是让 PHP 去那个缓存系统读取数据。

所以说,如果你能处理好这样的问题的话,把数据存放在数据库,然后数据库只起到备份的作用。然后你用自己的中间层来处理分析数据,效果是 90 %以上的用户请求不访问数据库。有人就会说了,这不就类似连接池的东西吗?是的!因为数据库的瓶颈是无法解决的,我们只能在 Web 服务器和数据库中间加个中间层来做缓冲。

可能大家会说了,切,这个我们早就知道了!那好,这里我要说的是它引发的两点思考:
第一、 有些语言已经有连接池技术的基础上,那些程序员可以方便地使用连接池而构建大型应用。那么如果他们认为 PHPer 只会是用数据库,那么我们是不是可以说他们只会是用连接池呢?连接池和数据库在这个概念上有何区别?

第二、 当 PHPer 开始构建自己的缓存系统的时候,他是不是突破了 PHPer 只会是用数据库的层次?因为他参与了数据逻辑的处理工作。那么他还是草根吗?

最后,新一代的 PHPer 是草根吗?

作者简介:phpchina.com站长


_________________
http://lee.youxu.info/


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-08-30 0:01 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
骗分的,骗分的,


_________________
http://lee.youxu.info/


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-09-13 21:15 
头像

注册: 2007-01-16 17:21
帖子: 13
送出感谢: 0 次
接收感谢: 0 次
我觉得写的不错,尤其是最后那句:"新一代的 PHPer 是草根吗? "


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-09-21 13:33 

注册: 2006-12-20 10:59
帖子: 35
地址: 浙江
送出感谢: 0 次
接收感谢: 0 次
不是说 谁谁是草根 而是看你创造的价值。
一个人的 创造的价值 不一定的看他的职业 ,阶级的


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2007-09-28 16:44 
头像

注册: 2007-09-28 2:33
帖子: 47
地址: 重庆
送出感谢: 0 次
接收感谢: 0 次
我不知道楼主在转这张帖的时候想过一个问题没有?
如果按他的想法一个大型的门户网站(比如:MOP.COM 163.COM)这样的网站 仅仅是提供信息服务的网站 为了应付一天上G的流量 需要多大的内存配置?10G还是100G?
离开大学很久了 依稀记得在大学时代学习"数据结构"的时候就已经领悟到低的时间复杂度是以消耗不成比例的空间复杂度为代价的
所谓的"WEB缓存技术开发"和"数据库访问技术开发"不过是两者的切入点不同 一个节约时间 一个节约空间而已

你可以想象一下 对每个网站的访问者分配一个SESSION 然后SESSION中放入大量的数据 速度确实上去了 但是1G的内存你能承载多少人的访问呢?


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2007-10-16 15:41 

注册: 2007-10-16 15:17
帖子: 7
送出感谢: 0 次
接收感谢: 0 次
说的都很有道理
楼上的关注的是时空复杂度互换的道理。可能这就是业界和学术界的区别吧。
相比而言存储的价格大大下降了。可以接受用大空间消耗换取时间复杂度的减少。


但是楼主说的php偏于表象层的问题确实存在。


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2007-10-16 18:11 
头像

注册: 2005-10-02 8:22
帖子: 723
送出感谢: 0 次
接收感谢: 0 次
在我看来,我个人更倾向于数据库的优化。而不是针对查询的优化。对一个查询,这两种方法在很多情况下都能实现要求的效果,但是,从理论上看,在数据库方面进行优化更能实现效果。记得曾经做一个程序,我写的东东很少,但更多的是在数据库端。老大说我东东有问题,我心里大笑。谁叫你数据库没优化好呢?注:老大的据说的DBA。


_________________
子曰,三人行,必有我师,吾曰,世间万物,皆为我师.


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2007-10-16 18:38 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
蛮有道理的.尤其是红色部分,值得深思.


_________________
关注我的blog: ε==3


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2007-11-26 9:28 
头像

注册: 2006-11-05 10:43
帖子: 92
送出感谢: 0 次
接收感谢: 0 次
呵呵,看了一下,感觉还不错。。。。。。


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2007-11-26 9:39 

注册: 2007-09-14 19:51
帖子: 972
送出感谢: 0 次
接收感谢: 0 次
红色部分也是很多企业用windows而不用linux的原因,
不过很多企业用的也是盗版的


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2007-11-30 9:02 
头像

注册: 2007-01-31 15:07
帖子: 17
送出感谢: 0 次
接收感谢: 0 次
嗯 這是篇好文 頂一下


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2007-12-01 0:37 

注册: 2007-11-26 17:49
帖子: 19
送出感谢: 0 次
接收感谢: 0 次
PHP开发人员现在太多了,不值钱了。


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2007-12-05 10:32 

注册: 2007-11-14 16:38
帖子: 16
送出感谢: 0 次
接收感谢: 0 次
不知道还该不该学php :?:


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 13 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译