標籤:原始碼 nosql資料庫
24歲以後博文更新逐漸減少了,因為守著“每篇文章都是思索所得”的原則,希望能對讀者有所啟發而堅持不發一篇垃圾文章。
24歲以前,一直信仰原始碼實現,覺得所有的核心技術,都在於原始碼實現(尤其是C原始碼)。
直到24歲,學習之餘,偶有所悟——技術的核心在於原始碼,而項目的核心卻並不在於具體實現,而在於業務的解決方案!
那麼,到底是原始碼實現更重要一些呢?還是業務解決方案更重要一些呢?
我不能給出大家一個標準答案。我相信,任何有點深度的人也不會主動給出一個答案。
這個問題的核心其實就是理論和實踐哪個更重要一些?
幾千年來爭論不休。不過,在明朝有一位偉大的哲學家王守仁給出了一個較為完美的答案——知行合一。
也就是說,理論很重要,實踐也很重要,兩個東西缺一不可。
好的,那我們簡單說下業務的解決方案的重要性。
當我們面對一個典型的互連網web項目,我們首先會考慮什麼呢?
如果項目細節要求不高(並發量1000以下),首先考慮的是怎麼以最低的成本完成項目——LAMP的組合。我們會考慮到web項目的功能,頁面配置。等功能、頁面配置設定好了,就可以設計資料庫表(mysql)。一旦mysql的表設計好了,就可以動手畫web前台頁面和寫效果,web頁面調試好了就可以寫PHP的邏輯代碼把系統貫通起來。
問:在做這個項目的時候,我們會去思考mysql的原始碼怎麼實現的嗎?
答:不會。我相信大部分同學都不會考慮這個問題。因為這個項目基本上只要能搞出來就行了,至於搞得好不好,或許根本沒人在意。
問:如果系統的訪問量大了10倍,你會怎麼處理呢?
答:SQL最佳化、主從複製提升讀能力。我相信大部分同學會考慮做SQL最佳化、主從複製。
問:那麼,我接著提問了。如果系統的訪問量大了100倍呢?
問:當你發現SQL本來就很簡單,改加的索引都加了,執行計畫完美,該做的複製也做了,但是master就是壓力非常大,大到做分裂都還是頂不住,你會怎麼想呢?
答:用NoSQL軟體就行了。
問:如何選擇合適的NoSQL軟體呢?作為項目負責人,你怎麼知道你選擇的NoSQL軟體適合用來解決你所面臨的業務問題呢?如果選擇不合適,後期需要把資料移轉到別的合適的nosql資料庫上去,相應的成本和風險,誰來承擔?
答:用業界最廣泛的解決方案和諮詢類似業務的朋友就行了,何必那麼認真。
我說:如果你想混吃混喝、不承擔項目的責任,那麼,這種方法是可行的;如果你想承擔項目的責任,這種做法肯定是要悲劇的;如果自己都搞不清楚,別人就更高不清楚,出了問題,你肯定會被拉出來背黑鍋。
問:如何才能做到為合適的業務選擇合適的nosql呢?
答:只有對核心技術把握到一定程度(資料結構、演算法、作業系統、server軟體原始碼實現),選擇nosql才能做到胸有成竹,當一種全新的nosql出來的時候才能做出優劣評判;反之,永遠只能成為一個follower,而不能成為引領者。
問:很多人都說只要能解決問題就行了,不必深入學習。
答:這種人一般有兩個特點:A,沒有深入學習的能力,所以覺得不必深入學習。B,沒有深入學習的能力,出了問題只能百度或者跪求答案,所以,覺得不必深入學習。
問:解決問題真的需要掌握原始碼嗎?
答:解決問題不必要掌握原始碼,但是,如果學習停留在表面,那麼,一旦有了技術革新,就會被行業淘汰被問題解決。
問:原始碼學習的目標是什麼呢?
答:如果不是立志成為一個資料庫或者作業系統核心研發者,那麼,只要能從原始碼層面判斷出作者的設計理念和核心產品的特性就足夠了。這是一種思維、愛好、興趣,而不是工作的指標。
問:學習Oracle的internal是在研究核心技術嗎?
答:如果是Oracle核心研發者,有參與研發核心原始碼的權利,那麼研究Oracle internal是核心技術;如果是市面上的普通dba或者使用者研究Oracle internal就不是研究核心技術了。
問:那麼,為什麼那麼多人要研究Oracle internal呢?
答:因為他們被某些人造牛忽悠了,覺得研究Oracle internal很牛,大部分人都想牛,所以都去研究Oracle internal。
問:為什麼你覺得市面上普通dba研究Oracle internal不是研究核心技術呢?
答:市面上研究Oracle internal的技術無非來源於流傳出來的DSI、White paper,自己dump等等,認為這些就是internal,其實這些都是帶了安全套的的internal,寫文檔的人一般都不是原始碼作者,原始碼都有bug何況一些文檔編寫者,靠文檔來找自信是緣木求魚。真的想玩資料庫的internal,postgersql、mysql等都是開源了的,大可以滿足自己的研究慾望。退一萬步講,連開源的mysql和postgresql都沒研究懂,去妄自猜測不開源的Oracle,不是自慰嗎?
原始碼VS業務的悟道——知行合一