自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

宅男程序員給老婆的計(jì)算機(jī)課程之4:SQL vs NoSQL

原創(chuàng)
開發(fā)
這個(gè)系列來(lái)自一位宅男程序員,這個(gè)系列是他寫給老婆的電腦課程,后來(lái)經(jīng)他老婆的建議,決定在51CTO這個(gè)平臺(tái)上公開出來(lái)與大家分享。技術(shù)宅的你,想看看他們究竟是如何令人發(fā)指嗎?以下,開始本系列的第5篇——SQL對(duì)決NoSQL。在幾乎所有的web應(yīng)用中,數(shù)據(jù)庫(kù)都是核心的一環(huán)。

男主角:Wuvist(新浪微博),真名翁偉,自稱胖程序員一個(gè),幸好已婚。學(xué)習(xí).NET出身,現(xiàn)常用Python做服務(wù)器端開發(fā),曾任新加坡某創(chuàng)業(yè)公司主程。公司被Techcrunch blog過(guò)后,覺得新加坡生活太過(guò)安逸,終于在去年辭職只身回家鄉(xiāng)汕頭創(chuàng)業(yè),活躍于珠三角技術(shù)沙龍,熱衷于與其他技術(shù)宅分享。

[[57685]]

本文作者:Wuvist

女主角:Katze,Wuvist的老婆,女程序員,在某跨國(guó)投行任Unix系統(tǒng)管理員,常被Wuvist嘲笑技術(shù)太差。

[[57686]]

【51CTO獨(dú)家特稿】查看全部課程請(qǐng)?jiān)L問(wèn)宅男程序員給老婆的計(jì)算機(jī)課程

在幾乎所有的web應(yīng)用中,數(shù)據(jù)庫(kù)都是核心的一環(huán)。

Web應(yīng)用往往都是“Database driven”,業(yè)務(wù)、數(shù)據(jù)都是由數(shù)據(jù)庫(kù)完成,而前端頁(yè)面僅僅是演示、修改數(shù)據(jù)的一個(gè)“殼”。

因此很多web框架,都會(huì)標(biāo)榜自己能夠兼容多少多少數(shù)據(jù)庫(kù),做CRUD多么多么容易。

一般上,提到數(shù)據(jù)庫(kù)的時(shí)候,指的都是關(guān)系型數(shù)據(jù)庫(kù);但關(guān)系型數(shù)據(jù)庫(kù)并非唯一的一種數(shù)據(jù)庫(kù)類型。

關(guān)系型數(shù)據(jù)庫(kù),一開始便是設(shè)計(jì)為通用,并有ACID支持的。

Atomicity 原子性、 Consistency 一致性、Isolation 隔絕性、Durability 持久性

殺手歐陽(yáng)盆栽說(shuō):“每件事都有它的代價(jià)”。上述四個(gè)特性,都是有代價(jià)的。

對(duì)于嚴(yán)謹(jǐn)?shù)纳虡I(yè)應(yīng)用,如銀行、交易系統(tǒng);為求業(yè)務(wù)的安全,他們不得不,或者說(shuō),能夠并且愿意付出這些代價(jià)。

回到12306,后端數(shù)據(jù)庫(kù)傳說(shuō)使用的是Oracle,而站出來(lái)說(shuō)吐槽12306的行家往往都會(huì)提到 redis \ mysql 這樣的替代。

有些菜鳥“ED”看到這些吐槽就出來(lái)噴了,說(shuō)這些行家不懂神馬業(yè)務(wù)安全性的重要,這幫做互聯(lián)網(wǎng)的弱爆了,票務(wù)是必須使用 Oracle才能搞定云云。

好像還有人專門去噴了Fenng,這實(shí)在是太諷刺了。Fenng實(shí)際上是Orcale ACE Director http://www.hudong.com/wiki/%E5%86%AF%E5%A4%A7%E8%BE%89,國(guó)內(nèi)屈指可數(shù)的Oracle專家。

