大話NoSql

   以前看過一本名叫<<大數據挑戰的書>>。裏面主要講了NOSQL的內容,感受講得確實不錯,今天來又一次溫習一下,咱們大話NOSQL。說道NOSQL。咱們確定聯想到的內容就是BigData大數據了,不錯,當今的時代就是大數據的時代了。假設放在前幾年。互聯網尚未這麼發達的狀況下,或許誰也不會聽過這個名詞。算法

在講正題的時候。我作了張圖來看看通常服務端架構在面對業務發展的需要時候。通常的演變趨勢:sql


因此假設公司的數據量發展到必定規模的話,可以採用NoSql.好了最終引出了NoSql這個今天的主題了。NoSql可以理解爲Not Only Sql,主要指的是非關係型。分佈式,不提供ACID的數據庫設計模式,強調的是相似於Map的「鍵值存儲」。和」文檔存儲「。面對海量數據。NoSql 採用了一種弱類型的數據。採用更加簡單的數據模型,通常都是用字符串表示所有的數據類型。但是他可能不會像關係型數據庫同樣有那麼好的強一致性。應該nosql是一種最終一致性。NoSql也避免了不少諸如聯表查詢等複雜操做,基本就是簡單的賦值,取值等,數據庫

可以實現比較難高的吞吐量。json

現在的數據庫系統可謂是五彩繽紛,來張圖看看:設計模式


在介紹nosql以前,要知道的一些海量數據的理論性知識。CAP理論,C,Consistency)強一致性。A(Available)可用性,P(Partition Tolerance)分區容忍性,可以理解爲系統在存在網絡分區的狀況下仍然可以接受請求。網絡

天然這讓咱們聯繫到了另外一個理論ACIDA(Atomic)原子性。C(Consistent)一致性, I(Isolation)隔離性。 D(Durablitity)持續性。數據結構

另外一個比較重要的協議2PC兩階段提交協議,不少分佈式關係數據庫採用此協議來完畢分佈式事務。架構

如下咱們來真正瞭解一下詳細的NOSQLnosql

    K-V數據庫數據庫設計

首先咱們來了解是Redis,Redis是一個開源的,高級key-value的數據庫。他的value不只支持String類型,而且還有listset等結構,Redis採用的是內存進行數據存儲。等數據到達必定規模後,在持久化到文件或磁盤中。

基於Redis的特色,新浪微博採用的就是Redis,對於微博這種結構清晰,數據規模龐大的應用來講。Redis固然最適合只是了。

Column-Oriented列式數據庫

說到列式數據庫,咱們不得不提到他的始祖。Bigtable數據庫,在後來衍射出的很是多數據庫都能看到他的影子,列式數據庫強調的是一種面向列的稀疏存儲,另外一個列族的概念,跟關係型數據庫的單行單列,不同,比較典型的Hadoop採用的HBase數據庫。

文檔型數據庫

文檔型數據,我這裏說的有2種,MongoDB,另外一個CouchDB,二者有很是多共同點存儲的都是JSON類型數據類型。在文檔數據庫中文檔成爲了數據存儲的一個基本單位,所以,所存儲的數據,甚至可以要求是無結構的,文檔可長,可短,每一個都以相似於{「」id: 200, msg:haha}這種json格式保存在數據庫中。咱們重點關注一下MongoDB,在MongoDB中存在着相似於SQL查詢語句的操做。但是又不是跟SQL語句全然一樣,比方db,user,find(),MongoDB支持Map/Reduce模型。CouchDB詳細RestFul API。可以實現用Http請求實現操做。

兩者數據庫都藉助了Map/Reduce,技術提升了數據處理的效率,這對於與存儲非結構化,和半結構化的數據都有很是大的幫助。

圖存數據庫

圖存數據庫我剛剛據說這個名詞的時候。也是認爲難以理解,官方給出的定義:圖存數據庫使用基礎的數據結構,來存儲表明一個圖形的數據,能夠經過很方便的方式優雅的呈現不論什麼類型的數據。

圖存數據庫現在通常有3類,Neo4j數據庫。GraphDB圖存數據庫。OrientDB,圖存數據庫的查詢會模仿圖的遍歷實現查找。經過朋友找到朋友的朋友。終於找到目標。

NoSql就是分爲上述的4種類型。忽然心血來潮。相到一個比較重要的知識點,數據處理。數據處理尋常也老是有人在提起,我就提提。我說的數據處理指的是傳統的壓縮算法的實現。通常有2種,一個哈弗曼編碼,學過計算機的,數據結構都上過的吧,還有一個L.Z算法系列的,現在應該已經很是多版本號了吧,是基於窗體互動的,核心思想就是複用一樣的字符串,假設後面的字符串出現了前面反覆,用一個標記取代,可以大大節省壓縮數量。

好了,花了1000多字,理了理思路。也起到了複習的效果了。

相關文章
相關標籤/搜索