RDBMS vs. NoSQL 合做仍是競爭

歡迎轉載,轉載請註明出處,徽滬一郎。sql

因爲近期手頭的工做和數據庫的選型相關,糾結因而否使用一款NoSQL數據庫來替換已有的MySQL數據庫。在這個過程當中隨着學習研究的深刻,對於兩者的異同有了一些初步的認識和想法,將這些想法暫時記錄下來,權且做爲進一步學習數據庫領域知識的開端。數據庫

數據庫要解決的主要問題

不論是RDBMS仍是NoSQL,在大的方面他們都屬於數據庫這個範疇,這個範疇以內所要面臨的一些共同問題有哪些呢。下面的圖是一個大體的概括。數據結構

從圖中能夠看出,一個數據庫系統主要解決如下幾個問題:框架

  1. 數據的存儲,即要存入哪些數據到系統中,固然在data definition這一塊,有schema和no schema兩種,說白了就是數據格式和數據關係的定義問題
  2. 完成了data definition,那麼接下來天然要發生的事情就是將數據真正的存儲到系統之中,即針對數據的各類操做crud(create, read, update and delete)
  3. 數據存儲進來以後,須要挖掘數據的意義或者利用已有的數據進行統計分析,data analytic固然也能夠說是data retrieval,我我的傾向於data analytic這一說法
  4. 固然數據庫系統還有一個很是重要的方面即data control,哪些人能夠訪問,哪些人不能訪問,不一樣的人看到的內容不只相同

結構化和非結構化

RDBMS的一大特色就是數據是嚴格結構化的,存入的數據必須屬於預先定義好的某一數據結構,不然就不能存入,而NoSQL則放鬆了這一要求。函數

在不一樣的應用場景中,二者優缺點立顯,好比銀行系統,要存儲的數據格式通常是事先能夠預估,其改變的可能比較少,再好比稅務之類的。oop

而在電商和互聯網應用中,每每意味着常常進行數據格式的更改,若是採用RDBMS,schema改變帶來的開發工做則會很是巨大。學習

數據的一致性

在數據的一致性方面,RDBMS經過外鍵約束或者trigger等方式在server側來保證數據的約束。spa

從達到數據一致性的時間來看RDBMS是當即一致(immediately consistency)而NoSQL則是最終一致(eventual consistency),舉個應用場景,對銀行帳戶的任何修改都必須是即時一致的,約不參容忍不一致的出現。server

Scalability

若是說到數據庫的動態擴容,則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的技術發展。

相關文章
相關標籤/搜索