mongoDB(1)——前序(NoSQL)

                                             mongoDB(1)——前序(NoSQL)mysql

MongoDB是非關係型數據庫的一種。在進入mongoDB的學習以前,咱們先來了解一下非關係型數據庫(NoSQL)。web

        1、NoSQL的產生sql

             隨着web2.0的興起,特別是超大規模和高併發的網站對數據庫提出了進一步的需求(大數據量引起的一系列問題),而關係型數據庫面對這些新的需求,顯得有些力不從心,例如:mongodb

             1. 面對數據庫高併發讀寫的需求,關係數據庫應付上萬次sql查詢還勉強頂的住,可是應付上萬次sql寫數據請求,硬盤IO就沒法承受了。由於關係型數據庫各個數據之間存在關聯,爲了進行join處理,不得不把數據存儲在同一個服務器內,這樣不利用數據分散,不具有寫擴展性。數據庫

             2. 面對海量數據的高效率存儲和訪問的需求,在一張上萬條甚至上億條記錄的表裏進行sql查詢,效率是極其低下的。關係型數據庫是使用專門的sql語言進行數據讀取的,它須要對sql語言進行解析,同時還有對錶的鎖定和解析這樣的額外開銷。服務器

             3. 面對數據庫的高可擴展性和高可用性的需求,由於關係型數據庫的存儲是創建在關係模型基礎上的,當關系模型發生變更時,對於已經存儲了大量數據的關係型數據庫來講,是很是麻煩的事情。架構

            在新需求面前,關係數據庫遇到了難以克服的障礙,而與此同時,web2.0對關係數據庫的不少主要特性卻每每要求不那麼高,例如:併發

             1. 對數據庫事務一致性的需求,不少web實時系統並不要求嚴格的數據庫事務,對讀一致性的要求很低,有些場合對寫一致性要求也不高。數據庫設計

             2. 對數據庫的寫實時性和讀實時性需求,不少網站並不須要插入數據後當即顯示。高併發

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

           關係數據庫在這些愈來愈多的應用場景下顯得不那麼合適了,爲了解決這些問題,非關係型數據庫應運而生。

 

         2、NOSQL優勢

            1. 大數據量,高性能

                 NoSQL數據庫都具備很是高的讀寫性能,尤爲在大數據量下,一樣表現優秀。這得益於它的無關係性,數據庫結構簡單,這樣,能夠利用經過增長主服務器來實現數據庫的讀擴展性。而上面也說過了,面對大數據量的寫入問題,關係型數據庫仍是存在壓力的。

            2. 靈活的數據模型

               在關係型數據庫中,每一張表就是一個關係模式的映射,當關系模型發生改變時,哪怕是很小的變動,都是很麻煩的,甚至還須要停機或者下降服務級別。

               而NoSQL的存儲是模式自由的,無需事先爲要存儲的數據創建字段,隨時能夠存儲自定義的數據格式,數據之間能夠沒有任何格式限制。

            3.  易擴展

               因爲NoSQL數據庫所存儲數據之間的無關係性,使數據庫易於擴展,並且,在架構的層面上也帶來了可擴展的能力。

 

          3、NoSQL與關係型數據庫設計理念的比較

              關係型數據庫是創建在關係模型基礎上的,藉助於集合代數等數學概念和方法來處理數據庫中的數據。其中每一張表就是一個關係模式的映射,每條記錄字段的組成都同樣,即便不是每條記錄都須要全部的字段,但數據庫也會爲每條記錄分配全部的字段。這樣的結構便於表與表之間的關聯。

              NoSQL數據庫是模式自由的,存儲的數據不侷限於固定的結構,數據之間能夠沒有任何關係。這樣的結構顯得更加靈活,也減小了一些時間和空間的開銷。

  

           4、總結

             NoSQL數據庫的出現,彌補了關係型數據庫在某些方面的不足,但從功能上講,NoSQL的幾乎全部功能,在關係數據庫上都能知足,因此,選擇NoSQL的緣由並不在功能上,而是兩者都有各自的特色和應用場景,二者的緊密結合將會給web2.0的數據庫發展帶來新的思路,讓關係型數據庫關注在關係上,非關係型數據關注在存儲上。

相關文章
相關標籤/搜索