nosql特點(diǎn):1、靈活的可擴(kuò)展性;nosql去掉了關(guān)系數(shù)據(jù)庫的關(guān)系型特性,數(shù)據(jù)之間無關(guān)系,很簡單就能夠擴(kuò)展。2、靈活的數(shù)據(jù)模型;NoSQL采用鍵/值、列族等非關(guān)系模型,允許在一個(gè)數(shù)據(jù)元素里存儲(chǔ)不同類型的數(shù)據(jù)。3、NoSQL可以憑借自身良好的橫向擴(kuò)展能力,充分自由利用云計(jì)算基礎(chǔ)設(shè)施,很好地融人到云計(jì)算環(huán)境中。4、nosql有著非常高的讀寫性能,特別是在大數(shù)據(jù)量之下。5、高可用。
千萬級(jí)數(shù)據(jù)并發(fā)如何處理?進(jìn)入學(xué)習(xí)
本教程操作環(huán)境:windows7系統(tǒng)、Dell G3電腦。
NoSQL簡介
NoSQL是一種不同于關(guān)系數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)設(shè)計(jì)方式,是對(duì)非關(guān)系型數(shù)據(jù)庫的統(tǒng)稱,它所采用的數(shù)據(jù)模型并非傳統(tǒng)關(guān)系數(shù)據(jù)庫的關(guān)系模型,而是類似鍵/值、列族、文檔等非關(guān)系模型。NoSQL數(shù)據(jù)庫沒有固定的表結(jié)構(gòu),通常也不存在連接操作,也沒有嚴(yán)格遵守ACID約束。因此,與關(guān)系數(shù)據(jù)庫相比,NoSQL具有靈活的水平可擴(kuò)展性,可以支持海量數(shù)據(jù)存儲(chǔ)。
什么是ACID?
- 事務(wù)的原子性(Atomicity):是指一個(gè)事務(wù)要么全部執(zhí)行,要么不執(zhí)行,也就是說一個(gè)事務(wù)不可能只執(zhí)行了一半就停止了。比如你從取款機(jī)取錢,這個(gè)事務(wù)可以分成兩個(gè)步驟:1劃卡,2出錢。不可能劃了卡,而錢卻沒出來。這兩步必須同時(shí)完成,要么就不完成。
- 事務(wù)的一致性(Consistency):是指事務(wù)的運(yùn)行并不改變數(shù)據(jù)庫中數(shù)據(jù)的一致性。例如,完整性約束了a+b=10,一個(gè)事務(wù)改變了a,那么b也應(yīng)該隨之改變。
- 獨(dú)立性(Isolation):事務(wù)的獨(dú)立性也有稱作隔離性,是指兩個(gè)以上的事務(wù)不會(huì)出現(xiàn)交錯(cuò)執(zhí)行的狀態(tài)。因?yàn)檫@樣可能會(huì)導(dǎo)致數(shù)據(jù)不一致。
- 持久性(Durability):事務(wù)的持久性是指事務(wù)執(zhí)行成功以后,該事務(wù)對(duì)數(shù)據(jù)庫所作的更改便是持久的保存在數(shù)據(jù)庫之中,不會(huì)無緣無故的回滾
NoSQL數(shù)據(jù)庫的特點(diǎn)
(1)靈活的可擴(kuò)展性
傳統(tǒng)的關(guān)系型數(shù)據(jù)庫由于自身設(shè)計(jì)機(jī)理的原因,通常很難實(shí)現(xiàn)“橫向擴(kuò)展”,在面對(duì)數(shù)據(jù)庫負(fù)載大規(guī)模增加時(shí),往往需要通過升級(jí)硬件來實(shí)現(xiàn)“縱向擴(kuò)展”。NoSQL數(shù)據(jù)庫在設(shè)計(jì)之初就是為了滿足“橫向擴(kuò)展”的需求,因此天生具備良好的水平擴(kuò)展能力。
(2)靈活的數(shù)據(jù)模型
關(guān)系數(shù)據(jù)庫具有規(guī)范的定義,遵守各種嚴(yán)格的約束條件。這種做法雖然保證了業(yè)務(wù)系統(tǒng)對(duì)數(shù)據(jù)一致性的需求,但是過于死板的數(shù)據(jù)模型,也意味著無法滿足各種新興的業(yè)務(wù)需求。相反,NoSQL數(shù)據(jù)庫采用鍵/值、列族等非關(guān)系模型,允許在一個(gè)數(shù)據(jù)元素里存儲(chǔ)不同類型的數(shù)據(jù)。
(3)與云計(jì)算緊密融合
云計(jì)算具有很好的水平擴(kuò)展能力,可以根據(jù)資源使用情況進(jìn)行自由伸縮,各種資源可以動(dòng)態(tài)加人或退出,NoSQL數(shù)據(jù)庫可以憑借自身良好的橫向擴(kuò)展能力,充分自由利用云計(jì)算基礎(chǔ)設(shè)施,很好地融人到云計(jì)算環(huán)境中,構(gòu)建基于NoSQL的云數(shù)據(jù)庫服務(wù)。
(4)大數(shù)據(jù)量,高性能
nosql數(shù)據(jù)庫都有著非常高的讀寫性能,特別是在大數(shù)據(jù)量之下,一樣也表現(xiàn)的非常的優(yōu)秀,這主要得益于它的無關(guān)系性,數(shù)據(jù)庫的結(jié)構(gòu)簡單。
通常的nosql使用Query Cache。
nosql的Cache是記錄級(jí)的,是一種細(xì)粒度的Cache,所以說,nosql從這個(gè)方面來說的話,性能就要高了很多了。
(5)高可用
高可用也是nosql很明顯的一個(gè)特點(diǎn),nosql在不太影響性能的情況之下,就能夠非常方便的實(shí)現(xiàn)高可用的架構(gòu),典型的例如:Cassandra、HBase模型,通過模型的話也可以實(shí)現(xiàn)高可用。
NoSQL興起的原因
1、關(guān)系數(shù)據(jù)庫已經(jīng)無法滿足Web2.0的需求。主要表現(xiàn)在以下幾個(gè)方面:
-
(1)無法滿足海量數(shù)據(jù)的管理需求
-
對(duì)于上述網(wǎng)站而言,很快就可以產(chǎn)生超過10億條的記錄,對(duì)于關(guān)系數(shù)據(jù)庫來說,在一張10億條記錄的表里進(jìn)行SQL查詢,效率極其低下。
-
(2)無法滿足數(shù)據(jù)高并發(fā)的需求
-
(3)無法滿足高可擴(kuò)展性和高可用性的需求
2、關(guān)系數(shù)據(jù)庫的關(guān)鍵特性在Web 2.0時(shí)代成為“雞肋”
關(guān)系數(shù)據(jù)庫的關(guān)鍵特性包括完善的事務(wù)機(jī)制和高效的查詢機(jī)制。但是,關(guān)系數(shù)據(jù)庫引以為傲的兩個(gè)關(guān)鍵特性,到了Web2.0時(shí)代卻成了雞肋,主要表現(xiàn)在以下幾個(gè)方面:
(1) Web 2.0網(wǎng)站系統(tǒng)通常不要求嚴(yán)格的數(shù)據(jù)庫事務(wù)
對(duì)于許多Web 2.0網(wǎng)站而言,數(shù)據(jù)庫事務(wù)已經(jīng)不是那么重要。數(shù)據(jù)庫事務(wù)通常有一套復(fù)雜的實(shí)現(xiàn)機(jī)制來保證數(shù)據(jù)庫一致性,需要大量系統(tǒng)開銷,對(duì)于包含大量頻繁實(shí)時(shí)讀寫請求的Web 2.0網(wǎng)站而言,實(shí)現(xiàn)事務(wù)的代價(jià)是難以承受的。
(2)Web 2.0并不要求嚴(yán)格的讀寫實(shí)時(shí)性
對(duì)于關(guān)系數(shù)據(jù)庫而言,一旦有一條數(shù)據(jù)記錄成功插人數(shù)據(jù)庫中,就可以立即被查詢。
對(duì)于Web 2.0而言,沒有這種實(shí)時(shí)讀寫需求。
(3)Web 2.0通常不包含大量復(fù)雜的SQL查詢
復(fù)雜的SQL查詢通常包含多表連接操作。但是,Web 2.0網(wǎng)站在設(shè)計(jì)時(shí)就已經(jīng)盡量減少甚至避免這類操作,通常只采用單表的主鍵查詢,因此關(guān)系數(shù)據(jù)庫的查詢優(yōu)化機(jī)制在Web 2.0中也就難以有所作為。
NoSQL與關(guān)系數(shù)據(jù)庫的比較
RDBMS:關(guān)系數(shù)據(jù)庫
NoSQL與關(guān)系數(shù)據(jù)庫比較 小結(jié):
(1)關(guān)系數(shù)據(jù)庫
優(yōu)勢:以完善的關(guān)系代數(shù)理論作為基礎(chǔ),有嚴(yán)格的標(biāo)準(zhǔn),支持事務(wù)ACID四性,借助索引機(jī)制可以實(shí)現(xiàn)高效的查詢,技術(shù)成熟,有專業(yè)公司的技術(shù)支持
劣勢:可擴(kuò)展性較差,無法較好支持海量數(shù)據(jù)存儲(chǔ),數(shù)據(jù)模型過于死板、無法較好支持Web2.0應(yīng)用,事務(wù)機(jī)制影響了系統(tǒng)的整體性能等
(2)NoSQL數(shù)據(jù)庫
優(yōu)勢:可以支持超大規(guī)模數(shù)據(jù)存儲(chǔ),靈活的數(shù)據(jù)模型可以很好地支持Web2.0應(yīng)用,具有強(qiáng)大的橫向擴(kuò)展能力等
劣勢:缺乏數(shù)學(xué)理論基礎(chǔ),復(fù)雜查詢性能不高,大都不能實(shí)現(xiàn)事務(wù)強(qiáng)一致性,很難實(shí)現(xiàn)數(shù)據(jù)完整性,技術(shù)尚不成熟,缺乏專業(yè)團(tuán)隊(duì)的技術(shù)支持,維護(hù)較困難等
(3)關(guān)系數(shù)據(jù)庫和NoSQL數(shù)據(jù)庫各有優(yōu)缺點(diǎn),彼此無法取代
關(guān)系數(shù)據(jù)庫應(yīng)用場景:電信、銀行等領(lǐng)域的關(guān)鍵業(yè)務(wù)系統(tǒng),需要保證強(qiáng)事務(wù)一致性
NoSQL數(shù)據(jù)庫應(yīng)用場景:互聯(lián)網(wǎng)企業(yè)、傳統(tǒng)企業(yè)的非關(guān)鍵業(yè)務(wù)(比如數(shù)據(jù)分析)
采用混合架構(gòu)
- 案例:亞馬遜公司就使用不同類型的數(shù)據(jù)庫來支撐它的電子商務(wù)應(yīng)用
- 對(duì)于“購物籃”這種臨時(shí)性數(shù)據(jù),采用鍵值存儲(chǔ)會(huì)更加高效
- 當(dāng)前的產(chǎn)品和訂單信息則適合存放在關(guān)系數(shù)據(jù)庫中
NoSQL的四大類型
NoSQL數(shù)據(jù)庫雖然數(shù)量眾多,但是,歸結(jié)起來,典型的NoSQL數(shù)據(jù)庫通常包括鍵值數(shù)據(jù)庫、列族數(shù)據(jù)庫、文檔數(shù)據(jù)庫和圖形數(shù)據(jù)庫
1.鍵值數(shù)據(jù)庫
鍵值數(shù)據(jù)庫(Key-Value Database) 的表中有一個(gè)特定的Key和一個(gè)指針指向特定的Value。Key可以用來定位Value,即存儲(chǔ)和檢索具體的Value。Value對(duì)數(shù)據(jù)庫而言是透明不可見的,不能對(duì)Value進(jìn)行索引和查詢,只能通過Key進(jìn)行查詢。Value可以用來存儲(chǔ)任意類型的數(shù)據(jù),包括整型、字符型、數(shù)組、對(duì)象等。
應(yīng)用場景:一個(gè)面向會(huì)話的應(yīng)用程序(如 Web 應(yīng)用程序)在用戶登錄時(shí)啟動(dòng)會(huì)話,并保持活動(dòng)狀態(tài)直到用戶注銷或會(huì)話超時(shí)。在此期間,應(yīng)用程序?qū)⑺信c會(huì)話相關(guān)的數(shù)據(jù)存儲(chǔ)在主內(nèi)存或數(shù)據(jù)庫中。會(huì)話數(shù)據(jù)可能包括用戶資料信息、消息、個(gè)性化數(shù)據(jù)和主題、建議、有針對(duì)性的促銷和折扣。每個(gè)用戶會(huì)話具有唯一的標(biāo)識(shí)符。除了主鍵之外,任何其他鍵都無法查詢會(huì)話數(shù)據(jù),因此快速鍵值存儲(chǔ)更適合于會(huì)話數(shù)據(jù)。一般來說,鍵值數(shù)據(jù)庫所提供的每頁開銷可能比關(guān)系數(shù)據(jù)庫要小。
2.列族數(shù)據(jù)庫
3.文檔數(shù)據(jù)庫
4.圖形數(shù)據(jù)庫
5.不同類型數(shù)據(jù)庫比較分析
- MySQL:產(chǎn)生年代較早,而且隨著LAMP大潮得以成熟。盡管其沒有什么大的改進(jìn),但是新興的互聯(lián)網(wǎng)使用的最多的數(shù)據(jù)庫
- MongoDB:是個(gè)新生事物,提供更靈活的數(shù)據(jù)模型、異步提交、地理位置索引等五花十色的功能
- HBase:是個(gè)“仗勢欺人”的大象兵。依仗著Hadoop的生態(tài)環(huán)境,可以有很好的擴(kuò)展性。但是就像象兵一樣,使用者需要養(yǎng)一頭大象(Hadoop),才能驅(qū)使他
- Redis:是鍵值存儲(chǔ)的代表,功能最簡單。提供隨機(jī)數(shù)據(jù)存儲(chǔ)。就像一根棒子一樣,沒有多余的構(gòu)造。但是也正是因此,它的伸縮性特別好。就像悟空手里的金箍棒,大可捅破天,小能成縮成針
NoSQL的三大基石
所謂的CAP指的是:
- C(Consistency):一致性,是指任何一個(gè)讀操作總是能夠讀到之前完成的寫操作的結(jié)果,也就是在分布式環(huán)境中,多點(diǎn)的數(shù)據(jù)是一致的,或者說,所有節(jié)點(diǎn)在同一時(shí)間具有相同的數(shù)據(jù)
- A:(Availability):可用性,是指快速獲取數(shù)據(jù),可以在確定的時(shí)間內(nèi)返回操作結(jié)果,保證每個(gè)請求不管成功或者失敗都有響應(yīng);
- P(Tolerance of Network Partition):分區(qū)容忍性,是指當(dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)的情況時(shí)(即系統(tǒng)中的一部分節(jié)點(diǎn)無法和其他節(jié)點(diǎn)進(jìn)行通信),分離的系統(tǒng)也能夠正常運(yùn)行,也就是說,系統(tǒng)中任意信息的丟失或失敗不會(huì)影響系統(tǒng)的繼續(xù)運(yùn)作。
CAP理論告訴我們,一個(gè)分布式系統(tǒng)不可能同時(shí)滿足一致性、可用性和分區(qū)容忍性這三個(gè)需求,最多只能同時(shí)滿足其中兩個(gè),正所謂“魚和熊掌不可兼得”。
當(dāng)處理CAP的問題時(shí),可以有幾個(gè)明顯的選擇:
-
CA:也就是強(qiáng)調(diào)一致性(C)和可用性(A),放棄分區(qū)容忍性(P),最簡單的做法是把所有與事務(wù)相關(guān)的內(nèi)容都放到同一臺(tái)機(jī)器上。很顯然,這種做法會(huì)嚴(yán)重影響系統(tǒng)的可擴(kuò)展性。傳統(tǒng)的關(guān)系數(shù)據(jù)庫(MySQL、SQL Server和PostgreSQL),都采用了這種設(shè)計(jì)原則,因此,擴(kuò)展性都比較差
-
CP:也就是強(qiáng)調(diào)一致性(C)和分區(qū)容忍性(P),放棄可用性(A),當(dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)的情況時(shí),受影響的服務(wù)需要等待數(shù)據(jù)一致,因此在等待期間就無法對(duì)外提供服務(wù)
-
AP:也就是強(qiáng)調(diào)可用性(A)和分區(qū)容忍性(P),放棄一致性(C),允許系統(tǒng)返回不一致的數(shù)據(jù)
BASE
前面說到ACID ,現(xiàn)在淺談一下BASE(Basically Availble, Soft-state, Eventual consistency)
ACID |
BASE |
原子性(Atomicity) |
基本可用(Basically Available) |
一致性(Consistency) |
軟狀態(tài)/柔性事務(wù)(Soft state) |
隔離性(Isolation) |
最終一致性 (Eventual consistency) |
持久性 (Durable) |
BASE的基本含義是基本可用(Basically Availble)、軟狀態(tài)(Soft-state)和最終一致性(Eventual consistency):
基本可用,是指一個(gè)分布式系統(tǒng)的一部分發(fā)生問題變得不可用時(shí),其他部分仍然可以正常使用,也就是允許分區(qū)失敗的情形出現(xiàn)
“軟狀態(tài)(soft-state)”是與“硬狀態(tài)(hard-state)”相對(duì)應(yīng)的一種提法。數(shù)據(jù)庫保存的數(shù)據(jù)是“硬狀態(tài)”時(shí),可以保證數(shù)據(jù)一致性,即保證數(shù)據(jù)一直是正確的?!败洜顟B(tài)”是指狀態(tài)可以有一段時(shí)間不同步,具有一定的滯后性
最終一致性
一致性的類型包括強(qiáng)一致性和弱一致性,二者的主要區(qū)別在于高并發(fā)的數(shù)據(jù)訪問操作下,后續(xù)操作是否能夠獲取最新的數(shù)據(jù)。對(duì)于強(qiáng)一致性而言,當(dāng)執(zhí)行完一次更新操作后,后續(xù)的其他讀操作就可以保證讀到更新后的最新數(shù)據(jù);反之,如果不能保證后續(xù)訪問讀到的都是更新后的最新數(shù)據(jù),那么就是弱一致性。而最終一致性只不過是弱一致性的一種特例,允許后續(xù)的訪問操作可以暫時(shí)讀不到更新后的數(shù)據(jù),但是經(jīng)過一段時(shí)間之后,必須最終讀到更新后的數(shù)據(jù)。