前段時間學習了尚硅谷周陽老師的教學視頻,順便記錄一些想記下來的東西 NoSQL的概念
NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,泛指非關系型的數據庫。隨著互聯網web2.0網站的興起,傳統的關系數據庫在應付web2.0網站,特別是超大規模和高并發的SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的數據庫則由于其本身的特點得到了非常迅速的發展。NoSQL數據庫的產生就是為了解決大規模數據集合多重數據種類帶來的挑戰,尤其是大數據應用難題,包括超大規模數據的存儲。
(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數據)。這些類型的數據存儲不需要固定的模式,無需多余操作就可以橫向擴展。
NoSQL的優點
易擴展
NoSQL數據庫種類繁多,但是一個共同的特點都是去掉關系數據庫的關系型特性。數據之間無關系,這樣就非常容易擴展。也無形之間,在架構的層面上帶來了可擴展的能力。
大數據量高性能
NoSQL數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。這得益于它的無關系性,數據庫的結構簡單。一般MySQL使用Query Cache,每次表的更新Cache就失效,是一種大粒度的Cache,在針對web2.0的交互頻繁的應用,Cache性能不高。而NoSQL的Cache是記錄級的,是一種細粒度Cache,所以NoSQL在這個層面上來說就要性能高很多了
多樣靈活的數據模型
NoSQL無需事先為要存儲的數據建立字段,隨時可以存儲自定義的數據格式。而在關系數據庫里,增刪字段是一件非常麻煩的事情。如果是非常大數據量的表,增加字段簡直就是一個噩夢。
NoSQL的3V+3高
大數據時代的3V
海量Volume
多樣Variety
實時Velocity
Volume、Variety、Velocity。這3V表明大數據的三方面特質:量大、多樣、實時。對,不光是數據量大了。對TB、PB數據級的處理,已經成為基本配置。還能處理多樣性的數據類型,結構化數據和非結構化數據,能處理Web數據,能處理語音數據甚至是圖像、視頻數據。實時。以前的決策支持時代,可以用批量處理的方式,隔夜處理數據,等決策者第二天上班,可以看到昨天的經營數據。但現在的互聯網時代,業務在24小時不間斷運營,決策已經不是第二天上班才做出,而是在客戶每次瀏覽頁面,每次下訂單的過程中都存在,都會需要對用戶進行實時的推薦,決策已經變得實時。
NoSQL數據庫的四大分類
KV鍵值:這一類數據庫主要會使用到一個哈希表,這個表中有一個特定的鍵和一個指針指向特定的數據。Key/value模型對于IT系統來說的優勢在于簡單、易部署。但是如果DBA只對部分值進行查詢或更新的時候,Key/value就顯得效率低下了。
舉例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.文檔型數據庫(bson格式比較多):文檔型數據庫的靈感是來自于Lotus Notes辦公軟件的,而且它同第一種鍵值存儲相似。該類型的數據模型是版本化的文檔,半結構化的文檔以特定的格式存儲,比如JSON。文檔型數據庫可 以看作是鍵值數據庫的升級版,允許之間嵌套鍵值。而且文檔型數據庫比鍵值數據庫的查詢效率更高。
如:CouchDB, MongoDb. 國內也有文檔型數據SequoiaDB,已經開源。列存儲數據庫:這部分數據庫通常是用來應對分布式存儲的海量數據。鍵仍然存在,但是它們的特點是指向了多個列。這些列是由列家族來安排的。
如:Cassandra, HBase, Riak.圖關系數據庫:圖形結構的數據庫同其他行列以及剛性結構的SQL數據庫不同,它是使用靈活的圖形模型,并且能夠擴展到多個服務器上。NoSQL數據庫沒有標準的查詢語言(SQL),因此進行數據庫查詢需要制定數據模型。許多NoSQL數據庫都有REST式的數據接口或者查詢API。
如:Neo4J, InfoGrid。它不是放圖形的,放的是關系比如:朋友圈社交網絡、廣告推薦系統傳統的ACID
關系型數據庫遵循ACID規則 事務在英文中是transaction,和現實世界中的交易很類似,它有如下四個特性:
A (Atomicity) 原子性原子性很容易理解,也就是說事務里的所有操作要么全部做完,要么都不做,事務成功的條件是事務里的所有操作都成功,只要有一個操作失敗, 整個事務就失敗,需要回滾。比如銀行轉賬,從A賬戶轉100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。
C (Consistency) 一致性
一致性也比較容易理解,也就是說數據庫要一直處于一致的狀態,事務的運行不會改變數據庫原本的一致性約束。
I (Isolation) 獨立性
所謂的獨立性是指并發的事務之間不會互相影響,如果一個事務要訪問的數據正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的數據 就不受未提交事務的影響。比如現有有個交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的。
D (Durability) 持久性
持久性是指一旦事務提交后,它所做的修改將會永久的保存在數據庫上,即使出現宕機也不會丟失。
NOSQL之CAP加BASE
CAP:C:Consistency(強一致性),A:Availability(可用性),P:Partition tolerance(分區容錯性)
CAP理論就是說在分布式存儲系統中,最多只能實現上面的兩點。而由于當前的網絡硬件肯定會出現延遲丟包等問題,所以分區容忍性是我們必須需要實現的。所以我們只能在一致性和可用性之間進行權衡,沒有NoSQL系統能同時保證這三點。
CA 傳統Oracle數據庫
AP 大多數網站架構的選擇
CP Redis、Mongodb
注意:分布式架構的時候必須做出取舍。 一致性和可用性之間取一個平衡。多余大多數web應用,其實并不需要強一致性。
因此犧牲C換取P,這是目前分布式數據庫產品的方向
BASE就是為了解決關系數據庫強一致性引起的問題而引起的可用性降低而提出的解決方案。
BASE其實是下面三個術語的縮寫:
基本可用(Basically Available)
軟狀態(Soft state)
最終一致(Eventually consistent)
它的思想是通過讓系統放松對某一時刻數據一致性的要求來換取系統整體伸縮性和性能上改觀。為什么這么說呢,緣由就在于大型系統往往由于地域分布和極高性能的要求,不可能采用分布式事務來完成這些指標,要想獲得這些指標,我們必須采用另外一種方式來完成,這里BASE就是解決這個問題的辦法
新聞熱點
疑難解答