成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

宅男程序員給老婆的計算機課程之4:SQL vs NoSQL

原創
開發
這個系列來自一位宅男程序員,這個系列是他寫給老婆的電腦課程,后來經他老婆的建議,決定在51CTO這個平臺上公開出來與大家分享。技術宅的你,想看看他們究竟是如何令人發指嗎?以下,開始本系列的第5篇——SQL對決NoSQL。在幾乎所有的web應用中,數據庫都是核心的一環。

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

[[57685]]

本文作者:Wuvist

女主角:Katze,Wuvist的老婆,女程序員,在某跨國投行任Unix系統管理員,常被Wuvist嘲笑技術太差。

[[57686]]

【51CTO獨家特稿】查看全部課程請訪問宅男程序員給老婆的計算機課程

在幾乎所有的web應用中,數據庫都是核心的一環。

Web應用往往都是“Database driven”,業務、數據都是由數據庫完成,而前端頁面僅僅是演示、修改數據的一個“殼”。

因此很多web框架,都會標榜自己能夠兼容多少多少數據庫,做CRUD多么多么容易。

一般上,提到數據庫的時候,指的都是關系型數據庫;但關系型數據庫并非唯一的一種數據庫類型。

關系型數據庫,一開始便是設計為通用,并有ACID支持的。

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

殺手歐陽盆栽說:“每件事都有它的代價”。上述四個特性,都是有代價的。

對于嚴謹的商業應用,如銀行、交易系統;為求業務的安全,他們不得不,或者說,能夠并且愿意付出這些代價。

回到12306,后端數據庫傳說使用的是Oracle,而站出來說吐槽12306的行家往往都會提到 redis \ mysql 這樣的替代。

有些菜鳥“ED”看到這些吐槽就出來噴了,說這些行家不懂神馬業務安全性的重要,這幫做互聯網的弱爆了,票務是必須使用 Oracle才能搞定云云。

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

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

知識的廣博、全面性非常重要。

在某個領域,通用的東西成熟之后,往往就會有專用的解決方案出現。而專用的解決方案多了之后,又會有新的通用解決方案出現。

天下大勢,分久必合,合久必分。

計算機,最早有很多專用系統,如王安打字機;個人電腦通用之后,這些專用設備就湮滅了;而iPad、手機的涌現,則又是專用系統。

是的,傳統上需要去購買 Orcale、DB2 等巨貴無比的數據庫系統,去滿足業務需求;不是因為它們把問題解決到了極致,而是因為沒有別的選擇。時代已經變了,井底之蛙若把Oracle當成是王道,那只能被時代淘汰。

關系型數據庫作為通用解決方案,是非常非常好的;它是一把神刀。

但是,它有以下問題:

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

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

這甚至造就了一個職業:DBA。DBA去負責數據庫微調、優化,聽起來很高級,但實質上,就是給濫用SQL的“ED”擦屁股而已。

對于龐大的企業來說,管理者是知道大部分ED都弱爆了,他不期望也不需要ED去了解數據庫,他只需要ED去完成最基本的業務功能,然后讓DBA去給ED擦屁股。

大部分的ED,并沒有意識到這一點;他們拼命去追求方便快捷的“搞定”;濫用SQL的各種高級功能;甚至,他們把分享SQL的復雜使用當成是樂事。

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

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

DBA所謂的數據庫優化,往往就是把工程師不負責任寫下的2B SQL查詢找出來,然后改寫為文藝方式罷了。

不要濫用數據庫,一點都不難。

===== 通用數據庫性能有極限 =====

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

所以,DBA的另一個職責,則是把數據庫的各種參數調配好,讓其能夠發揮最高的性能。

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

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

在某些場景下,是可以用手的:把業務中沒有用到的數據庫功能都去掉;甚至,去掉完整的ACID支持。

這樣一來,數據庫的性能就可以有數量級的改善了。

===== 關鍵在于靈活性 ====

最后,上面兩點,其實都是跟性能相關的;關系型數據庫即便作為通用方案,它的性能有極限,但也能夠滿足絕大多數應用場景了。關系型數據庫的軟肋,是在靈活性上。

數據庫有表、而表有結構;而表的結構,在應用上線之后,很難修改。

這同樣造就了一些專業學問:嚴密的業務分析、設計數據庫結構、如何在數據庫上線之后修改結構等等。

這些問題或者說學問之所以存在,是植根于關系型數據庫表結構不靈活的前提之上。

再次”Think out of the box“,如果數據庫可以做到靈活、隨時修改的表結構呢?

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

