熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

PHPer為什麼被認為是草根?[2]

2013-11-15 12:42:33  來源: PHP編程 

  這裡我們不對這兩種方式的效率進行對比我想大家都有各自的想法但是我想說明一個問題就是這兩種做法的本質的區別PHPer習慣性地用數據庫來處理而且有很巧的處理方式效率也很高!這種方式就是數據庫查詢而第二種方法是比較有特點的他認為數據庫就是存放數據的地方具體的邏輯處理還要靠自己的邏輯

  因此結論是第二種方法的使用者覺得自己強些因為數據的邏輯是他組織的!並且覺得PHPer的那種做法無非就是會查詢數據庫罷了所以他認為PHPer是草根級的只懂得操作數據庫和排列頁面(smarty搞搞那種)

  說到這裡我想大家都已經回憶了不少自己平時用PHP做開發的經歷了吧是否發現大家確實都在操作數據庫呢

  那麼我們來討論下這個問題數據庫不好嗎?為什麼我一直用數據庫處理數據都沒有問題我要說的是數據庫是有問題的而且有很大的問題!當然這裡我並不是說不能用數據庫也不是在貶低數據庫的性能而是我們沒有充分認識到數據庫所起到的作用

  我的想法源起於這樣一個事情有一次一個網站的技術總監問我為什麼他們的網站那麼慢要怎麼辦當時我的MSN裡Zend總部的工程師正好在線我就問他PHP響應比較慢了怎麼辦?他當時直接告訴我數據庫問題!肯定是數據庫沒有優化設計好所以我沒有給那個技術總監確切的答案了因為他們的數據庫設計我們是不能涉及的所以就給了大概的數據庫優化的建議這樣的事情屢次發生我就開始懷疑為什麼Zend總部的工程師每次都跟我說是數據庫的問題呢難道我們不能從PHP層面來解決這個問題嗎?答案是不能!因為PHP目前的運行速度已經是很快了通過Zend的性能分析也能看到一個用戶的點擊PHP的運行時間只有%不到那PHP在干嗎?它在等等數據庫的查詢結果這個方面在目前的PHP產品中有了很大的提高那就是Caching和網頁靜態化兩個方案Caching可能大家會比較陌生但是網也靜態化現在連PHP產品的用戶都非常清楚了速度快容易被搜索到等等好處不言而喻開玩笑地說現在網站的主頁實現網頁靜態化只需要硬盤足夠大J至於Caching就比較復雜些也是大多數PHPer感到頭疼的地方甚至於有些人會用C來實現因為Caching中的數據有效期驗證查找提取更新等等都是比較難處理當然也有人會用數據庫來處理Caching問題

  所以當訪問量激增的時候PHP架構的網站會出現的很多問題都因數據庫而起數據庫的同步問題還不算什麼關鍵是數據庫的響應速度會有指數級的降低這個問題我在號LAMP發布會的時候問過MySQL的副總裁他當時也沒有給我比較完美的答案(這也我的意料之中)因為數據庫總會有瓶頸的除非是神仙數據庫哈哈!

  這裡有個題外話LAMP大會的時候我跟Yahoo的一個技術高管聊的時候我問他Yahoo在選擇MySQL還是Oracle的時候是怎麼考慮他的答案令我非常驚訝他說大部分的時候我們是會用MySQL的因為它的性能已經達到我們的要求但是什麼時候我們會選用Oracle呢就是當我們需要存儲收費用戶的數據的時候我就問為什麼難道Oracle比MySQL穩定嗎?他說這個倒沒有特別考慮關鍵是如果使用Oracle的話當出現問題的時候我們可以找到負責人Oracle會負責事故的處理但是如果用MySQL的話我們找誰去?

  所以我們對數據庫的看法應該糾正過來就是說數據庫不是萬能的如果有實力的話自己開發數據庫聽說Google就是那樣的

  那麼我們怎麼看待數據庫呢?我個人的理解是數據庫只是用來降低開發成本的手段因為采用數據庫以後我們不需要考慮數據的存儲尤其是排序和查找但是這會帶來什麼問題呢?就是當業務膨脹的時候數據庫就成為瓶頸了!這個時候問題就會非常棘手!因為這個是底層的數據處理牽一發而動全身

  所以我認為正確的觀點是數據庫是一個數據備份機!怎麼理解我們只需要保證數據的存儲有效性就行了而這本來就是數據庫的核心功能只不過因為數據庫的方便的排序等功能讓大家把過多的處理都交給數據庫來操作了一個用戶的點擊PHP就把一大堆的任務交給數據庫然後把結果排列下給用戶就完事了這對數據庫是不公平的!也是因此大家開始抱怨數據庫的性能了

  針對這個觀點我們再舉個例子有一次我去拜訪一個大型的網絡公司(基本上國內只要上過互聯網的都知道)他們使用PHP很少但是我了解到他們其它業務是怎麼使用數據庫他們自豪地跟我介紹說他們在數據庫的外圍有個第二數據庫(我這裡起名叫第二數據庫)為什麼叫第二數據庫呢原來它是一個緩存系統那麼開發工程師怎麼去這個緩存系統獲取數據呢?那個技術總監自豪地說他們這個緩存系統由SQL查詢語句!我當時很驚訝但是後來想想確實需要這個因為當你的緩存系統達到一定量級的時候從緩存獲取數據都非常復雜干脆寫個SQL查詢語句讓緩存系統分析處理並返回數據而且他們告訴我在他們那裡就算是用PHP的話也是讓PHP去那個緩存系統讀取數據

  所以說如果你能處理好這樣的問題的話把數據存放在數據庫然後數據庫只起到備份的作用然後你用自己的中間層來處理分析數據效果是%以上的用戶訪問不訪問數據庫有人就會說了這不就類似連接池的東西嗎?是的!因為數據庫的瓶頸是無法解決的我們只能在Web服務器和數據庫中間加個中間層來做緩沖

  可能大家會說了這個我們早就知道了!那好這裡我要說的是它引發的兩點思考

  <![if !supportLists]>第一 <![endif]>有些語言已經有連接池技術的基礎上那些程序員可以方便地使用連接池而構建大型應用那麼如果他們認為PHPer只會是用數據庫那麼我們是不是可以說他們只會是用連接池呢?連接池和數據庫在這個概念上有何區別?

  第二 當PHPer開始構建自己的緩存系統的時候他是不是突破了PHPer只會是用數據庫的層次?因為他參與了數據邏輯的處理工作那麼他還是草根嗎?

  最後新一代的PHPer是草根嗎?

[]  []  


From:http://tw.wingwit.com/Article/program/PHP/201311/21453.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.