RDBMS vs. NoSQL Clojure概述
RDBMS vs. NoSQL 合作還是競爭
數(shù)據(jù)庫要解決的主要問題
不管是RDBMS還是NoSQL,在大的方面他們都屬于數(shù)據(jù)庫這個范疇,這個范疇之內(nèi)所要面臨的一些共同問題有哪些呢。下面的圖是一個大致的歸納。
從圖中可以看出,一個數(shù)據(jù)庫系統(tǒng)主要解決以下幾個問題:
結(jié)構(gòu)化和非結(jié)構(gòu)化
RDBMS的一大特點就是數(shù)據(jù)是嚴(yán)格結(jié)構(gòu)化的,存入的數(shù)據(jù)必須屬于預(yù)先定義好的某一數(shù)據(jù)結(jié)構(gòu),否則就不能存入,而NoSQL則放松了這一要求。
在不同的應(yīng)用場景中,兩者優(yōu)缺點立顯,比如銀行系統(tǒng),要存儲的數(shù)據(jù)格式一般是事先可以預(yù)估,其改變的可能比較少,再比如稅務(wù)之類的。
而在電商和互聯(lián)網(wǎng)應(yīng)用中,往往意味著經(jīng)常進(jìn)行數(shù)據(jù)格式的更改,如果采用RDBMS,schema改變帶來的開發(fā)工作則會非常巨大。
數(shù)據(jù)的一致性
在數(shù)據(jù)的一致性方面,RDBMS通過外鍵約束或者trigger等方式在server側(cè)來保證數(shù)據(jù)的約束。
從達(dá)到數(shù)據(jù)一致性的時間來看RDBMS是立即一致(immediately consistency)而NoSQL則是最終一致(eventual consistency),舉個應(yīng)用場景,對銀行賬戶的任何修改都必須是即時一致的,約不參容忍不一致的出現(xiàn)。
Scalability
如果說到數(shù)據(jù)庫的動態(tài)擴容,則NoSQL明顯技勝一籌。
當(dāng)然MySQL的NDB cluster在動態(tài)擴容方面,其能力也還是不錯的。
數(shù)據(jù)分析或數(shù)據(jù)挖掘工作
從數(shù)據(jù)分析的層面來看,RDBMS和NoSQL之間的成熟度差距是巨大的。
RDBMS為數(shù)據(jù)分析提供了一個清晰的標(biāo)準(zhǔn),那就是SQL。利用SQL有非常明確的標(biāo)準(zhǔn)來進(jìn)行規(guī)范,利用這些規(guī)范可以對數(shù)據(jù)進(jìn)行各種各樣的查詢,而且內(nèi)置了許多函數(shù),如average,sum,count之類,讓在進(jìn)行報表分析時,輕松異常。
NoSQL 中的No有人解釋為not only的意思,但何嘗又不是No SQL二字的縮寫了即there is no sql interface in the database system. 當(dāng)然像MongoDB是支持Sql like的查詢語句的,但NoSQL確實沒有一套標(biāo)準(zhǔn)規(guī)范對數(shù)據(jù)的查詢和分析。
機會在哪里
正因為NoSQL中沒有一個統(tǒng)一進(jìn)行數(shù)據(jù)分析的標(biāo)準(zhǔn),所以現(xiàn)在出現(xiàn)了很多實時數(shù)據(jù)處理分析的框架,最火的莫過于Spark,且Spark有最強大的hadoop發(fā)行廠商Cloudera的強勁支持,大有一統(tǒng)NoSQL數(shù)據(jù)分析框架之勢,未來的發(fā)展勢頭將會異常迅猛。學(xué)會使用Spark有可能會是數(shù)據(jù)分析行業(yè)的一個基本的從業(yè)要求。
總結(jié)
個人以為NoSQL不是以傳統(tǒng)RDBMS的終結(jié)者身份出現(xiàn),而是對RDBMS的一種補充來填補RDBMS所不能勝任領(lǐng)域的技術(shù)實現(xiàn)。
NoSQL在發(fā)展的初期,其實是通過放棄RDBMS的多種約束來達(dá)到其兩個主要目的,一是數(shù)據(jù)的海量存儲二是數(shù)據(jù)的動態(tài)可擴。至于數(shù)據(jù)分析則實現(xiàn)手法各異,對實時性的要求不是太高,故MapReduce之類的離線分析能滿足其需求。
在相當(dāng)長的時間內(nèi)會MySQL還是有飯吃的,當(dāng)然需要同時花相當(dāng)?shù)木砭o跟NoSQL的技術(shù)發(fā)展。
Clojure概述
楔子
由于閱讀storm源碼的原因,頭一次接觸到Clojure。沒有花特別的時間來研究clojure語法,只是在一些特殊的用法時,才查了一下clojure官網(wǎng)的文檔,基本上能夠很快的理解其意思。
在理解了storm中的基本處理流程之后,花了一段時間好好的看了幾本clojure編程的書籍,書籍名稱及評價分別如下。
語言概述
clojure是龐大的lisp編程語言家族中的一個新成員,所以其有l(wèi)isp語言的鮮明特征,一切皆函數(shù)。
clojure語言的核心主要涉及如下幾個部分。
?
練習(xí)
clojure的語法非常簡潔優(yōu)雅,花不了半天的時間就能大體知道個大概,但要想徹底的掌握還是需要大量的練習(xí)才行。
哪些題目值得花時間,哪些不值一提,這個已經(jīng)有人想到了,并搞了個很好的網(wǎng)站。http://www.4clojure.com?到該網(wǎng)站注冊一個用戶名,總共150道題,難度由淺入深,是不可多得的學(xué)習(xí)資源。
clojure中的語法糖不是特別多,但想一個不落的記處還是有點累,為此完全可以將clojure cheatsheet放置在辦公桌最顯眼的地方,不多就兩張A4張。http://clojure.org/cheatsheet
總結(jié)
以上是生活随笔為你收集整理的RDBMS vs. NoSQL Clojure概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机与数字媒体专业概论
- 下一篇: Spring2..5整合Ehacahe