關系型數據庫的三個問題,被NoSQL全部解決了。

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

ED要寫爛SQL?沒有關系,徹底不讓他們寫SQL好了。

數據庫支持功能太多?砍功能還不容易么?

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

目前,NoSQL的實現方案很多,MongoDB、Redis、Carssendra等等等等;每一個都可以非常不同,是專用解決方案:有自己獨有的特性,去解決特定場景的特定問題。

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

普通程序員用SQL,文藝程序員用NoSQL,2B程序員把NoSQL當SQL用。

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

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

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

濫用SQL會造成嚴重的性能問題,而在性能問題浮現之后,需要耗費更大的力氣去糾正。

是的,信用卡透支購物很方便;但付賬單的時候就傻逼了;所以,換成無法透支的借記卡。

固然沒有了透支的便利,會有不方便,但徹底杜絕了還不起賬單,被收取高額利息的問題。

要透支的便利?ED,請先去掌握好理財技能,徹底了解透支的影響,然后我們再來談便利。

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

SQL已經是一個非常非常成熟的方案,它所能夠解決的問題范疇里面,幾乎沒有辦法做得比SQL更好。

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

在網路編程里面也有類似的例子,TCP跟UDP。可以把SQL看成是TCP,它是可靠、神奇的。UDP雖然不可靠,但是會比TCP更快。要做視頻、語音通訊,UDP是更好的選擇。但要去做“不丟包、不失幀”的可靠視頻通訊,選擇在UDP的基礎上添加確認、重發機制模擬TCP,那就是2B了。不是天才,沒法做得比TCP更好,直接用TCP就好。

作業:
1. NoSQL的方案,如MongoDB還解決了SQL的什么問題?

2. NoSQL的應用場景有啥米?

51CTO系列:

  1. 宅男程序員給老婆的計算機課程之0:認清本質
  2. 宅男程序員給老婆的計算機課程之1:認清實際
  3. 宅男程序員給老婆的計算機課程之2:怎么看待牛人
  4. 宅男程序員給老婆的計算機課程之3:架構比較
  5. 宅男程序員給老婆的計算機課程之4:SQL vs NoSQL

【編輯推薦】

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

 

責任編輯:彭凡 來源: 51CTO
相關推薦

2012-05-21 09:04:12

宅男程序員

2012-02-01 10:19:02

宅男程序員計算機課程

2012-02-14 10:33:12

宅男程序員

2012-02-21 09:37:07

宅男程序員

2012-03-01 09:27:23

宅男程序員

2012-05-02 13:30:50

2012-05-14 09:33:21

宅男程序員

2012-02-06 10:52:14

宅男程序員

2012-03-27 09:43:28

宅男程序員

2012-04-26 08:12:01

2012-03-20 09:44:40

宅男程序員

2012-02-09 10:02:41

宅男程序員

2012-03-05 09:48:03

宅男程序員

2011-05-11 09:42:27

程序員

2012-02-12 13:31:36

2022-04-11 15:59:21

計算機

2012-03-06 09:22:46

程序員

2020-11-13 15:31:31

程序員計算機考研

2013-03-27 09:59:33

程序員編程

2009-02-13 12:20:22

程序員計算機英語
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品国产精品 | 在线免费中文字幕 | 超碰97人人人人人蜜桃 | av福利网站 | 欧美 中文字幕 | 在线观看中文字幕亚洲 | 91精品国产一区二区三区香蕉 | 午夜影视免费片在线观看 | 久久亚洲欧美日韩精品专区 | 羞羞视频在线观看 | 精品久久久精品 | 天天舔天天| 自拍偷拍精品 | 欧美精品区| 国产精品久久久久久久久久尿 | 91精品国产一区二区在线观看 | 日皮视频免费 | 天天综合91 | 一区二区三区国产精品 | 精品国产一区二区在线 | 黄色日本片| 亚洲一区自拍 | 99精品视频一区二区三区 | 欧美久久久久久 | 日韩欧美国产一区二区 | 在线不卡 | 亚洲美乳中文字幕 | 亚洲+变态+欧美+另类+精品 | 精品视频一区二区三区 | 成人影 | 美美女高清毛片视频免费观看 | 日韩国产中文字幕 | 午夜影院在线观看视频 | 欧美日韩1区 | 自拍偷拍第一页 | 91精品国产手机 | 亚洲激情一级片 | 国产成人99久久亚洲综合精品 | 美女爽到呻吟久久久久 | 久久不卡日韩美女 | 欧美成人高清视频 |