NoSQL和傳統SQL數據庫的比較

      網友投稿 973 2025-03-31

      NoSQL出現的目的就是為了解決高并發讀寫的問題,而高并發應用往往需要分布式的數據庫來實現高性能和高可靠性,所以NoSQL的關鍵字就是concurrency和scalability。NoSQL(非關系式數據庫)和傳統SQL數據庫的比較如下:

      1、高并發讀寫:傳統SQL數據庫為了實現ACID(atomicity, consistency, isolation, durability),往往需要頻繁應用文件鎖,這使得其在現代的web2.0應用中越來越捉襟見肘。例如SNS網站每一個點擊都是一條/多條查詢,對數據庫寫的并發要求也非常高,而傳統數據庫無法很好地應對這種需求。SNS中大部分需求并不要求ACID,比如Like/Unlike投票等等。

      web2.0網站要根據用戶個性化信息來實時生成動態頁面和提供動態信息,所以基本上無法僅僅使用動態頁面靜態化技術,因此數據庫并發負載非常高,往往要達到每秒上萬次讀寫請求。關系數據庫應付上萬次SQL查詢還勉強頂得住,但是應付上萬次SQL寫數據請求,硬盤IO就已經無法承受了。例如對于普通的BBS網站,往往也存在對高并發寫請求的需求,例如網站的實時統計在線用戶狀態,記錄熱門帖子的點擊次數,投票計數等,因此這是一個相當普遍的需求。

      NoSQL吸取了教訓,比如有些NoSQL采用了eventually consistency的概念,延遲達到一致性,在沒有Update操作一段時間后,數據庫將最終是consistency的,顯然這樣的數據庫將能更好的支持高并發讀寫。

      2、高可擴展性:在基于web的架構當中,數據庫是最難進行橫向擴展的,當一個應用系統的用戶量和訪問量與日俱增的時候,你的數據庫卻沒有辦法像web server和app server那樣簡單的通過添加更多的硬件和服務節點來擴展性能和負載能力。對于很多需要提供24小時不間斷服務的網站來說,對數據庫系統進行升級和擴展是非常痛苦的事情,往往需要停機維護和數據遷移,為什么數據庫不能通過不斷的添加服務器節點來實現擴展呢?

      其次,SQL數據庫是基于schema的(schema:架構,包含表、視圖、過程等),這對時時刻刻更新著的web2.0應用開發者來說是個噩夢:隨時隨地有新的應用出現,舊的數據庫無法適應新的應用,只能不停地更新schema,或者做補丁表,如此一來要么schema越發混亂,要么就是數據庫頻繁升級而耗時耗力耗錢。

      NoSQL一般就沒有schema這種概念,大部分NoSQL都直接保存json類的Row,比如一個記錄可以是{ id = 1, name = Bob, phone = 38492839 },這樣擴展升級非常方便,比如需要地址信息直接加入 address=blahblah 即可。

      3、處理海量數據海量數據的高效率存儲和訪問):傳統SQL很難進行分布式應用,即使可以也往往代價高昂。而NoSQL則很好地解決了這個問題:他們一般都直接從分布式系統中吸取了Map/Reduce方法,從而很容易就可以處理規模急速增加的問題。

      類似Facebook,twitter,Friendfeed這樣的SNS網站,每天用戶產生海量的用戶動態,以Friendfeed為例,一個月就達到了2.5億條用戶動態,對于關系數據庫來說,在一張2.5億條記錄的表里面進行SQL查詢,效率是極其低下乃至不可忍受的。再例如大型web網站的用戶登錄系統,例如騰訊,盛大,動輒數以億計的帳號,關系數據庫也很難應付。

      Web網站對傳統關系式DB的需求要求不同:

      SQL并非適用于所有的程序代碼,對于那些繁重的重復操作的數據,SQL值得花錢。但是當數據庫結構非常簡單時,SQL可能沒有太大用處。關系數據庫提供了無可比擬的功能集合,而且在數據完整性上也發揮絕對穩定,但是,企業的具體需求可能沒有那么多。以Adobe的ConnectNow為例,當用戶在線時它會不通過數據庫而制作三份會話數據,在離線后刪除。因此并不需要數據庫,因為具體所需要的數據是在內存中的。

      NoSQL和傳統SQL數據庫的比較

      Web網站的減弱的關系式DB需求:

      1、數據庫事務一致性需求

      很多web實時系統并不要求嚴格的數據庫事務,對讀一致性的要求很低,有些場合對寫一致性要求也不高。因此數據庫事務管理成了數據庫高負載下一個沉重的負擔。

      2、數據庫的寫實時性和讀實時性需求

      對關系數據庫來說,插入一條數據之后立刻查詢,是肯定可以讀出來這條數據的,但是對于很多web應用來說,并不要求這么高的實時性,比方說發一條消息之后,過幾秒乃至十幾秒之后,訂閱者才看到這條動態是完全可以接受的。

      3、對復雜的SQL查詢,特別是多表關聯查詢的需求

      任何大數據量的web系統,都非常忌諱多個大表的關聯查詢,以及復雜的數據分析類型的復雜SQL報表查詢,特別是SNS類型的網站,從需求以及產品設計角度,就避免了這種情況的產生。往往更多的只是單表的主鍵查詢,以及單表的簡單條件分頁查詢,SQL的功能被極大的弱化了。

      轉載請注明出處:華為云博客 https://portal.hwclouds.com/blogs

      數據庫

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何在Excel中添加標題行
      下一篇:成功分析云
      相關文章
      亚洲精品第一综合99久久| 亚洲成a人片在线观看中文!!!| 亚洲一线产区二线产区区| 亚洲黄网站wwwwww| 亚洲成Av人片乱码色午夜| 亚洲人成伊人成综合网久久久| 亚洲一区二区三区影院 | 激情小说亚洲色图| 亚洲GV天堂GV无码男同| 国产精品亚洲AV三区| 精品亚洲视频在线| 亚洲M码 欧洲S码SSS222| 亚洲第一区在线观看| 国产国拍亚洲精品福利 | 国产精品亚洲不卡一区二区三区 | 亚洲精品日韩专区silk| 亚洲第一福利视频| 日韩精品一区二区亚洲AV观看| 久久综合亚洲鲁鲁五月天| 亚洲精品免费在线| 亚洲a视频在线观看| 亚洲中文无码永久免费| 亚洲成av人片在www鸭子| 国产精品亚洲综合一区在线观看| 国产亚洲Av综合人人澡精品| 亚洲精品第一国产综合精品99| 久久久久国产亚洲AV麻豆| 国产亚洲一区二区三区在线| 国产亚洲成av人片在线观看 | 亚洲AV综合色区无码一二三区| 在线精品自拍亚洲第一区| 亚洲精品国产福利一二区| 亚洲中文字幕久久精品无码APP | 亚洲欧美乱色情图片| 最新亚洲人成网站在线观看| 亚洲乱码日产精品a级毛片久久| 国产亚洲AV手机在线观看| 久久国产亚洲电影天堂| 亚洲视频在线观看地址| 中国亚洲呦女专区| 亚洲高清偷拍一区二区三区 |