NoSQL概述 單機MySQL時代 大數據時代,一般的資料庫無法進行分析處理 數據量如果太大,一個機器放不下 數據的索引(B+ Tree),一個機器記憶體也放不下 訪問量(讀寫混合),一個機器承受不了 Memecache + MySQL+垂直拆分(讀寫分離) 減輕伺服器壓力,使用緩存 發展過程:優 ...
NoSQL概述
單機MySQL時代
大數據時代,一般的資料庫無法進行分析處理
- 數據量如果太大,一個機器放不下
- 數據的索引(B+ Tree),一個機器記憶體也放不下
- 訪問量(讀寫混合),一個機器承受不了
Memecache + MySQL+垂直拆分(讀寫分離)
減輕伺服器壓力,使用緩存
發展過程:優化數據結構和索引-->文件緩存(IO)-->Memcached
分庫分表+水平拆分+MySQL集群
早些年MyISAM:表鎖,在高併發下嚴重影響效率
Innodb:行鎖
使用分庫分表來解決寫的壓力!
如今年代
MySQL等關係型資料庫不夠用!數據量大,變化很大
MySQL有的使用它來存儲一些比較大的文件,博客,圖片等,數據表很大,效率就低了。
大數據的IO壓力下,表幾乎沒法更大
目前一個基本的互聯網項目
為什麼要用NoSQL
用戶的個人信息,社交網路,地理位置。用戶自己產生的數據,日誌等等爆髮式增長,無法使用關係型資料庫進行存儲,需要使用NoSQL!
什麼是NoSQL
NoSQL = Not Only SQL
關係型資料庫:表格,行,列
泛指非關係型資料庫,隨著web2.0到來,傳統關係型資料庫很難對付web2.0,尤其是超大規模的高併發的社區,暴露出很多難以剋服的問題,Redis是當下發展最快的,必須掌握的技術
很多的數據類型個人信息,社交網路,地理位置等不需要一個固定的格式!不需要過多的操作就可以橫向擴展!Map<String,Object>使用鍵值對來控制
NoSQL特點
-
方便擴展(數據之間沒有關係,很好擴展)
-
大數據量高性能(Redis一秒寫8萬次,讀取11萬次,NoSQL的緩存記錄是一種細粒度的緩存,性能比較高)
-
數據類型是多樣類型的(不需要事先設計資料庫,隨取隨用)
-
傳統RDBMS和NoSQL
傳統的RDBMS - 結構化組織 - SQL - 數據和關係都存在單獨的表中 - 操作,數據定義語言 - 嚴格的一致性 - 基礎的事務 -------
NoSQL - 不僅僅是數據 - 沒有固定的查詢語言 - 鍵值對存儲,列存儲,文檔存儲,圖形資料庫 - 最終一致性 - CAP定理和BASE理論 - 高性能,高可用,高可擴 - ----
瞭解3V+3高
大數據時代的3V : 主要是描述問題的 1.海量Volume 2.多樣Variety 3.實時Velocity 大數據時代的3高:主要是對程式的要求 1.高併發 2.高可擴(隨時水平拆分) 3.高性能
NoSQL四大分類
K-V鍵值對:
- 新浪:Redis
- 美團:Redis+Tair
- 阿裡、百度:Redis+memecache
文檔型資料庫(bson格式和json一樣):
- MongoDB
- 基於分散式文件存儲的數據里,C++編寫,處理大量的文檔
- 介於關係型資料庫和非關係型資料庫的中間產品
- 是非關係型數據中最像關係型資料庫
- ConchDB
列存儲資料庫
- HBase
- 分散式文件系統弄
圖關係資料庫
存放的不是圖,是關係!
總結