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


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

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

RDBMS VS NOSQL

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

CAP定理

 

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

 




 

 

 

 

 

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

  • 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的優勢所在!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM