NO-Sql數據庫:Not Only不單單是SQL數據庫
定義:非關係型數據庫;NoSQL用於超大規模數據的存儲。(例如谷歌或Facebook天天爲他們的用戶收集萬億比特的數據)。這些類型的數據存儲不須要固定的模式,無需多餘操做就能夠橫向擴展。須要進一步數據挖掘和分析。json
RDBMS VS NOSQL性能
RDBMS | NoSQL |
高度組織化結構化數據 | 表明着不單單是SQL |
結構化查詢語言(SQL) (SQL) | 沒有聲明性查詢語言 |
數據和關係都存儲在單獨的表中 | 沒有預約義的模式 |
數據操縱語言,數據定義語言 | 鍵 - 值對存儲,列存儲,文檔存儲,圖形數據庫 |
嚴格的一致性 | 最終一致性,而非ACID屬性 |
基礎事務 | 非結構化和不可預知的數據 |
CAP定理spa |
|
高性能,高可用性和可伸縮性設計 |
對可用性及一致性的弱要求原則:BASExml
類型 |
部分表明對象
|
特色 |
列存儲 | 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的優點所在!