歡迎轉載,轉載請註明出處,徽滬一郎。sql
因爲近期手頭的工做和數據庫的選型相關,糾結因而否使用一款NoSQL數據庫來替換已有的MySQL數據庫。在這個過程當中隨着學習研究的深刻,對於兩者的異同有了一些初步的認識和想法,將這些想法暫時記錄下來,權且做爲進一步學習數據庫領域知識的開端。數據庫
不論是RDBMS仍是NoSQL,在大的方面他們都屬於數據庫這個範疇,這個範疇以內所要面臨的一些共同問題有哪些呢。下面的圖是一個大體的概括。數據結構
從圖中能夠看出,一個數據庫系統主要解決如下幾個問題:框架
RDBMS的一大特色就是數據是嚴格結構化的,存入的數據必須屬於預先定義好的某一數據結構,不然就不能存入,而NoSQL則放鬆了這一要求。函數
在不一樣的應用場景中,二者優缺點立顯,好比銀行系統,要存儲的數據格式通常是事先能夠預估,其改變的可能比較少,再好比稅務之類的。oop
而在電商和互聯網應用中,每每意味着常常進行數據格式的更改,若是採用RDBMS,schema改變帶來的開發工做則會很是巨大。學習
在數據的一致性方面,RDBMS經過外鍵約束或者trigger等方式在server側來保證數據的約束。spa
從達到數據一致性的時間來看RDBMS是當即一致(immediately consistency)而NoSQL則是最終一致(eventual consistency),舉個應用場景,對銀行帳戶的任何修改都必須是即時一致的,約不參容忍不一致的出現。server
若是說到數據庫的動態擴容,則NoSQL明顯技勝一籌。blog
固然MySQL的NDB cluster在動態擴容方面,其能力也仍是不錯的。
從數據分析的層面來看,RDBMS和NoSQL之間的成熟度差距是巨大的。
RDBMS爲數據分析提供了一個清晰的標準,那就是SQL。利用SQL有很是明確的標準來進行規範,利用這些規範能夠對數據進行各類各樣的查詢,並且內置了許多函數,如average,sum,count之類,讓在進行報表分析時,輕鬆異常。
NoSQL 中的No有人解釋爲not only的意思,但未嘗又不是No SQL二字的縮寫了即there is no sql interface in the database system. 固然像MongoDB是支持Sql like的查詢語句的,但NoSQL確實沒有一套標準規範對數據的查詢和分析。
正由於NoSQL中沒有一個統一進行數據分析的標準,因此如今出現了不少實時數據處理分析的框架,最火的莫過於Spark,且Spark有最強大的hadoop發行廠商Cloudera的強勁支持,大有一統NoSQL數據分析框架之勢,將來的發展勢頭將會異常迅猛。學會使用Spark有可能會是數據分析行業的一個基本的從業要求。
我的覺得NoSQL不是以傳統RDBMS的終結者身份出現,而是對RDBMS的一種補充來填補RDBMS所不能勝任領域的技術實現。
NoSQL在發展的初期,實際上是經過放棄RDBMS的多種約束來達到其兩個主要目的,一是數據的海量存儲二是數據的動態可擴。至於數據分析則實現手法各異,對實時性的要求不是過高,故MapReduce之類的離線分析能知足其需求。
在至關長的時間內會MySQL仍是有飯吃的,固然須要同時花至關的精力來緊跟NoSQL的技術發展。