很多人,特別是弱“ED”、“專家教授”,沉寂在自己所在的領(lǐng)域,然后就以為“悟”了;實(shí)際上,僅是把自己變成了井底之蛙。

知識(shí)的廣博、全面性非常重要。

在某個(gè)領(lǐng)域,通用的東西成熟之后,往往就會(huì)有專用的解決方案出現(xiàn)。而專用的解決方案多了之后,又會(huì)有新的通用解決方案出現(xiàn)。

天下大勢(shì),分久必合,合久必分。

計(jì)算機(jī),最早有很多專用系統(tǒng),如王安打字機(jī);個(gè)人電腦通用之后,這些專用設(shè)備就湮滅了;而iPad、手機(jī)的涌現(xiàn),則又是專用系統(tǒng)。

是的,傳統(tǒng)上需要去購(gòu)買 Orcale、DB2 等巨貴無(wú)比的數(shù)據(jù)庫(kù)系統(tǒng),去滿足業(yè)務(wù)需求;不是因?yàn)樗鼈儼褑?wèn)題解決到了極致,而是因?yàn)闆](méi)有別的選擇。時(shí)代已經(jīng)變了,井底之蛙若把Oracle當(dāng)成是王道,那只能被時(shí)代淘汰。

關(guān)系型數(shù)據(jù)庫(kù)作為通用解決方案,是非常非常好的;它是一把神刀。

但是,它有以下問(wèn)題:

===== ED總是要寫爛SQL ====

首先. 還是那句話,有的人縱然神刀在手,亦無(wú)法成為刀中之神。關(guān)系型數(shù)據(jù)庫(kù)提供的SQL能力,是高度抽象的,封裝了無(wú)數(shù)層的。寫SQL的人,太多太多根本不了解SQL背后所執(zhí)行的事情;爛“ED”都是如此。

這甚至造就了一個(gè)職業(yè):DBA。DBA去負(fù)責(zé)數(shù)據(jù)庫(kù)微調(diào)、優(yōu)化,聽起來(lái)很高級(jí),但實(shí)質(zhì)上,就是給濫用SQL的“ED”擦屁股而已。

對(duì)于龐大的企業(yè)來(lái)說(shuō),管理者是知道大部分ED都弱爆了,他不期望也不需要ED去了解數(shù)據(jù)庫(kù),他只需要ED去完成最基本的業(yè)務(wù)功能,然后讓DBA去給ED擦屁股。

大部分的ED,并沒(méi)有意識(shí)到這一點(diǎn);他們拼命去追求方便快捷的“搞定”;濫用SQL的各種高級(jí)功能;甚至,他們把分享SQL的復(fù)雜使用當(dāng)成是樂(lè)事。

ED所努力的,是把自己變笨,把活盡可能的都交給神奇的數(shù)據(jù)庫(kù)去解決;數(shù)據(jù)庫(kù)怎么解決的,他們不關(guān)心;這實(shí)質(zhì)上,是在削弱自己工作的技術(shù)含量,自我貶值而已。

工程師如果能夠把數(shù)據(jù)庫(kù)給用好了,哪里還有DBA什么事?

DBA所謂的數(shù)據(jù)庫(kù)優(yōu)化,往往就是把工程師不負(fù)責(zé)任寫下的2B SQL查詢找出來(lái),然后改寫為文藝方式罷了。

不要濫用數(shù)據(jù)庫(kù),一點(diǎn)都不難。

===== 通用數(shù)據(jù)庫(kù)性能有極限 =====

其次,關(guān)系型數(shù)據(jù)庫(kù)作為通用解決方案,它提供了太多的東西,它做了太多的事,而所有的事情,都有它的代價(jià),直接而言,就是犧牲性能了。

所以,DBA的另一個(gè)職責(zé),則是把數(shù)據(jù)庫(kù)的各種參數(shù)調(diào)配好,讓其能夠發(fā)揮最高的性能。

