Key-Value鍵值存儲原理初識(NOSQL)

NO-Sql數據庫:Not Only不單單是SQL數據庫

定義:非關係型數據庫;NoSQL用於超大規模數據的存儲。(例如谷歌或Facebook天天爲他們的用戶收集萬億比特的數據)。這些類型的數據存儲不須要固定的模式,無需多餘操做就能夠橫向擴展。須要進一步數據挖掘和分析。json

RDBMS VS NOSQL性能

RDBMS NoSQL
高度組織化結構化數據  表明着不單單是SQL
結構化查詢語言(SQL) (SQL)  沒有聲明性查詢語言
數據和關係都存儲在單獨的表中 沒有預約義的模式
數據操縱語言,數據定義語言  鍵 - 值對存儲,列存儲,文檔存儲,圖形數據庫
嚴格的一致性 最終一致性,而非ACID屬性
基礎事務 非結構化和不可預知的數據
 

CAP定理spa

 

高性能,高可用性和可伸縮性設計

 




 

 

 

 

 

對可用性及一致性的弱要求原則:BASExml

  • Basically Availble --基本可用
  • Soft-state --軟狀態/柔性事務。 "Soft state" 能夠理解爲"無鏈接"的, 而 "Hard state" 是"面向鏈接"的
  • Eventual Consistency --最終一致性 最終一致性, 也是是 ACID 的最終目的。

 

NoSQL 數據庫分類

類型

 

部分表明對象

 

特色
列存儲

Hbase索引

Cassandra事務

Hypertable文檔

顧名思義,是按列存儲數據的。最大的特色是方便存儲結構化和半結構化數據,方便作數據壓縮,對針對某一列或者某幾列的查詢有很是大的IO優點。

文檔存儲

MongoDB

CouchDB

文檔存儲通常用相似json的格式存儲,存儲的內容是文檔型的。這樣也就有有機會對某些字段創建索引,實現關係數據庫的某些功能。

key-value存儲

Tokyo Cabinet / Tyrant

Berkeley DB

MemcacheDB

Redis

能夠經過key快速查詢到其value。通常來講,存儲無論value的格式,照單全收。(Redis包含了其餘功能)

圖存儲

Neo4J

FlockDB

圖形關係的最佳存儲。使用傳統關係數據庫來解決的話性能低下,並且設計使用不方便。

對象存儲

db4o

Versant

經過相似面嚮對象語言的語法操做數據庫,經過對象的方式存取數據。

xml數據庫

Berkeley DB XML

BaseX

高效的存儲XML數據,並支持XML的內部查詢語法,好比XQuery,Xpath。

 

Key-Value存儲:(基於Redis)

傳統的關係型數據庫,處理一對多的問題,須要把外鍵放在多的一端,由於RDBMS理論中沒有集合這個概念。而使用Redis,咱們能夠在一端來管理一對多的關係,使用Set。

若是使用MySQL,當數據規模很是大時,上面兩個查詢操做都須要藉助表關聯技術,而大表間的join在大型系統中是須要極力避免的操做。相反Redis的每一個操做都會侷限在一個較小的數據集範圍內,並且key-value的存儲形式,定位key只是一個複雜度爲O(1)的操做。在very huge的數據量下,Redis性能效果很是優異,這就是NoSQL的優點所在!

相關文章
相關標籤/搜索