NoSQL基礎學習

NoSQL基礎學習

最近學習的第一個Nosql就是Mongodb,爲了瞭解Nosql的基本知識,特意總結,主要是學習Nosql的理論算法


 

一.Introduction(介紹)sql

它是「 Not Only Sql」的簡稱,非關係型數據庫,它具備很是好的通用性和很是高的性能,它在處理大量的數據方面頗有優點.數據庫

1.NoSql的出現是相對於傳統的關係型數據庫的,重點就是,Wiki上所說的:設計模式

NoSQL是對不一樣於傳統的關聯式資料庫的數據庫管理系統的統稱。服務器

 

兩者存在許多顯著的不一樣點,其中最重要的是NoSQL不使用SQL做為查詢語言。其數據存儲能夠不須要固定的表格模式,也經常會避免使用SQL的JOIN操做,通常有水平可擴展性的特徵。網絡

那麼它的出現的意義在哪?,答案就是隨着在現代的計算系統上天天網絡上都會產生龐大的數據量,而NoSQL就是在現代計算機領域必然出現的一種產物,至少我是這麼認爲的,固然,NoSQL 是一項全新的數據庫革命性運動,早期就有人提出,發展至2009年趨勢愈加高漲。NoSQL的擁護者們提倡運用非關係型的數據存儲,相對於鋪天蓋地的關係型數據庫運用,這一律念無疑是一種全新的思惟的注入,並且說到底NoSQL系統也就是分佈式系統架構

 

這是一種全新的思惟,就像學習算法同樣,學習NoSQL,固然要學習它的特徵,這是很是重要的,就像關係型數據庫遵循了ACID規則,而NoSQL遵循了BASE規則,許多資料在介紹NoSQL時,都必然會對NoSQL進行比較,這裏無不例外異步

2.發展歷史數據庫設計

NoSQL一詞最先出現於1998年,是Carlo Strozzi開發的一個輕量、開源、不提供SQL功能的關係數據庫。分佈式

2009年,Last.fm的Johan Oskarsson發起了一次關於分佈式開源數據庫的討論,來自Rackspace的Eric Evans再次提出了NoSQL的概念,這時的NoSQL主要指非關係型、分佈式、不提供ACID的數據庫設計模式。

2009年在亞特蘭大舉行的"no:sql(east)"討論會是一個里程碑,其口號是"select fun, profit from real_world where relational=false;"。所以,對NoSQL最廣泛的解釋是「非關聯型的」,強調Key-Value Stores和文檔數據庫的優勢,而不是單純的反對RDBMS。

基於2014年的收入,NoSQL市場領先企業是MarkLogic,MongoDB和Datastax。基於2015年的人氣排名,最受歡迎的NoSQL數據庫是MongoDB,Apache Cassandra和Redis。

二.Feature(特徵)

NoSQL系統是分佈式系統,分佈式系統是創建在網上之上的軟件系統,具備高度的透明性,在分佈式數據庫系統中,用戶是感受不到數據是分佈的,就好像操做的是一個統一的總體,即用戶不須知道關係是否分割、有無副本、數據庫存於哪臺機器及操做在哪臺機器上執行,並不知道其內部工做須要由不少臺機器協同完成。

1.CAP定理(分佈式領域的CAP原則)

CAP原則又稱CAP定理,指的是在一個分佈式系統中:

  1. Consistency(強一致性),數據一致更新,全部數據變更都是同步的,更新一會後全部的節點在同一時刻具備相同的數據
  2. Availability(可用性),快速的響應性能,保證每一個請求無論成功或者失敗都有響應
  3. Partition tolerance(分區容錯性),便可靠性,或者說系統中的某個節點發生錯誤,不會影響系統的繼續運做

定理:任何的分佈式系統只能同時知足其中兩點,不可作到三者兼得,此理論在分佈式存儲系統中,最多隻能實現上面兩點

2.BASE思想(徹底不一樣於ACID思想,犧牲了高一致性,得到可用性或者可靠性)

BASE思想(或者說是BASE模型),BASE是Basically Available(基本可用),Soft state(軟狀態/柔性事務)和Eventually consistent(最終一致性)的縮寫:

  1. Basically Available(基本可用),支持分區失敗(e.g.sharding碎片劃分數據庫)
  2. Soft state(軟狀態/柔性事務),狀態能夠有一段時間不一樣步,異步
  3. Eventually consistent(最終一致性),最終數據是一致的就能夠了,而不是時時高一致

 定理:主要強調基本的可用性,也就是若是追求高性能,那麼就要犧牲一致性或者容錯性,總之BASE思想是對CAP原則中的一致性和可用性權衡的結果

CAP原則是NoSQL數據庫的基礎,因此記住這個BASE思想和CAP原則!!!!

3.與NoSQL的關係

如今NoSQL就豐富了BASE思想,可按照具體的狀況定製特別方案,相對關係型數據庫的ACID原則,NoSQL系統一般注重性能和擴展性,而非ACID中的事務機制,事務就要求一致性

三.NoSQL 數據庫分類

數據庫分爲四大類:

  1. 鍵值(Key-Value)存儲數據庫
  2. 列存儲數據庫
  3. 文檔型數據庫
  4. 圖形(Graph)數據庫

1.鍵值(Key-Value)存儲數據庫

是一種以鍵值對存儲數據的一種數據庫,相似Java的Map,每一個鍵對應惟一的值,表明的

2.列存儲數據庫

一般是用來應對分佈式存儲的海量數據,是以列相關存儲架構進行的數據存儲的數據庫,主要適合批量數據處理和即時查詢

3.文檔型數據庫

該類型的數據模型是版本化的文檔,半結構化的文檔以特定的格式存儲,好比JSON。文檔型數據庫可 以看做是鍵值數據庫的升級版,容許之間嵌套鍵值。並且文檔型數據庫比鍵值數據庫的查詢效率更高

4.圖形(Graph)數據庫

圖形結構的數據庫同其餘行列以及剛性結構的SQL數據庫不一樣,它是使用靈活的圖形模型,而且可以擴展到多個服務器上。NoSQL數據庫沒有標準的查詢語言(SQL),所以進行數據庫查詢須要制定數據模型。許多NoSQL數據庫都有REST式的數據接口或者查詢API

相關文章
相關標籤/搜索