從這個(gè)意義上去說(shuō),DBA的工作就不僅僅是給ED擦屁股了。

但,這樣的微調(diào),是有極限的。DBA拚了命去把雞蛋豎立起來(lái),考慮了桌面摩擦、空氣流動(dòng)、手指顫抖等等因素,雞蛋雖然可以豎立一會(huì),但終究還是會(huì)倒下去;這也就是微調(diào)的極限。

在某些場(chǎng)景下,是可以用手的:把業(yè)務(wù)中沒(méi)有用到的數(shù)據(jù)庫(kù)功能都去掉;甚至,去掉完整的ACID支持。

這樣一來(lái),數(shù)據(jù)庫(kù)的性能就可以有數(shù)量級(jí)的改善了。

===== 關(guān)鍵在于靈活性 ====

最后,上面兩點(diǎn),其實(shí)都是跟性能相關(guān)的;關(guān)系型數(shù)據(jù)庫(kù)即便作為通用方案,它的性能有極限,但也能夠滿足絕大多數(shù)應(yīng)用場(chǎng)景了。關(guān)系型數(shù)據(jù)庫(kù)的軟肋,是在靈活性上。

數(shù)據(jù)庫(kù)有表、而表有結(jié)構(gòu);而表的結(jié)構(gòu),在應(yīng)用上線之后,很難修改。

這同樣造就了一些專業(yè)學(xué)問(wèn):嚴(yán)密的業(yè)務(wù)分析、設(shè)計(jì)數(shù)據(jù)庫(kù)結(jié)構(gòu)、如何在數(shù)據(jù)庫(kù)上線之后修改結(jié)構(gòu)等等。

這些問(wèn)題或者說(shuō)學(xué)問(wèn)之所以存在,是植根于關(guān)系型數(shù)據(jù)庫(kù)表結(jié)構(gòu)不靈活的前提之上。

再次”Think out of the box“,如果數(shù)據(jù)庫(kù)可以做到靈活、隨時(shí)修改的表結(jié)構(gòu)呢?

====== NoSQL ======

關(guān)系型數(shù)據(jù)庫(kù)的三個(gè)問(wèn)題,被NoSQL全部解決了。

(同樣的,所有事情都有它的代價(jià);NoSQL在解決SQL固有問(wèn)題的同時(shí),也引入了新的問(wèn)題;另一方面,NoSQL解決的也不僅僅是SQL的這三個(gè)問(wèn)題。)

ED要寫爛SQL?沒(méi)有關(guān)系,徹底不讓他們寫SQL好了。

數(shù)據(jù)庫(kù)支持功能太多?砍功能還不容易么?

Schema不靈活?那就schema-less好了。

目前,NoSQL的實(shí)現(xiàn)方案很多,MongoDB、Redis、Carssendra等等等等;每一個(gè)都可以非常不同,是專用解決方案:有自己獨(dú)有的特性,去解決特定場(chǎng)景的特定問(wèn)題。

(當(dāng)然,像MongoDB,已經(jīng)很有NoSQL通用解決方案的意味了。)

普通程序員用SQL,文藝程序員用NoSQL,2B程序員把NoSQL當(dāng)SQL用。

普通程序員在從SQL切換去NoSQL時(shí),會(huì)受固有的SQL知識(shí)限制,總有把NoSQL當(dāng)成SQL去用的沖動(dòng),但這是非常2B的行為。

從微觀的角度講,原來(lái)SQL查詢中所支持的各種神奇joining / groupby都不見了;拼命的想要去找在NoSQL數(shù)據(jù)庫(kù)環(huán)境下同樣的神奇工具。

這徹底違背了使用NoSQL的初衷:為了就是不讓你濫用SQL的這些神奇功能。

