SQL與NoSQL(關係型與非關係型)數據庫的區別

永遠正確的經典答案依然是:具體問題具體分析。數據庫

數據表VS.數據集編程

關係型和非關係型數據庫的主要差別是數據存儲的方式。關係型數據自然就是表格式的,所以存儲在數據表的行和列中。數據表能夠彼此關聯協做存儲,也很容易提取數據。與其相反,非關係型數據不適合存儲在數據表的行和列中,而是大塊組合在一塊兒。非關係型數據一般存儲在數據集中,就像文檔、鍵值對或者圖結構。你的數據及其特性是選擇數據存儲和提取方式的首要影響因素。數組

預約義結構VS.動態結構緩存

關係型數據一般對應於結構化數據,由於數據表都有預約義好的結構(列的定義),結構描述了數據的形式和內容。這一點對數據建模相當重要,你必須「第一時間先把結構定義好」。雖然預約義結構帶來了可靠性和穩定性,可是已經存入數據的表結構要修改就很是痛苦了。另外一方面,非關係型數據基於動態結構,一般適用於非結構化數據。非關係型數據能夠很容易適應數據類型和結構的變化,由於動態結構自己就支持這一點。服務器

存儲規範化VS存儲代價架構

關係型數據庫的數據存儲是爲了更高的規範性,把數據分隔成最小的邏輯表(關係表)以免重複,得到最精簡的空間利用。雖然數據規範性會使數據管理更清晰,但它一般也會帶來一點點複雜性,尤爲是單個操做可能涉及多個關係表的時候,數據管理就有點麻煩。另外,更精簡的空間利用一般能夠節約寶貴的數據存儲,可是在當今世界咱們基本能夠認爲存儲的代價(磁盤空間)是微不足道的。而非關係型數據存儲在平面數據集中,數據常常可能存在重複。單個數據庫不多被分隔開,而是存儲成一個總體,這樣是爲了整塊數據更容易讀寫。併發

縱向擴容VS橫向擴容編程語言

SQL和NoSQL數據庫最大的差異多是在擴展方式上,要支持日益增加的需求固然要擴展。要支持更多併發量,SQL數據庫是縱向擴展,也就是說提升處理能力,使用速度更快速的計算機,這樣處理相同的數據集就更快了。由於數據存儲在關係表中,操做的性能瓶頸可能涉及不少個表,這都須要經過提升計算機性能來客服。雖然SQL數據庫有很大擴展空間,但最終確定會達到縱向擴展的上限。而NoSQL數據庫是橫向擴展的。非關係型數據存儲自然就是分佈式的,NoSQL數據庫的擴展能夠經過給資源池添加更多普通的數據庫服務器(節點)來分擔負載。分佈式

結構化查詢VS非結構化查詢性能

關係型數據庫經過所謂結構化查詢語言(也就是咱們常說的SQL)來操做數據。SQL支持數據庫CRUD(增長,查詢,更新,刪除)操做的功能很是強大,是業界標準用法。非關係型數據庫以塊(像文檔同樣)爲單元操縱數據,使用所謂的非結構化查詢語言(UnQL),它是沒有標準的,因數據庫提供商的不一樣而不一樣。關係型表中主鍵的概念對應非關係存儲中的文檔Id。SQL數據庫使用預約義優化方式(好比列索引定義)幫助加速查詢操做,而NoSQL數據庫採用更簡單而精確的數據訪問模式。

映射VS本地化

SQL和NoSQL數據存儲的選擇還取決於開發人員,儘管這個因素影響不大。採用面向對象編程語言的開發人員一般會同時操做一個或多個數據實體(包括嵌套數據、列表和數組的複雜結構),把數據傳遞給應用程序用戶界面。要是討論到底層數據庫,事情就並不老是那麼公平合理了。在關係型存儲中,數據實體一般須要分紅多個部分進行規範化,而後分開存儲到多個關係型表中精簡存儲。幸運的是,這是一個長期存在的問題,大部分編程平臺都有相應的簡單解決方案,好比ORM層(對象關係映射)。ORM是位於關係型數據源和開發者使用的面向對象數據實體之間的一個映射層。然而,對於非關係型存儲,不須要規範化數據,複雜數據實體能夠總體存放在獨立單元中。應用程序中使用的對象一般序列化爲JSon串,存儲在NoSQL數據庫的JSon文檔中。

事務性VS純擴展性

若是你的數據操做須要高事務性或者複雜數據查詢須要控制執行計劃,那麼傳統的SQL數據庫從性能和穩定性方面考慮是你的最佳選擇。SQL數據庫支持對事務原子性細粒度控制,而且易於回滾事務。雖然NoSQL數據庫也可使用事務操做,但它們真正閃亮的價值是在操做的擴展性和大數據量處理方面。

ACID VS CAP

SQL 數據庫久負盛名的價值就是經過所謂的ACID屬性(原子性,一致性,隔離性,持久性)保證數據完整性,大部分關係型存儲供應商都支持ACID。咱們的目標是支持隔離不可分割的事務,其變化是持久的,數據也保持一致狀態。而NoSQL數據庫是讓你在CAP(一致性,可用性,分區容忍度)中的任意兩項中選擇,由於在基於節點的分佈式系統中,很難作到三項都知足。

數據VS大數據

SQL數據庫能夠可靠地存儲和處理數據,而NoSQL最大的優點是在應對大數據方面,也就是由咱們社會或者計算機天天產生的大量非結構化的數據實體。NoSQL用無模式方式作數據管理,因此其橫向擴展潛力是無限的,這多是深度處理大數據捕獲、管理、檢索、分析和可視化的惟一有效途徑。

數據記錄VS物聯網和人聯網

關係數據庫在關注數據規範化和保證性能的基礎上精簡存儲。可是近年來,咱們產生數據的速度遠大於關係型存儲能知足存儲的能力增加。刺激數據如此迅猛增加的緣由是:巨大量的用戶數和物聯網。鏈接到互聯網的用戶在成倍增長,在同步使用咱們的應用。因爲大量移動設備數據傳感設備接入互聯網,機器產生的數據量也大幅增長。所以企業必須尋求NoSQL技術及基礎架構來處理持續涌入的半結構化和非結構化數據。

內部部署VS雲計算

雲計算如今已經無處不在了,它兼具SQL和NoSQL數據庫的益處。雲環境中的關係型存儲一般是以服務形式提供的,是可複製、高可用性且分佈式的,極大地提升了橫向擴展能力。託管於雲服務中的NoSQL數據庫也自然享有自動分片的好處,能夠階段性地靈活彈性處理,集成高速緩存和巨大的計算能力來捕獲、存儲和分析大數據。

付費VS開源

有一種見解認爲,SQL數據庫大多數比較昂貴,而NoSQL數據庫一般都是開源的。事實上,兩種類型數據庫都有開源的和商業的。常見的SQL 數據庫有微軟公司的SQL Server,MySQL,SQLite,Oracle和PostGres。流行的NoSQL數據庫有Couchbase,MongoDB,Redis,BigTable和RavenDB。

SQL和NoSQL這二者都有各自的優缺點,選擇正確的架構取決於你構建應用的需求。

 

 

來源:http://m.blog.csdn.net/article/details?id=51779361

相關文章
相關標籤/搜索