NoSQL數(shù)據(jù)庫興起

image

前言

近幾年NoSQL數(shù)據(jù)庫興起撞叽,各種新的產(chǎn)品層出不窮嗅辣,在此學(xué)習(xí)下NoSQL的基本理論,并認識下常見的NoSQL數(shù)據(jù)庫麦撵。

一 NoSQL數(shù)據(jù)庫興起的原因

隨著大數(shù)據(jù)技術(shù)興起和Web2.0時代的到來。傳統(tǒng)關(guān)系型數(shù)據(jù)庫已經(jīng)無法滿足當前的數(shù)據(jù)庫需求了溃肪。

無法滿足的需求主要有3點:

  • 海量數(shù)據(jù)的存儲與管理 (傳統(tǒng)關(guān)系型數(shù)據(jù)庫已經(jīng)無法支撐
  • 大數(shù)據(jù)量下的并發(fā)性 (傳統(tǒng)關(guān)系型數(shù)據(jù)庫嚴格的事務(wù)機制導(dǎo)致了海量數(shù)據(jù)的操作會導(dǎo)致大范圍的數(shù)據(jù)鎖定免胃,降低并發(fā)性
  • 高可用性,高擴展性(用戶更關(guān)注是否功能可用惫撰。海量數(shù)據(jù)需要橫向擴展數(shù)據(jù)庫滿足需求羔沙,縱向已經(jīng)無法滿足

與之相比原本關(guān)系型數(shù)據(jù)庫的優(yōu)點已經(jīng)不被許多公司所需要,主要也有3點:

  • 嚴格的數(shù)據(jù)庫事務(wù)(如微信厨钻,新浪微博等互聯(lián)網(wǎng)公司扼雏,丟失一條消息等,ACID的實現(xiàn)與否并不是很重要
  • 嚴格的讀寫實時性(同理夯膀,一條消息服務(wù)器寫入后诗充,其他人是否立即看到并不太重要
  • 復(fù)雜的條件查詢(為了節(jié)約硬件存儲空間降低冗余,傳統(tǒng)關(guān)系型數(shù)據(jù)庫會將各種信息分表存儲诱建,但是現(xiàn)在硬件性能已經(jīng)足夠?qū)⑿畔⑷看鎯选2⒉惶枰獜?fù)雜的多表查詢操作

為了滿足大數(shù)據(jù)量下的業(yè)務(wù)需求,傳統(tǒng)關(guān)系型數(shù)據(jù)庫也發(fā)展出多種技術(shù)手段俺猿,但是最終事實證明NoSQL數(shù)據(jù)庫才是最適合的選擇励翼。傳統(tǒng)關(guān)系型數(shù)據(jù)庫的解決方案經(jīng)歷了如下幾個階段:

  1. 主從復(fù)制,實現(xiàn)讀寫分離辜荠。設(shè)置一個主服務(wù)器汽抚,若干從服務(wù)器。主服務(wù)器負責寫操作伯病,并實時復(fù)制修改內(nèi)容到從服務(wù)器上造烁。從服務(wù)器負責讀操作。(但是對于寫請求的負擔仍然無法解決
  2. 分庫午笛,分流一部分請求惭蟋。分庫又分為橫向分庫和縱向分庫,橫向分庫即將不同業(yè)務(wù)維度的數(shù)據(jù)庫拆分開來药磺,服務(wù)器根據(jù)業(yè)務(wù)場景告组,查詢不同數(shù)據(jù)庫“┡澹縱向分庫即將數(shù)據(jù)行按照一定的規(guī)律分別存儲到不同數(shù)據(jù)庫內(nèi)木缝。如:根據(jù)hash便锨,根據(jù)生產(chǎn)時間等。(但是導(dǎo)致了不同庫之間不能直接查詢我碟,且仍然無法滿足更大的數(shù)據(jù)要求
  3. 分表放案,類似于分庫。通過橫向或者縱向切分表矫俺。

二 NoSQL數(shù)據(jù)庫的四大類型

分別是 :

  • 鍵值數(shù)據(jù)庫
  • 列族數(shù)據(jù)庫
  • 文檔數(shù)據(jù)庫
  • 圖數(shù)據(jù)庫

2.1 普遍的特性(優(yōu)點)

  • 數(shù)據(jù)結(jié)構(gòu)靈活吱殉。(傳統(tǒng)關(guān)系型數(shù)據(jù)庫有嚴格的字段要求,且后續(xù)修改復(fù)雜
  • 可擴展性強(容易橫向擴展厘托,支持分布式友雳,且擴展的復(fù)雜度不高,對比傳統(tǒng)關(guān)系型數(shù)據(jù)庫的擴展非常復(fù)雜
  • 支持高并發(fā)操作铅匹。

2.2 各自的特性

  1. 鍵值數(shù)據(jù)庫押赊。是鍵值對的存儲數(shù)據(jù)庫。
  • 優(yōu)點:適合大量寫操作伊群。
  • 缺點:但是存儲的數(shù)據(jù)沒有結(jié)構(gòu)化,復(fù)雜查詢效率低策精。
  • 應(yīng)用:常用做內(nèi)容緩存舰始。
  • 代表產(chǎn)品:Redis,Memcached
  1. 列族數(shù)據(jù)庫咽袜,底層基于列族進行存儲的數(shù)據(jù)庫丸卷。(查找時,基于行鍵列族查找询刹,可以看做鍵值數(shù)據(jù)庫的變種)
  • 優(yōu)點:查詢速度快谜嫉,橫向擴展性尤其好,適合分布式系統(tǒng)凹联,屏蔽了分布式的復(fù)雜性沐兰。
  • 缺點:功能簡單,大都不支持事務(wù)一致性蔽挠。(Hadoop的HBase是支持的
  • 應(yīng)用:分布式的數(shù)據(jù)存儲住闯。
  • 代表產(chǎn)品:Cassandra,HBase
  1. 文檔數(shù)據(jù)庫澳淑,基于鍵存儲文檔比原。(也可看做鍵值數(shù)據(jù)庫的變種)
  • 優(yōu)點:半結(jié)構(gòu)化,數(shù)據(jù)格式可以自解釋杠巡,如:JSON,XML量窘。因此數(shù)據(jù)結(jié)構(gòu)非常靈活,且并發(fā)性高氢拥。
  • 缺點:缺乏統(tǒng)一的查詢語法
  • 應(yīng)用:存儲文檔型數(shù)據(jù)蚌铜,半結(jié)構(gòu)化數(shù)據(jù)锨侯。
  • 代表產(chǎn)品:MongoDB,CouchDB
  1. 圖數(shù)據(jù)庫厘线,基于圖數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)庫识腿。
  • 優(yōu)點:支持復(fù)雜的圖算法與關(guān)系圖譜
  • 缺點:只適合圖和關(guān)系的應(yīng)用領(lǐng)域,其他領(lǐng)域性能較差造壮。
  • 應(yīng)用:復(fù)雜圖結(jié)構(gòu)渡讼,如社交網(wǎng)絡(luò),關(guān)系圖譜耳璧。
  • 代表產(chǎn)品:Neo4J成箫,InfoGrid

三 NoSQL數(shù)據(jù)庫的三大基石

3.1 CAP理論三個特性

  • C:一致性(任何一個讀操作總是能讀取到之前完成的寫操作結(jié)果)
  • A:可用性(每一個操作總是能夠在確定的時間內(nèi)返回,也就是系統(tǒng)隨時都是可用的)
  • P:分區(qū)容忍性(出現(xiàn)網(wǎng)絡(luò)分區(qū)旨枯,整個系統(tǒng)仍然可用)

經(jīng)過證明蹬昌,一個分布式系統(tǒng)不能同時滿足三個特性,最多滿足兩個攀隔。

傳統(tǒng)關(guān)系型數(shù)據(jù)庫滿足了CA皂贩,放棄了P。因此擴展困難昆汹。而現(xiàn)在大部分互聯(lián)網(wǎng)系統(tǒng)都是分布式系統(tǒng)明刷,不可能放棄P特性。

通俗的解釋下為何只能同時滿足兩個特性:

假設(shè)同時滿足C和A和P满粗。P保證了系統(tǒng)存在不同的網(wǎng)絡(luò)節(jié)點辈末,那么為了保證C,系統(tǒng)會嘗試與其他的節(jié)點同步數(shù)據(jù)信息映皆,但是出現(xiàn)網(wǎng)絡(luò)問題導(dǎo)致系統(tǒng)分區(qū)時(即節(jié)點無法互相通信)挤聘,會導(dǎo)致同步無法立刻完成,這樣就無法滿足A了捅彻。

此時只需要去除一個特性即可:

  1. 去除P组去,保留CA。則沒有了網(wǎng)絡(luò)通信問題步淹,在實現(xiàn)C數(shù)據(jù)一致性時添怔,可以很快的完成,也保證了A贤旷。
  2. 去除A广料,保留CP。則不要求立刻完成幼驶,在實現(xiàn)C數(shù)據(jù)一致性時艾杏,即使出現(xiàn)了網(wǎng)絡(luò)分區(qū)P,也可以慢慢等待盅藻。
  3. 去除C购桑,保留AP畅铭。則不需要保證數(shù)據(jù)一致性了,即使網(wǎng)絡(luò)出現(xiàn)分區(qū)勃蜘,各個節(jié)點都能單獨運行硕噩,保證了用戶可用(反正系統(tǒng)已經(jīng)不在乎各個節(jié)點數(shù)據(jù)的一致了)。

3.2 BASE理論

BASE模型反ACID模型缭贡,完全不同ACID模型炉擅,犧牲高一致性,獲得可用性阳惹。

  • BA:基本可用谍失。一部分分區(qū)出現(xiàn)問題,系統(tǒng)仍然可用,主要保證核心功能可用莹汤。(電商大促時快鱼,為了應(yīng)對訪問量激增,部分用戶可能會被引導(dǎo)到降級頁面纲岭,服務(wù)層也可能只提供降級服務(wù)抹竹。這就是損失部分可用性的體現(xiàn)
  • S:軟狀態(tài)。數(shù)據(jù)的一致性要求降低止潮,可以一段時間不滿足一致性腔丧。相對應(yīng)的是硬狀態(tài)默辨。(分布式存儲中一般一份數(shù)據(jù)至少會有三個副本棚辽,允許不同節(jié)點間副本同步的延時就是軟狀態(tài)的體現(xiàn)浇坐。mysql replication的異步復(fù)制也是一種體現(xiàn)窿凤。
  • E:最終一致性仅偎。弱一致性,后續(xù)操作無法立刻獲取更新的信息雳殊。相對應(yīng)的是強一致性橘沥。最終一致性是特殊的弱一致性,只保證了夯秃。

3.3 最終一致性

(明明BASE就包含了最終一致性座咆,不知道書中為何又將它單獨列為三大理論基礎(chǔ)之一)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市仓洼,隨后出現(xiàn)的幾起案子介陶,更是在濱河造成了極大的恐慌,老刑警劉巖色建,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哺呜,死亡現(xiàn)場離奇詭異,居然都是意外死亡箕戳,警方通過查閱死者的電腦和手機某残,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門国撵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人玻墅,你說我怎么就攤上這事介牙。” “怎么了澳厢?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵环础,是天一觀的道長。 經(jīng)常有香客問我赏酥,道長喳整,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任裸扶,我火速辦了婚禮框都,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘呵晨。我一直安慰自己魏保,他們只是感情好,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布摸屠。 她就那樣靜靜地躺著谓罗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪季二。 梳的紋絲不亂的頭發(fā)上檩咱,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音胯舷,去河邊找鬼刻蚯。 笑死,一個胖子當著我的面吹牛桑嘶,可吹牛的內(nèi)容都是我干的炊汹。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼逃顶,長吁一口氣:“原來是場噩夢啊……” “哼讨便!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起以政,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤霸褒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后盈蛮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體废菱,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了昙啄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片穆役。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖梳凛,靈堂內(nèi)的尸體忽然破棺而出耿币,到底是詐尸還是另有隱情,我是刑警寧澤韧拒,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布淹接,位于F島的核電站,受9級特大地震影響叛溢,放射性物質(zhì)發(fā)生泄漏塑悼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一楷掉、第九天 我趴在偏房一處隱蔽的房頂上張望厢蒜。 院中可真熱鬧,春花似錦烹植、人聲如沸斑鸦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽巷屿。三九已至,卻和暖如春墩虹,著一層夾襖步出監(jiān)牢的瞬間嘱巾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工诫钓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留旬昭,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓尖坤,卻偏偏與公主長得像稳懒,于是被迫代替她去往敵國和親闲擦。 傳聞我的和親對象是個殘疾皇子慢味,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應(yīng)的列上鍵入重復(fù)值時,會觸發(fā)此異常墅冷。 O...
    我想起個好名字閱讀 5,317評論 0 9
  • 當前數(shù)據(jù)庫分為關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫 關(guān)系型數(shù)據(jù)庫 關(guān)系型數(shù)據(jù)庫:指采用了關(guān)系模型來組織數(shù)據(jù)的數(shù)據(jù)庫纯路。關(guān)系模...
    意識流丶閱讀 162,398評論 4 102
  • 為何要使用NoSQL數(shù)據(jù)庫? 1.NoSQL具有靈活的數(shù)據(jù)模型寞忿,可以處理非結(jié)構(gòu)化/半結(jié)構(gòu)化的大數(shù)據(jù) 2.NoSQL...
    毛子阿卡西閱讀 534評論 0 3
  • 今天是我的月經(jīng)第一日驰唬,狀態(tài)不好,整個人悶悶的,看什么都不大順眼叫编,得忍著辖佣,得在心里不斷地提醒自己,不能要求別人和自己...
    曼谷123閱讀 194評論 0 0
  • 高級 雙保險 公鑰搓逾,私鑰 DH 密鑰交換算法(是非對稱加密的起源) RSA 基于因子分解(應(yīng)用范圍最廣卷谈,既能用于數(shù)...
    _愛笑的eyes閱讀 4,876評論 0 1