濫用SQL會(huì)造成嚴(yán)重的性能問(wèn)題,而在性能問(wèn)題浮現(xiàn)之后,需要耗費(fèi)更大的力氣去糾正。

是的,信用卡透支購(gòu)物很方便;但付賬單的時(shí)候就傻逼了;所以,換成無(wú)法透支的借記卡。

固然沒(méi)有了透支的便利,會(huì)有不方便,但徹底杜絕了還不起賬單,被收取高額利息的問(wèn)題。

要透支的便利?ED,請(qǐng)先去掌握好理財(cái)技能,徹底了解透支的影響,然后我們?cè)賮?lái)談便利。

從宏觀的角度講,會(huì)有人企圖去給NoSQL做封裝,讓NoSQL表現(xiàn)得跟SQL一樣;甚至,去把NoSQL去掉的那些SQL功能加回去。

SQL已經(jīng)是一個(gè)非常非常成熟的方案,它所能夠解決的問(wèn)題范疇里面,幾乎沒(méi)有辦法做得比SQL更好。

在NoSQL的基礎(chǔ)上,去試圖模擬SQL,只能成為SQL的蹩腳模擬;還不如直接用回SQL。

在網(wǎng)路編程里面也有類似的例子,TCP跟UDP??梢园裇QL看成是TCP,它是可靠、神奇的。UDP雖然不可靠,但是會(huì)比TCP更快。要做視頻、語(yǔ)音通訊,UDP是更好的選擇。但要去做“不丟包、不失幀”的可靠視頻通訊,選擇在UDP的基礎(chǔ)上添加確認(rèn)、重發(fā)機(jī)制模擬TCP,那就是2B了。不是天才,沒(méi)法做得比TCP更好,直接用TCP就好。

作業(yè):
1. NoSQL的方案,如MongoDB還解決了SQL的什么問(wèn)題?

2. NoSQL的應(yīng)用場(chǎng)景有啥米?

51CTO系列:

  1. 宅男程序員給老婆的計(jì)算機(jī)課程之0:認(rèn)清本質(zhì)
  2. 宅男程序員給老婆的計(jì)算機(jī)課程之1:認(rèn)清實(shí)際
  3. 宅男程序員給老婆的計(jì)算機(jī)課程之2:怎么看待牛人
  4. 宅男程序員給老婆的計(jì)算機(jī)課程之3:架構(gòu)比較
  5. 宅男程序員給老婆的計(jì)算機(jī)課程之4:SQL vs NoSQL

【編輯推薦】

  1. PHP+MySQL應(yīng)用中使用XOR運(yùn)算加密算法
  2. 保證你從來(lái)沒(méi)見過(guò)的算法的舞蹈(視頻)
  3. 淺談PHP 5中垃圾回收算法的演化
  4. JavaScript版幾種常見排序算法分享
  5. 程序員須知的二十世紀(jì)最偉大10大算法

 

責(zé)任編輯:彭凡 來(lái)源: 51CTO
相關(guān)推薦

2012-03-01 09:27:23

宅男程序員

2012-05-14 09:33:21

宅男程序員

2012-05-02 13:30:50

2012-02-14 10:33:12

宅男程序員

2012-02-21 09:37:07

宅男程序員

2012-02-06 10:52:14

宅男程序員

2012-02-01 10:19:02

宅男程序員計(jì)算機(jī)課程

2012-05-21 09:04:12

宅男程序員

2012-03-20 09:44:40

宅男程序員

2012-03-27 09:43:28

宅男程序員

2012-04-26 08:12:01

2012-02-09 10:02:41

宅男程序員

2012-03-05 09:48:03

宅男程序員

2011-05-11 09:42:27

程序員

2012-02-12 13:31:36

2012-03-06 09:22:46

程序員

2012-04-09 09:42:56

2023-08-07 12:11:26

CPU存儲(chǔ)器SSD

2022-04-11 15:59:21

計(jì)算機(jī)

2015-03-24 14:11:41

程序員
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)