php数据结构不够丰富 php数据存储( 二 )


说到这里,大家明白了吧?大部分PHPer仅仅处理表现层的东西,而在MySQL的便捷使用下,PHPer几乎不用触及任何数据结构与算法的情况下完成大部分开发任务,所以一个才有上面的,没有一个PHP程序员能够回答出那道数据结构的问题 , 换成是C等语言 , 情况可能就大不相同了 。是PHPer草根 , 才让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产品的用户都非常清楚了 。速度快、容易被搜索到等等,好处不言而喻 。开玩笑地说,现在网站的主页实现网页静态化只需要硬盘足够大 。J至于Caching就比较复杂些 , 也是大多数PHPer感到头疼的地方 。甚至于有些人会用C来实现 。因为Caching中的数据有效期验证、查找、提取、更新等等都是比较难处理 。当然,也有人会用数据库来处理 Caching问题 。

推荐阅读