nosql理解

1.NoSQL是什麼?web

  NoSQL 是 Not Only SQL 的縮寫,意即"不只僅是SQL"的意思,泛指非關係型的數據庫。強調Key-Value Stores和文檔數據庫的優勢,而不是單純的反對RDBMS。算法

  NoSQL產品是傳統關係型數據庫的功能閹割版本,經過減小用不到或不多用的功能,來大幅度提升產品性能數據庫

2.NoSQL是怎麼產生的?緩存

  隨着web2.0技術的發展,其促使了物聯網和移動互聯網迅猛發展。傳統的關係數據庫在應付web2.0網站,特別是超大規模和高併發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了不少難以克服的問題,而非關係型的數據庫則因爲其自己的特色獲得了很是迅速的發展。安全

  NoSQL數據庫的產生就是爲了解決大規模數據集合多重數據種類帶來的挑戰,尤爲是大數據應用難題。服務器

3.NoSQL的特色:網絡

  1. 模式自由:NoSQL數據庫不像傳統的關係型數據庫須要定義數據庫,數據表等結構才能夠存取數據,其在增刪數據時不須要作數據的完整性檢查。數據表中的每一條記錄均可能有不一樣的屬性和格式。
  2. 逆範式化:爲了減小數據冗餘,加強數據一致性,在關係型數據庫設計時,要遵循範式要求,數據表至少要知足第三範式。這樣多個表之間創建各類關聯關係就不容易數據庫的橫向擴展;而且這些鏈接操做也會下降數據庫的查詢效率。而NoSQL數據庫去除約束,放寬事務保障,更利於數據的分佈式存儲。
  3. 多分區存儲:傳統關係型數據庫每每把數據都存儲在一個節點上。經過增長內存和磁盤的方式來提升系統的性能,以實現數據的縱向擴展,這種方式不只昂貴且不可持續。NoSQL數據庫會將數據分區,存儲在多個節點上,這是一種水平的擴展方式,這種方式不只可以很好的知足大數據的存儲要求,並且還能夠提升數據的讀寫性能。
  4. 彈性可擴展:NoSQL數據庫不只能夠分區存儲數據,並且還能夠在系統運行過程當中動態的增刪節點,數據自動平衡移動,不須要人工的干預操做。
  5. 多副本異步複製:爲了保證數據的安全性,NoSQL數據庫每每會保存數據的多個副本。在操做的時候每每都是將數據快速的寫入一個節點,其他節點經過讀取寫入節點的讀寫日誌來實現數據的異步複製
  6. 軟事務:事務是關係型數據庫的一個特色。事務每每包含一系列的操做,這些操做要麼都作,要麼都不作。事務要知足ACID特性(ACID:指數據庫事務正確執行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability))。而NoSQL數據庫不能徹底知足事務的ACID特性,可是能保證事務的最終一致性。事務是關係型數據庫的核心,這麼多年關係型數據庫的蓬勃發展都是由於這個核心。可是目前在互聯網數據急劇增加的狀況,事務也讓關係型數據庫陷入了瓶頸。

4.NoSQL的基礎理論:數據結構

  1.  CAP理論:ACP架構

  分佈式系統中的三個重要特性:一致性(Consistency),可用性(Availability),分區容錯性(Tolerance of network Partition)併發

  CAP原理是指這三個要素最多隻能同時實現兩點,不可能三者兼顧。所以在進行分佈式架構設計時,必須作出取捨。而對於分佈式數據系統,分區容忍性是基本要求,不然就失去了價值。所以設計分佈式數據系統,就是在一致性和可用性之間取一個平衡。對於大多數WEB應用,其實並不須要強一致性,所以犧牲一致性而換取高可用性,是多數分佈式數據庫產品的方向

  這個理論是由美國著名科學家,同時也是著名互聯網企業Inktomi的創始人Eric Brewer在2000年PODC(Symposium on Principles of Distributed Computing)大會上提出的,後來Seth Gilbert 和 Nancy lynch兩人也證實了CAP理論的正確性

  2.  BASE模型:

  Basically Availble ——基本可用

  Soft-state ——軟狀態/柔性事務,狀態能夠有一段時間不一樣步

  Eventual Consistency ——最終一致性

  base

  3.  最終一致性理論:

  一致性就是數據保持一致,在分佈式系統中,能夠理解爲多個節點中數據的值是一致的。  而一致性又能夠分爲強一致性與弱一致性。
  強一致性能夠理解爲在任意時刻,全部節點中的數據是同樣的。同一時間點,你在節點A中獲取到key1的值與在節點B中獲取到key1的值應該都是同樣的。
  弱一致性包含不少種不一樣的實現,目前分佈式系統中普遍實現的是最終一致性。所謂最終一致性,就是不保證在任意時刻任意節點上的同一份數據都是相同的,可是隨着時間的遷移,不一樣節點上的同一份數據老是在向趨同的方向變化。也能夠簡單的理解爲在一段時間後,節點間的數據會最終達到一致狀態。
  對於最終一致性最好的例子就是DNS系統,因爲DNS多級緩存的實現,因此修改DNS記錄後不會在全球全部DNS服務節點生效,須要等待DNS服務器緩存過時後向源服務器更新新的記錄才能實現。

 

5.常見NoSQL數據庫對比:

分類 Examples舉例 典型應用場景 數據模型 優勢 缺點
鍵值(key-value) Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB,Memcache 內容緩存,主要用於處理大量數據的高訪問負載,也用於一些日誌系統等等。 Key 指向 Value 的鍵值對,一般用hash table來實現 查找速度快 數據無結構化,一般只被看成字符串或者二進制數據
列存儲數據庫 Cassandra, HBase, Riak,BigTable 分佈式的文件系統。按列存儲,針對某一列或者某幾列的查詢有很是大的IO優點 以列簇式存儲,將同一列數據存在一塊兒 查找速度快,可擴展性強,更容易進行分佈式擴展 功能相對侷限
文檔型數據庫 CouchDB, MongoDb 存儲相似JSON格式的內容,可對某些字段創建索引功能,是最像關係型的數據庫 Key-Value對應的鍵值對,Value爲結構化數據 數據結構要求不嚴格,表結構可變,不須要像關係型數據庫同樣須要預先定義表結構 查詢性能不高,並且缺少統一的查詢語法。
圖形(Graph)數據庫 Neo4J, InfoGrid, Infinite Graph 社交網絡,推薦系統等。專一於構建關係圖譜,善於處理大量複雜、互鏈接、低結構化的數據,數據每每變化迅速,且查詢頻繁 圖結構 利用圖結構相關算法。好比最短路徑尋址,N度關係查找等 不少時候須要對整個圖作計算才能得出須要的信息,並且這種結構不太好作分佈式的集羣方案。
相關文章
相關標籤/搜索